diff --git a/input/alsa.c b/input/alsa.c index 1debf11..1aa3a6d 100644 --- a/input/alsa.c +++ b/input/alsa.c @@ -35,11 +35,11 @@ snd_pcm_uframes_t* frames) { exit(EXIT_FAILURE); } - if ((err = snd_pcm_prepare (*handle)) < 0) { - fprintf (stderr, "cannot prepare audio interface for use (%s)\n", - snd_strerror (err)); - exit (EXIT_FAILURE); - } + if ((err = snd_pcm_prepare (*handle)) < 0) { + fprintf (stderr, "cannot prepare audio interface for use (%s)\n", + snd_strerror (err)); + exit (EXIT_FAILURE); + } // getting actual format snd_pcm_hw_params_get_format(params, (snd_pcm_format_t*)&sample_rate); @@ -89,7 +89,7 @@ const int size) { } ++audio_out_buffer_index; - audio_out_buffer_index %= 2048; + audio_out_buffer_index %= audio->FFTbufferSize; } } @@ -107,6 +107,7 @@ void* input_alsa(void* data) { snd_pcm_get_params(handle, &buffer_size, &period_size); int16_t buf[period_size]; + int32_t buffer32[period_size]; frames = period_size / ((audio->format / 8) * CHANNELS_COUNT); //printf("period size: %lu\n", period_size); //exit(0); @@ -128,7 +129,23 @@ void* input_alsa(void* data) { audio->audio_out_r[n] = buf[i + 1]; } n++; - if (n == 2048 - 1)n = 0; + if (n == audio->FFTbufferSize - 1) n = 0; + } + break; + case 32: + err = snd_pcm_readi(handle, buffer32, frames); + for (uint16_t i = 0; i < frames * 2; i += 2) { + if (audio->channels == 1) { + audio->audio_out_l[n] = (buffer32[i] / pow(2,16)) / 2; + audio->audio_out_l[n] += (buffer32[i + 1] / pow(2,16)) / 2; + } + //stereo storing channels in buffer + if (audio->channels == 2) { + audio->audio_out_l[n] = buffer32[i] / pow(2,16); + audio->audio_out_r[n] = buffer32[i + 1] / pow(2,16); + } + n++; + if (n == audio->FFTbufferSize - 1) n = 0; } break; default: diff --git a/input/shmem.c b/input/shmem.c index ffaeacd..64d20ae 100644 --- a/input/shmem.c +++ b/input/shmem.c @@ -68,7 +68,7 @@ void* input_shmem(void* data) audio->audio_out_r[n] = mmap_area->buffer[i + 1]; } n++; - if (n == 2048 - 1) n = 0; + if (n == audio->FFTbufferSize - 1) n = 0; } if (audio->terminate == 1) { break; diff --git a/input/sndio.c b/input/sndio.c index 6142225..f6dbe5d 100644 --- a/input/sndio.c +++ b/input/sndio.c @@ -52,7 +52,7 @@ void* input_sndio(void* data) audio->audio_out_l[n] = buf[i]; audio->audio_out_r[n] = buf[i + 1]; } - n = (n + 1) % 2048; + n = (n + 1) % audio->FFTbufferSize; } }