osmoradio: Play audio and record wave simultaniously

This commit is contained in:
Andreas Eversberg 2019-12-22 08:29:07 +01:00
parent b38bb16adc
commit 5dc05576db
2 changed files with 12 additions and 19 deletions

View File

@ -156,8 +156,9 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
PDEBUG(DRADIO, DEBUG_ERROR, "Failed to create WAVE record instance!\n"); PDEBUG(DRADIO, DEBUG_ERROR, "Failed to create WAVE record instance!\n");
goto error; goto error;
} }
radio->rx_audio_mode = AUDIO_MODE_WAVEFILE; radio->rx_audio_mode |= AUDIO_MODE_WAVEFILE;
} else if (rx_audiodev) { }
if (rx_audiodev) {
#ifdef HAVE_ALSA #ifdef HAVE_ALSA
/* open audio device */ /* open audio device */
radio->rx_audio_samplerate = 48000; radio->rx_audio_samplerate = 48000;
@ -174,17 +175,11 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
} }
jitter_create(&radio->rx_dejitter[0], radio->rx_audio_samplerate / 5); jitter_create(&radio->rx_dejitter[0], radio->rx_audio_samplerate / 5);
jitter_create(&radio->rx_dejitter[1], radio->rx_audio_samplerate / 5); jitter_create(&radio->rx_dejitter[1], radio->rx_audio_samplerate / 5);
radio->rx_audio_mode = AUDIO_MODE_AUDIODEV; radio->rx_audio_mode |= AUDIO_MODE_AUDIODEV;
#else #else
rc = -ENOTSUP; rc = -ENOTSUP;
PDEBUG(DRADIO, DEBUG_ERROR, "No sound card support compiled in!\n"); PDEBUG(DRADIO, DEBUG_ERROR, "No sound card support compiled in!\n");
goto error; goto error;
#endif
#if 0
} else {
rc = -ENOTSUP;
PDEBUG(DRADIO, DEBUG_ERROR, "No RX audio sink is selected, try \"--audio-device default\"!\n");
goto error;
#endif #endif
} }
@ -385,7 +380,7 @@ void radio_exit(radio_t *radio)
wave_destroy_playback(&radio->wave_tx_play); wave_destroy_playback(&radio->wave_tx_play);
radio->tx_audio_mode = AUDIO_MODE_NONE; radio->tx_audio_mode = AUDIO_MODE_NONE;
} }
if (radio->rx_audio_mode == AUDIO_MODE_WAVEFILE) { if ((radio->rx_audio_mode & AUDIO_MODE_WAVEFILE)) {
wave_destroy_record(&radio->wave_rx_rec); wave_destroy_record(&radio->wave_rx_rec);
radio->rx_audio_mode = AUDIO_MODE_NONE; radio->rx_audio_mode = AUDIO_MODE_NONE;
} }
@ -723,12 +718,10 @@ int radio_rx(radio_t *radio, float *baseband, int signal_num)
display_wave(&radio->dispwav[1], samples[1], audio_num, 1.0); display_wave(&radio->dispwav[1], samples[1], audio_num, 1.0);
/* store received audio */ /* store received audio */
switch (radio->rx_audio_mode) { if ((radio->rx_audio_mode & AUDIO_MODE_WAVEFILE))
case AUDIO_MODE_WAVEFILE:
wave_write(&radio->wave_rx_rec, samples, audio_num); wave_write(&radio->wave_rx_rec, samples, audio_num);
break;
#ifdef HAVE_ALSA #ifdef HAVE_ALSA
case AUDIO_MODE_AUDIODEV: if ((radio->rx_audio_mode & AUDIO_MODE_AUDIODEV)) {
jitter_save(&radio->rx_dejitter[0], samples[0], audio_num); jitter_save(&radio->rx_dejitter[0], samples[0], audio_num);
if (radio->rx_audio_channels == 2) if (radio->rx_audio_channels == 2)
jitter_save(&radio->rx_dejitter[1], samples[1], audio_num); jitter_save(&radio->rx_dejitter[1], samples[1], audio_num);
@ -744,9 +737,9 @@ int radio_rx(radio_t *radio, float *baseband, int signal_num)
else else
return 0; return 0;
} }
break; }
#endif #endif
default: if (!radio->rx_audio_mode) {
PDEBUG(DRADIO, DEBUG_ERROR, "Wrong audio mode, plese fix!\n"); PDEBUG(DRADIO, DEBUG_ERROR, "Wrong audio mode, plese fix!\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -17,9 +17,9 @@ enum modulation {
enum audio_mode { enum audio_mode {
AUDIO_MODE_NONE = 0, AUDIO_MODE_NONE = 0,
AUDIO_MODE_WAVEFILE, AUDIO_MODE_WAVEFILE = 1,
AUDIO_MODE_AUDIODEV, AUDIO_MODE_AUDIODEV = 2,
AUDIO_MODE_TESTTONE, AUDIO_MODE_TESTTONE = 4,
}; };
typedef struct radio { typedef struct radio {