summaryrefslogtreecommitdiff
path: root/src/soundplayer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/soundplayer.cc')
-rw-r--r--src/soundplayer.cc158
1 files changed, 80 insertions, 78 deletions
diff --git a/src/soundplayer.cc b/src/soundplayer.cc
index c59e84e..e5feebc 100644
--- a/src/soundplayer.cc
+++ b/src/soundplayer.cc
@@ -34,101 +34,103 @@
SoundPlayer::SoundPlayer()
{
- start();
+ start();
}
SoundPlayer::~SoundPlayer()
{
- running = false;
+ running = false;
wait();
}
void SoundPlayer::run()
{
-
- printf("SoundPlayer running\n");
-
- ao_initialize();
-
- ao_sample_format sf;
- memset(&sf, 0, sizeof(sf));
- sf.bits = 16;
- sf.rate = 44100;
- sf.channels = 2;
- sf.byte_format = AO_FMT_NATIVE;
-
- ao_device *dev = ao_open_live(ao_default_driver_id(), &sf, 0);
-
- running = true;
-
- short s[BUFSZ];
- while(running) {
-
- { // Check for new Selection.
- QMutexLocker lock(&mutex);
- while(queue.size()) {
- printf(" - New sound\n");
- active.append(queue.front());
- queue.pop_front();
- }
- }
-
- memset(s, 0, BUFSZ * sizeof(short));
-
- QList<QueueItem>::iterator it = active.begin();
- while(it != active.end()) {
- QueueItem &item = *it;
-
- for(size_t i = 0; i < BUFSZ; i++) {
- if(item.pos >= item.size) {
- it = active.erase(it);
- goto nextitem;
- }
- s[i] += item.samples[item.pos] * 32536;
- item.pos++;
- }
-
- it++;
-
- nextitem:
- int a = 1;(void)a;
- }
-
- ao_play(dev, (char*)s, BUFSZ * sizeof(short));
- }
-
- ao_close(dev);
- ao_shutdown();
+ printf("SoundPlayer running\n");
+
+ ao_initialize();
+
+ ao_sample_format sf;
+ memset(&sf, 0, sizeof(sf));
+ sf.bits = 16;
+ sf.rate = 44100;
+ sf.channels = 2;
+ sf.byte_format = AO_FMT_NATIVE;
+
+ ao_device *dev = ao_open_live(ao_default_driver_id(), &sf, 0);
+
+ running = true;
+
+ short s[BUFSZ];
+ while(running)
+ {
+ { // Check for new Selection.
+ QMutexLocker lock(&mutex);
+ while(queue.size())
+ {
+ printf(" - New sound\n");
+ active.append(queue.front());
+ queue.pop_front();
+ }
+ }
+
+ memset(s, 0, BUFSZ * sizeof(short));
+
+ QList<QueueItem>::iterator it = active.begin();
+ while(it != active.end())
+ {
+ QueueItem &item = *it;
+
+ for(size_t i = 0; i < BUFSZ; i++)
+ {
+ if(item.pos >= item.size)
+ {
+ it = active.erase(it);
+ goto nextitem;
+ }
+ s[i] += item.samples[item.pos] * 32536 * 0.5;
+ item.pos++;
+ }
+
+ it++;
+
+ nextitem:
+ int a = 1;(void)a;
+ }
+
+ ao_play(dev, (char*)s, BUFSZ * sizeof(short));
+ }
+
+ ao_close(dev);
+ ao_shutdown();
}
void SoundPlayer::playFile(QString file)
{
+ printf(" - playFile(%s)\n", file.toStdString().c_str());
- printf(" - playFile(%s)\n", file.toStdString().c_str());
-
- SNDFILE *fh;
- SF_INFO sf_info;
+ SNDFILE *fh;
+ SF_INFO sf_info;
- fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info);
- if(!fh) {
- printf("Load error '%s'\n", file.toStdString().c_str());
- return;
- }
-
- size_t size = sf_info.frames * sf_info.channels;
- float *data = new float[size];
- sf_read_float(fh, data, size);
+ fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info);
+ if(!fh)
+ {
+ printf("Load error '%s'\n", file.toStdString().c_str());
+ return;
+ }
- sf_close(fh);
+ size_t size = sf_info.frames * sf_info.channels;
+ float *data = new float[size];
+ sf_read_float(fh, data, size);
- QueueItem qi;
- qi.samples = data;
- qi.pos = 0;
- qi.size = size;
+ sf_close(fh);
- {
- QMutexLocker lock(&mutex);
- queue.append(qi);
- }
+ QueueItem qi;
+ qi.samples = data;
+ qi.pos = 0;
+ qi.size = size;
+ {
+ QMutexLocker lock(&mutex);
+ queue.append(qi);
+ }
}