void sound_cd_get_buffer(int16_t *buffer, int len, void *p) { int pos, c; ioctl_audio_callback(cd_buffer, (len * 2 * 441) / 480); pos = 0; for (c = 0; c < len * 2; c+=2) { buffer[c] += cd_buffer[((pos >> 16) << 1)] / 2; buffer[c + 1] += cd_buffer[((pos >> 16) << 1) + 1] / 2; pos += 60211; //(44100 * 65536) / 48000; } }
static void sound_cd_thread(void *param) { while (1) { int c; thread_wait_event(sound_cd_event, -1); ioctl_audio_callback(cd_buffer, CD_BUFLEN*2); if (soundon) { for (c = 0; c < CD_BUFLEN*2; c += 2) { cd_buffer[c] = ((int32_t)cd_buffer[c] * cd_vol_l) / 65535; cd_buffer[c+1] = ((int32_t)cd_buffer[c+1] * cd_vol_r) / 65535; } givealbuffer_cd(cd_buffer); } } }