Changeset 2932:09d25b79ce75 in roaraudio
- Timestamp:
- 10/16/09 21:36:47 (15 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/include/mixer.h
r2149 r2932 28 28 #include <roaraudio.h> 29 29 30 int mix_clients (void * output, int bits, void ** input, int samples);31 int mix_clients_8bit (void * output, void ** input, int samples);32 int mix_clients_16bit (void * output, void ** input, int samples);33 int mix_clients_24bit (void * output, void ** input, int samples);34 int mix_clients_32bit (void * output, void ** input, int samples);35 36 30 int change_vol (void * output, int bits, void * input, int samples, int channels, struct roar_mixer_settings * set); 37 31 int change_vol_8bit (void * output, void * input, int samples, int channels, struct roar_mixer_settings * set); -
roard/loop.c
r2530 r2932 97 97 } else { 98 98 if ( ( streams = streams_get_mixbuffers(&streams_input, sa, g_pos)) != -1 ) { 99 mix_clients(g_output_buffer, sa->bits, streams_input, ROAR_OUTPUT_BUFFER_SAMPLES * sa->channels);99 roar_mix_pcm(g_output_buffer, sa->bits, streams_input, ROAR_OUTPUT_BUFFER_SAMPLES * sa->channels); 100 100 } 101 101 } -
roard/mixer.c
r2149 r2932 24 24 25 25 #include "roard.h" 26 27 int mix_clients (void * output, int bits, void ** input, int samples) {28 if ( bits == 8 ) {29 return mix_clients_8bit(output, input, samples);30 } else if ( bits == 16 ) {31 return mix_clients_16bit(output, input, samples);32 } else if ( bits == 24 ) {33 return mix_clients_24bit(output, input, samples);34 } else if ( bits == 32 ) {35 return mix_clients_32bit(output, input, samples);36 } else {37 return -1;38 }39 }40 41 int mix_clients_8bit (void * output, void ** input, int samples) {42 int i, s;43 register int c;44 45 for (s = 0; s < samples; s++) {46 c = 0;47 48 for (i = 0; input[i] != NULL; i++)49 c += ((char**)input)[i][s];50 51 if ( c > 127 )52 c = 127;53 else if ( c < -128 )54 c = -128;55 ((char*)output)[s] = (char)c;56 }57 58 return 0;59 }60 61 int mix_clients_16bit (void * output, void ** input, int samples) {62 int i, s;63 register int_least32_t c;64 int16_t ** in = (int16_t**) input;65 int16_t * out = output;66 67 #ifdef DEBUG68 for (i = 0; input[i] != NULL; i++)69 ROAR_DBG("mix_clients_16bit(*): input[%i] = %p", i, input[i]);70 #endif71 72 /*73 if ( input[0] != NULL )74 write(1, input[0], samples*2);75 */76 77 /*78 if ( input[0] != NULL ) {79 memcpy(output, input[0], samples*2);80 return -1;81 }82 */83 84 for (s = 0; s < samples; s++) {85 c = 0;86 for (i = 0; input[i] != NULL; i++) {87 // printf("D: input[i=%i] = %p\n", i, input[i]);88 c += in[i][s];89 }90 91 if ( c > 32767 )92 c = 32767;93 else if ( c < -32768 )94 c = -32768;95 96 out[s] = c;97 }98 99 return 0;100 }101 102 int mix_clients_24bit (void * output, void ** input, int samples) {103 return -1;104 }105 106 int mix_clients_32bit (void * output, void ** input, int samples) {107 #ifdef ROAR_NATIVE_INT64108 int32_t ** in = (int32_t**) input;109 int32_t * out = (int32_t* ) output;110 int i, s;111 ROAR_NATIVE_INT64 c;112 113 for (s = 0; s < samples; s++) {114 c = 0;115 116 for (i = 0; input[i]; i++)117 c += in[i][s];118 119 if ( c > 21474836487LL )120 c = 2147483647LL;121 else if ( c < -2147483648LL )122 c = -2147483648LL;123 out[s] = (int32_t)c;124 }125 126 return 0;127 #else128 return -1;129 #endif130 }131 26 132 27 int change_vol (void * output, int bits, void * input, int samples, int channels, struct roar_mixer_settings * set) { -
roard/ssynth.c
r2489 r2932 171 171 } 172 172 173 if ( mix_clients(outbufdata, g_sa->bits, indbufs, ROAR_OUTPUT_BUFFER_SAMPLES) == -1 ) {173 if ( roar_mix_pcm(outbufdata, g_sa->bits, indbufs, ROAR_OUTPUT_BUFFER_SAMPLES) == -1 ) { 174 174 roar_buffer_free(outbuf); 175 175 return -1;
Note: See TracChangeset
for help on using the changeset viewer.