diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-03-18 18:18:57 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-03-18 18:18:57 +0100 |
commit | 57f4d38841c40cad3c206abdd16eebaed753aa1c (patch) | |
tree | c7e5a40b457845b2fb296563add9599d2e81384e /src/player.cc | |
parent | 9364b9bb84f607d8603f60b86f965b77e03d8c70 (diff) |
Update all fiels to adhere to style-guide
Diffstat (limited to 'src/player.cc')
-rw-r--r-- | src/player.cc | 243 |
1 files changed, 129 insertions, 114 deletions
diff --git a/src/player.cc b/src/player.cc index 3a2bfd2..1181841 100644 --- a/src/player.cc +++ b/src/player.cc @@ -32,159 +32,174 @@ Player::Player() { - peak = 0; - pos = 0; - gain_scalar = 1.0; - pcm_data = NULL; - pcm_size = 0; - end = 0; - new_selection = false; - - connect(&report_timer, SIGNAL(timeout()), this, SLOT(reportTimeout())); - report_timer.start(50); // Update 25 times per second - - start(); + peak = 0; + pos = 0; + gain_scalar = 1.0; + pcm_data = NULL; + pcm_size = 0; + end = 0; + new_selection = false; + + connect(&report_timer, SIGNAL(timeout()), this, SLOT(reportTimeout())); + report_timer.start(50); // Update 25 times per second + + start(); } Player::~Player() { - running = false; // Signal player thread to stop - wait(); // Wait for player thread to stop. + running = false; // Signal player thread to stop + wait(); // Wait for player thread to stop. } #define _MIN(a, b) (a<b?a:b) void Player::run() { - Selection sel; - - ao_initialize(); - - ao_sample_format sf; - memset(&sf, 0, sizeof(sf)); - sf.bits = 16; - sf.rate = 44100; - sf.channels = 1; - sf.byte_format = AO_FMT_NATIVE; - - dev = ao_open_live(ao_default_driver_id(), &sf, 0); - - running = true; - - short s[BUFSZ]; - while(running) { - - { // Check for new Selection. - QMutexLocker lock(&mutex); - if(new_selection) { - sel = selection; - pos = sel.from; - end = sel_end; - new_selection = false; - } - } - - for(size_t i = 0; i < BUFSZ; i++) { - double sample = 0.0; - size_t p = i + pos; - if(p < sel.to && p < end && p < pcm_size) { - double fade = 1; - if(p < (sel.from + sel.fadein)) { - // Apply linear fade-in - double fp = (double)((int)p - (int)sel.from); - fade = fp / (double)sel.fadeout; - } - - if(p > (sel.to - sel.fadeout)) { - // Apply linear fade-out - double fp = (double)(((int)sel.to - (int)sel.fadeout) - (int)p); - fade = 1 + (fp / (double)sel.fadeout); - } - - sample = pcm_data[p] * fade * gain_scalar; - } - if(fabs(sample) > peak) { - peak = fabs(sample); - } - s[i] = _MIN(sample * SHRT_MAX, SHRT_MAX); - } - - ao_play(dev, (char*)s, BUFSZ * sizeof(short)); - - pos += BUFSZ; - } - - ao_close(dev); - ao_shutdown(); + Selection sel; + + ao_initialize(); + + ao_sample_format sf; + memset(&sf, 0, sizeof(sf)); + sf.bits = 16; + sf.rate = 44100; + sf.channels = 1; + sf.byte_format = AO_FMT_NATIVE; + + dev = ao_open_live(ao_default_driver_id(), &sf, 0); + + running = true; + + short s[BUFSZ]; + while(running) + { + { + // Check for new Selection. + QMutexLocker lock(&mutex); + if(new_selection) + { + sel = selection; + pos = sel.from; + end = sel_end; + new_selection = false; + } + } + + for(size_t i = 0; i < BUFSZ; i++) + { + double sample = 0.0; + size_t p = i + pos; + if(p < sel.to && p < end && p < pcm_size) + { + double fade = 1; + if(p < (sel.from + sel.fadein)) + { + // Apply linear fade-in + double fp = (double)((int)p - (int)sel.from); + fade = fp / (double)sel.fadeout; + } + + if(p > (sel.to - sel.fadeout)) + { + // Apply linear fade-out + double fp = (double)(((int)sel.to - (int)sel.fadeout) - (int)p); + fade = 1 + (fp / (double)sel.fadeout); + } + + sample = pcm_data[p] * fade * gain_scalar; + } + if(fabs(sample) > peak) + { + peak = fabs(sample); + } + s[i] = _MIN(sample * SHRT_MAX, SHRT_MAX); + } + + ao_play(dev, (char*)s, BUFSZ * sizeof(short)); + + pos += BUFSZ; + } + + ao_close(dev); + ao_shutdown(); } bool Player::playSelectionDone() { - return pos >= sel_end || pos >= selection.to; + return pos >= sel_end || pos >= selection.to; } void Player::playSelection(Selection s, int len) { - { // Enqueue new Selection for player consumation - QMutexLocker lock(&mutex); - - selection = s; - - if(len > 0) sel_end = len; - else sel_end = selection.to - selection.from; - - sel_end += selection.from; - - new_selection = true; - } - - // Wait until player actually consumed the new Selection. - while(new_selection) { - msleep(1); - } + { + // Enqueue new Selection for player consumation + QMutexLocker lock(&mutex); + + selection = s; + + if(len > 0) + { + sel_end = len; + } + else + { + sel_end = selection.to - selection.from; + } + + sel_end += selection.from; + + new_selection = true; + } + + // Wait until player actually consumed the new Selection. + while(new_selection) + { + msleep(1); + } } void Player::setGainScalar(double g) { - gain_scalar = g; + gain_scalar = g; } void Player::setGainDB(double gain_db) { - setGainScalar(pow(10, gain_db/ 20.0)); + setGainScalar(pow(10, gain_db/ 20.0)); } void Player::reportTimeout() { - emit peakUpdate(peak); - emit peakUpdateDB(20 * log10(peak)); - peak = 0.0; + emit peakUpdate(peak); + emit peakUpdateDB(20 * log10(peak)); + peak = 0.0; - emit positionUpdate(pos); - peak = 0.0; + emit positionUpdate(pos); + peak = 0.0; } -void Player::setPcmData(float *data, size_t size) +void Player::setPcmData(float* data, size_t size) { - pcm_data = data; - pcm_size = size; + pcm_data = data; + pcm_size = size; } void Player::setPosition(size_t position) { - Selection s; - s.from = position; - s.to = pcm_size; - s.fadein = 0; - s.fadeout = 0; - playSelection(s); + Selection s; + s.from = position; + s.to = pcm_size; + s.fadein = 0; + s.fadeout = 0; + playSelection(s); } void Player::stop() { - Selection s; - s.from = 0; - s.to = 0; - s.fadein = 0; - s.fadeout = 0; - playSelection(s, pos); + Selection s; + s.from = 0; + s.to = 0; + s.fadein = 0; + s.fadeout = 0; + playSelection(s, pos); } |