int n_input_devices=0;
int n_output_devices=0;
-static float *mic_buffer=NULL;
-static int mic_buffer_size;
-static int audio_buffer_size=256;
+#define BUFFER_SIZE 256
//
// AUDIO_GET_CARDS
return -1;
}
- switch(protocol) {
- case ORIGINAL_PROTOCOL:
-#ifdef SOAPYSDR
- case SOAPYSDR_PROTOCOL:
-#endif
- framesPerBuffer = 720;
- break;
- case NEW_PROTOCOL:
- framesPerBuffer = 64;
- break;
- default:
- framesPerBuffer = 720; // we should never come here
- break;
- }
- mic_buffer_size=framesPerBuffer;
- fprintf(stderr,"audio_open_input: mic_buffer_size=%d\n",mic_buffer_size);
+ framesPerBuffer = BUFFER_SIZE; // is this for either protocol
bzero( &inputParameters, sizeof( inputParameters ) ); //not necessary if you are filling in all the fields
inputParameters.channelCount = 1; // MONO
fprintf(stderr, "PORTAUDIO ERROR: AOI start stream:%s\n",Pa_GetErrorText(err));
return -1;
}
- mic_buffer=g_new0(float,mic_buffer_size);
return 0;
}
{
float *in = (float *)inputBuffer;
int i;
-
- if (mic_buffer == NULL) return paAbort;
-
-//
-// if something does not look good, fill mic_buffer with silence
-//
- if (in == NULL || framesPerBuffer != mic_buffer_size) {
- memset(mic_buffer, 0, sizeof(float)*mic_buffer_size);
+ gfloat sample;
+
+
+ if (in == NULL) {
+ //
+ // We could just do nothing, but rather send a bunch of silence
+ // Note the mic samples flying in are the "heart-beat" of the TX engine.
+ //
+ for (i=0; i<BUFFER_SIZE; i++) {
+ sample=0.0;
+ switch(protocol) {
+ case ORIGINAL_PROTOCOL:
+ old_protocol_process_local_mic(sample);
+ break;
+ case NEW_PROTOCOL:
+ new_protocol_process_local_mic(sample);
+ break;
+#ifdef SOAPYSDR
+ case SOAPYSDR_PROTOCOL:
+ soapy_protocol_process_local_mic(sample);
+ break;
+#endif
+ default:
+ break;
+ }
+ }
} else {
- memcpy(mic_buffer, in, sizeof(float)*mic_buffer_size);
- }
-//
-// Call routine to send mic buffer
-//
- switch(protocol) {
- case ORIGINAL_PROTOCOL:
- old_protocol_process_local_mic(mic_buffer);
- break;
- case NEW_PROTOCOL:
- new_protocol_process_local_mic(mic_buffer);
- break;
+ //
+ // send the samples in the buffer
+ //
+ for (i=0; i<framesPerBuffer; i++) {
+ sample=in[i];
+ switch(protocol) {
+ case ORIGINAL_PROTOCOL:
+ old_protocol_process_local_mic(sample);
+ break;
+ case NEW_PROTOCOL:
+ new_protocol_process_local_mic(sample);
+ break;
#ifdef SOAPYSDR
- case SOAPYSDR_PROTOCOL:
- soapy_protocol_process_local_mic(mic_buffer);
- break;
+ case SOAPYSDR_PROTOCOL:
+ soapy_protocol_process_local_mic(sample);
+ break;
#endif
- default:
- break;
+ default:
+ break;
+ }
+ }
}
return paContinue;
}
{
PaError err;
PaStreamParameters outputParameters;
- long framesPerBuffer=(long) audio_buffer_size;
+ long framesPerBuffer=BUFFER_SIZE;
int padev;
int i;
// Do not use call-back function, just stream it
- rx->local_audio_buffer=malloc(audio_buffer_size*sizeof(float));
+ rx->local_audio_buffer=malloc(BUFFER_SIZE*sizeof(float));
rx->local_audio_buffer_offset=0;
err = Pa_OpenStream(&(rx->playback_handle), NULL, &outputParameters, 48000.0, framesPerBuffer, paNoFlag, NULL, NULL);
if (err != paNoError) {
}
// Write one buffer to avoid under-flow errors
// (this gives us 5 msec to pass before we have to call audio_write the first time)
- bzero(rx->local_audio_buffer, (size_t) audio_buffer_size*sizeof(float));
- err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) audio_buffer_size);
+ bzero(rx->local_audio_buffer, (size_t) BUFFER_SIZE*sizeof(float));
+ err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
return 0;
}
}
record_handle=NULL;
}
- if(mic_buffer!=NULL) {
- free(mic_buffer);
- mic_buffer=NULL;
- }
}
//
if (rx->playback_handle != NULL && rx->local_audio_buffer != NULL) {
buffer[rx->local_audio_buffer_offset++] = (left+right)*0.5; // mix to MONO
- if (rx->local_audio_buffer_offset == audio_buffer_size) {
- err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) audio_buffer_size);
+ if (rx->local_audio_buffer_offset == BUFFER_SIZE) {
+ err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
rx->local_audio_buffer_offset=0;
// do not check on errors, there will be underflows every now and then
}
if (rx->playback_handle != NULL && rx->local_audio_buffer != NULL) {
buffer[rx->local_audio_buffer_offset++] = sample;
- if (rx->local_audio_buffer_offset == audio_buffer_size) {
- err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) audio_buffer_size);
+ if (rx->local_audio_buffer_offset == BUFFER_SIZE) {
+ err=Pa_WriteStream(rx->playback_handle, rx->local_audio_buffer, (unsigned long) BUFFER_SIZE);
// do not check on errors, there will be underflows every now and then
rx->local_audio_buffer_offset=0;
}