aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2019-12-22 08:29:07 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2019-12-22 08:29:07 +0100
commit5dc05576db995b1b59dfe704af52978c40912cfd (patch)
tree8016fb6feb63f7bf5c5c8c2ba1ff7289bed6105c
parentb38bb16adc114bcebb0e7056ffd5a5c9c96036e6 (diff)
osmoradio: Play audio and record wave simultaniously
-rw-r--r--src/radio/radio.c25
-rw-r--r--src/radio/radio.h6
2 files changed, 12 insertions, 19 deletions
diff --git a/src/radio/radio.c b/src/radio/radio.c
index ad9e0e1..9f1a13d 100644
--- a/src/radio/radio.c
+++ b/src/radio/radio.c
@@ -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");
goto error;
}
- radio->rx_audio_mode = AUDIO_MODE_WAVEFILE;
- } else if (rx_audiodev) {
+ radio->rx_audio_mode |= AUDIO_MODE_WAVEFILE;
+ }
+ if (rx_audiodev) {
#ifdef HAVE_ALSA
/* open audio device */
radio->rx_audio_samplerate = 48000;
@@ -174,18 +175,12 @@ 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[1], radio->rx_audio_samplerate / 5);
- radio->rx_audio_mode = AUDIO_MODE_AUDIODEV;
+ radio->rx_audio_mode |= AUDIO_MODE_AUDIODEV;
#else
rc = -ENOTSUP;
PDEBUG(DRADIO, DEBUG_ERROR, "No sound card support compiled in!\n");
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
}
/* check if sample rate is too low */
@@ -385,7 +380,7 @@ void radio_exit(radio_t *radio)
wave_destroy_playback(&radio->wave_tx_play);
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);
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);
/* store received audio */
- switch (radio->rx_audio_mode) {
- case AUDIO_MODE_WAVEFILE:
+ if ((radio->rx_audio_mode & AUDIO_MODE_WAVEFILE))
wave_write(&radio->wave_rx_rec, samples, audio_num);
- break;
#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);
if (radio->rx_audio_channels == 2)
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
return 0;
}
- break;
+ }
#endif
- default:
+ if (!radio->rx_audio_mode) {
PDEBUG(DRADIO, DEBUG_ERROR, "Wrong audio mode, plese fix!\n");
return -EINVAL;
}
diff --git a/src/radio/radio.h b/src/radio/radio.h
index e2cce48..f0aeaf2 100644
--- a/src/radio/radio.h
+++ b/src/radio/radio.h
@@ -17,9 +17,9 @@ enum modulation {
enum audio_mode {
AUDIO_MODE_NONE = 0,
- AUDIO_MODE_WAVEFILE,
- AUDIO_MODE_AUDIODEV,
- AUDIO_MODE_TESTTONE,
+ AUDIO_MODE_WAVEFILE = 1,
+ AUDIO_MODE_AUDIODEV = 2,
+ AUDIO_MODE_TESTTONE = 4,
};
typedef struct radio {