From 08988d7ad00709b0ff7673b01150e3954f2c96bc Mon Sep 17 00:00:00 2001 From: ZoRo Date: Fri, 30 Jul 2021 09:22:29 +0100 Subject: Attempt to fix noise at the end of record --- WasmAudio/main.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/WasmAudio/main.c b/WasmAudio/main.c index 6ee9f3b..4cb9f2e 100644 --- a/WasmAudio/main.c +++ b/WasmAudio/main.c @@ -49,16 +49,24 @@ #define SCREEN_HEIGHT 320 #define SCREEN_HEIGHT2 (SCREEN_HEIGHT/2) -#define BUFSIZE 1536000 + +//Maximum recording time plus padding +#define RECORDING_BUFFER_SECONDS (2) +//Maximum recording time +#define MAX_RECORDING_SECONDS (RECORDING_BUFFER_SECONDS) +#define RECORDING_BUFFER_CHANNELS (2) +#define RECORDING_BUFFER_SAMPLERATE (48000) +#define RECORDING_BUFFER_SAMPLESIZE (4) //LSB float32 +#define RECORDING_BUFFER_SAMPLES (4096) +#define SDL_CALLBACK_USED_BUFSIZE (RECORDING_BUFFER_SAMPLES*RECORDING_BUFFER_SAMPLESIZE*RECORDING_BUFFER_CHANNELS ) + +#define BUFSIZE (RECORDING_BUFFER_SECONDS*RECORDING_BUFFER_CHANNELS*RECORDING_BUFFER_SAMPLERATE*RECORDING_BUFFER_SAMPLESIZE) #define BUFSIZE2 (BUFSIZE/2) #define BUFSIZE4 (BUFSIZE/4) #define BUFSIZE8 (BUFSIZE/8) #define BUFSIZE16 (BUFSIZE/16) -//Maximum recording time plus padding -#define RECORDING_BUFFER_SECONDS (2) -//Maximum recording time -#define MAX_RECORDING_SECONDS (RECORDING_BUFFER_SECONDS+2) + //SDL drawing recording int first_run=1; @@ -71,15 +79,6 @@ static SDL_AudioDeviceID playbackDeviceId = 0; int audio_buf_position=0; int current_state=0; -//audio buffer vars -int audio_rec_buffer_size=-1; -int audio_rec_buffer_max_size=-1; -static uint8_t audio_rec_buffer_[BUFSIZE]; -#define PROCESS_BUF_SIZE (BUFSIZE4) -static double process_buf[PROCESS_BUF_SIZE+100]; -static double process_buf2[PROCESS_BUF_SIZE+100]; -uint8_t *audio_rec_buffer=NULL; - //FIR filter stuff FILE *f_1,*f_2; fir_t fir_lp; @@ -92,6 +91,18 @@ int filter_FS_hz=48000; int filter_FC_hz=1000; double filter_FC; +//audio buffer vars +int audio_rec_buffer_size=-1; +int audio_rec_buffer_max_size=-1; +static uint8_t audio_rec_buffer_[BUFSIZE]; +#define PROCESS_BUF_SIZE (BUFSIZE) +uint8_t *audio_rec_buffer=NULL; +static double process_buf[PROCESS_BUF_SIZE+200]; +static double process_buf2[PROCESS_BUF_SIZE+200]; + + + + void audio_recording_callback(void *data, uint8_t *insamples, int len) { if (audio_buf_positionnum_taps], (fir->num_taps-1)*sizeof(double)); } @@ -564,7 +576,7 @@ void main_loop() SDL_LockAudioDevice( playbackDeviceId ); //Finished playback //printf("audio_buf_position=%d audio_rec_buffer_size=%d\n",audio_buf_position,audio_rec_buffer_size); - if( audio_buf_position > audio_rec_buffer_size ) + if( audio_buf_position >= (audio_rec_buffer_size-SDL_CALLBACK_USED_BUFSIZE) ) { //Stop playing audio SDL_PauseAudioDevice( playbackDeviceId, SDL_TRUE ); @@ -654,6 +666,7 @@ int main(int argc, const char * argv[]) { audio_rec_want.format = AUDIO_F32; audio_rec_want.channels = 2; audio_rec_want.samples = 4096; + //audio_rec_want.silence = 0; audio_rec_want.callback = audio_recording_callback; audio_rec_device_name = SDL_GetAudioDeviceName(0, SDL_TRUE ); @@ -684,6 +697,7 @@ int main(int argc, const char * argv[]) { audio_rec_buffer = &audio_rec_buffer_[0]; printf("buffsize_max=%d\n",audio_rec_buffer_max_size); printf("buffsize=%d\n",audio_rec_buffer_size); + printf("allocated=%d\n",BUFSIZE); memset(audio_rec_buffer,0,audio_rec_buffer_max_size); } @@ -692,6 +706,7 @@ int main(int argc, const char * argv[]) { audio_play_want.format = AUDIO_F32; audio_play_want.channels = 2; audio_play_want.samples = 4096; + //audio_play_want.silence = 0; audio_play_want.callback = audio_playback_callback; playbackDeviceId = SDL_OpenAudioDevice(NULL, SDL_FALSE, &audio_play_want, &audio_play_have, SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_FREQUENCY_CHANGE); -- cgit v1.2.3