Author: titmuss
Date: Wed Oct 29 07:48:13 2008
New Revision: 3226
URL: http://svn.slimdevices.com?rev=3226&root=Jive&view=rev
Log:
Bug: N/A
Description:
Mix sound effects in while playing back audio.
Modified:
7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_sample.c
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c?rev=3226&root=Jive&r1=3225&r2=3226&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c Wed
Oct 29 07:48:13 2008
@@ -61,22 +61,24 @@
if (!(current_audio_state & DECODE_STATE_RUNNING)) {
memset(outputArray, 0, len);
- /* mix in sound effects */
- decode_sample_mix(outputArray, len);
-
- return;
+ goto mixin_effects;
}
if (add_silence_ms) {
add_bytes = SAMPLES_TO_BYTES((u32_t)((add_silence_ms *
current_sample_rate) / 1000));
- if (add_bytes > len) add_bytes = len;
- memset(outputBuffer, 0, add_bytes);
- outputBuffer += add_bytes;
+ if (add_bytes > len) {
+ add_bytes = len;
+ }
+ memset(outputArray, 0, add_bytes);
+ outputArray += add_bytes;
len -= add_bytes;
add_silence_ms -= (BYTES_TO_SAMPLES(add_bytes) * 1000) /
current_sample_rate;
- if (add_silence_ms < 2)
+ if (add_silence_ms < 2) {
add_silence_ms = 0;
- if (!len) return;
+ }
+ if (!len) {
+ goto mixin_effects;
+ }
}
bytes_used = fifo_bytes_used(&decode_fifo);
@@ -97,7 +99,7 @@
memset(outputArray, 0, len);
DEBUG_ERROR("Audio underrun: used 0 bytes");
- return;
+ goto mixin_effects;
}
if (bytes_used < len) {
@@ -159,6 +161,10 @@
if (reached_start_point && current_sample_rate != pcm_sample_rate) {
new_sample_rate = current_sample_rate;
}
+
+ mixin_effects:
+ /* mix in sound effects */
+ decode_sample_mix(outputBuffer, SAMPLES_TO_BYTES(framesPerBuffer));
return;
}
Modified: 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_sample.c
URL:
http://svn.slimdevices.com/7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_sample.c?rev=3226&root=Jive&r1=3225&r2=3226&view=diff
==============================================================================
--- 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_sample.c
(original)
+++ 7.3/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_sample.c Wed
Oct 29 07:48:13 2008
@@ -7,6 +7,7 @@
#include "common.h"
#include "ui/jive.h"
+#include "audio/fixed_math.h"
struct jive_sample {
@@ -21,10 +22,11 @@
/* mixer channels */
#define MAX_SAMPLES 2
-struct jive_sample *sample[MAX_SAMPLES];
+static struct jive_sample *sample[MAX_SAMPLES];
#define MAXVOLUME 100
-int effect_volume = MAXVOLUME;
+static fft_fixed effect_gain = FIXED_ONE;
+static int effect_volume;
static void sample_free(struct jive_sample *sample) {
@@ -44,6 +46,7 @@
const Sint64 min_sample = -0x80000000LL;
int i;
+ /* fixme: this crudely mixes the samples onto the buffer */
for (i=0; i<MAX_SAMPLES; i++) {
Sint32 *s, *d;
size_t len;
@@ -61,17 +64,17 @@
s = (Sint32 *) (sample[i]->data + sample[i]->pos);
d = (Sint32 *) buffer;
for (j=0; j<len>>2; j++) {
- Sint64 t = s[j];
- t = (t * effect_volume) / MAXVOLUME;
- t += d[j];
-
- if (t >= max_sample) {
- t = max_sample;
+ Sint64 tmp = *(s++);
+ tmp = fixed_mul(effect_gain, tmp);
+ tmp += *d;
+
+ if (tmp >= max_sample) {
+ tmp = max_sample;
}
- else if (t <= min_sample) {
- t = min_sample;
+ else if (tmp <= min_sample) {
+ tmp = min_sample;
}
- d[j] = t;
+ *(d++) = tmp;
}
sample[i]->pos += len;
@@ -253,12 +256,16 @@
*/
effect_volume = lua_tointeger(L, 2);
- //if (effect_volume > 0) {
- // open_audio();
- //}
- //else {
- // close_audio();
- //}
+
+ if (effect_volume < 0) {
+ effect_volume = 0;
+ }
+ if (effect_volume > MAXVOLUME) {
+ effect_volume = MAXVOLUME;
+ }
+
+ effect_gain = fixed_div(s32_to_fixed(effect_volume),
+ s32_to_fixed(MAXVOLUME));
return 0;
}
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins