added sound engine files

This commit is contained in:
Max-Wilhelm Bruker 2011-05-21 23:03:51 +02:00
parent a4097659d3
commit 0c1c0fcb56
2 changed files with 109 additions and 0 deletions

View file

@ -0,0 +1,77 @@
#include "soundengine.h"
#include "settingscache.h"
#include <QAudioOutput>
#include <QAudioFormat>
#include <QFile>
#include <QBuffer>
SoundEngine::SoundEngine(QObject *parent)
: QObject(parent)
{
inputBuffer = new QBuffer;
QAudioFormat format;
format.setFrequency(44100);
format.setChannels(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
audio = new QAudioOutput(format, this);
connect(settingsCache, SIGNAL(soundPathChanged()), this, SLOT(cacheData()));
cacheData();
}
void SoundEngine::cacheData()
{
static const QStringList fileNames = QStringList()
<< "notification" << "draw" << "playcard" << "shuffle" << "tap" << "untap";
for (int i = 0; i < fileNames.size(); ++i) {
QFile file(settingsCache->getSoundPath() + "/" + fileNames[i] + ".raw");
file.open(QIODevice::ReadOnly);
audioData.insert(fileNames[i], file.readAll());
file.close();
}
}
void SoundEngine::playSound(const QString &fileName)
{
if (!settingsCache->getSoundEnabled())
return;
audio->stop();
inputBuffer->close();
inputBuffer->setData(audioData[fileName]);
inputBuffer->open(QIODevice::ReadOnly);
audio->start(inputBuffer);
}
void SoundEngine::notification()
{
playSound("notification");
}
void SoundEngine::draw()
{
playSound("draw");
}
void SoundEngine::playCard()
{
playSound("playcard");
}
void SoundEngine::shuffle()
{
playSound("shuffle");
}
void SoundEngine::tap()
{
playSound("tap");
}
void SoundEngine::untap()
{
playSound("untap");
}

View file

@ -0,0 +1,32 @@
#ifndef SOUNDENGINE_H
#define SOUNDENGINE_H
#include <QObject>
#include <QMap>
class QAudioOutput;
class QBuffer;
class SoundEngine : public QObject {
Q_OBJECT
private:
void playSound(const QString &fileName);
QMap<QString, QByteArray> audioData;
QBuffer *inputBuffer;
QAudioOutput *audio;
private slots:
void cacheData();
public:
SoundEngine(QObject *parent = 0);
public slots:
void notification();
void draw();
void playCard();
void shuffle();
void tap();
void untap();
};
extern SoundEngine *soundEngine;
#endif