diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2017-07-09 19:17:37 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2017-07-15 07:38:16 +0200 |
commit | 538b4a42ec0925cbd764ab8733bc1639d4221107 (patch) | |
tree | c2f5c9e9401549fed13527fdc456e40a8e3cb0c9 /src/common | |
parent | aa20d4e50e28b6d4fb1d00a2fef43e513514593b (diff) |
Add wave file playback to replace TX audio
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/main.h | 1 | ||||
-rw-r--r-- | src/common/main_common.c | 13 | ||||
-rw-r--r-- | src/common/sender.c | 13 | ||||
-rw-r--r-- | src/common/sender.h | 4 |
4 files changed, 27 insertions, 4 deletions
diff --git a/src/common/main.h b/src/common/main.h index 6f3f63d..3e78c34 100644 --- a/src/common/main.h +++ b/src/common/main.h @@ -19,6 +19,7 @@ extern int rt_prio; extern const char *write_rx_wave; extern const char *write_tx_wave; extern const char *read_rx_wave; +extern const char *read_tx_wave; void print_help(const char *arg0); void print_help_common(const char *arg0, const char *ext_usage); diff --git a/src/common/main_common.c b/src/common/main_common.c index 4bc20ee..20d384f 100644 --- a/src/common/main_common.c +++ b/src/common/main_common.c @@ -62,6 +62,7 @@ int rt_prio = 0; const char *write_rx_wave = NULL; const char *write_tx_wave = NULL; const char *read_rx_wave = NULL; +const char *read_tx_wave = NULL; int use_sdr = 0; int sdr_channel = 0; static const char *sdr_args = ""; @@ -135,6 +136,8 @@ void print_help_common(const char *arg0, const char *ext_usage) printf(" Write transmitted audio to given wave file.\n"); printf(" --read-rx-wave <file>\n"); printf(" Replace received audio by given wave file.\n"); + printf(" --read-tx-wave <file>\n"); + printf(" Replace transmitted audio by given wave file.\n"); #ifdef HAVE_SDR printf("\nSDR options:\n"); #ifdef HAVE_UHD @@ -185,8 +188,9 @@ void print_hotkeys_common(void) #define OPT_WRITE_RX_WAVE 1001 #define OPT_WRITE_TX_WAVE 1002 #define OPT_READ_RX_WAVE 1003 -#define OPT_CALL_SAMPLERATE 1004 -#define OPT_MNCC_NAME 1005 +#define OPT_READ_TX_WAVE 1004 +#define OPT_CALL_SAMPLERATE 1005 +#define OPT_MNCC_NAME 1006 #define OPT_SDR_UHD 1100 #define OPT_SDR_SOAPY 1101 @@ -222,6 +226,7 @@ static struct option long_options_common[] = { {"write-rx-wave", 1, 0, OPT_WRITE_RX_WAVE}, {"write-tx-wave", 1, 0, OPT_WRITE_TX_WAVE}, {"read-rx-wave", 1, 0, OPT_READ_RX_WAVE}, + {"read-tx-wave", 1, 0, OPT_READ_TX_WAVE}, {"sdr-uhd", 0, 0, OPT_SDR_UHD}, {"sdr-soapy", 0, 0, OPT_SDR_SOAPY}, {"sdr-channel", 1, 0, OPT_SDR_CHANNEL}, @@ -380,6 +385,10 @@ void opt_switch_common(int c, char *arg0, int *skip_args) read_rx_wave = strdup(optarg); *skip_args += 2; break; + case OPT_READ_TX_WAVE: + read_tx_wave = strdup(optarg); + *skip_args += 2; + break; case OPT_SDR_UHD: #ifdef HAVE_SDR use_sdr = 1; diff --git a/src/common/sender.c b/src/common/sender.c index 88e48c1..84b5dba 100644 --- a/src/common/sender.c +++ b/src/common/sender.c @@ -33,7 +33,7 @@ static sender_t **sender_tailp = &sender_head; int cant_recover = 0; /* Init transceiver instance and link to list of transceivers. */ -int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, int loopback, double loss_volume, enum paging_signal paging_signal) +int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, double loss_volume, enum paging_signal paging_signal) { sender_t *master, *slave; int rc = 0; @@ -52,6 +52,7 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf sender->write_rx_wave = write_rx_wave; sender->write_tx_wave = write_tx_wave; sender->read_rx_wave = read_rx_wave; + sender->read_tx_wave = read_tx_wave; /* no gain with SDR */ if (use_sdr) @@ -198,6 +199,13 @@ int sender_open_audio(void) return rc; } } + if (master->read_tx_wave) { + rc = wave_create_playback(&master->wave_tx_play, master->read_tx_wave, master->samplerate, channels, master->max_deviation); + if (rc < 0) { + PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE playback instance!\n"); + return rc; + } + } /* open device */ master->audio = master->audio_open(master->audiodev, tx_f, rx_f, channels, paging_frequency, master->samplerate, master->max_deviation, master->max_modulation); @@ -249,6 +257,7 @@ void sender_destroy(sender_t *sender) wave_destroy_record(&sender->wave_rx_rec); wave_destroy_record(&sender->wave_tx_rec); wave_destroy_playback(&sender->wave_rx_play); + wave_destroy_playback(&sender->wave_tx_play); jitter_destroy(&sender->dejitter); } @@ -330,6 +339,8 @@ cant_recover: if (sender->wave_tx_rec.fp) wave_write(&sender->wave_tx_rec, samples, count); + if (sender->wave_tx_play.fp) + wave_read(&sender->wave_tx_play, samples, count); rc = sender->audio_write(sender->audio, samples, count, paging_signal, on, num_chan); if (rc < 0) { diff --git a/src/common/sender.h b/src/common/sender.h index 0907daf..6871fd2 100644 --- a/src/common/sender.h +++ b/src/common/sender.h @@ -61,9 +61,11 @@ typedef struct sender { const char *write_rx_wave; /* file name pointers */ const char *write_tx_wave; const char *read_rx_wave; + const char *read_tx_wave; wave_rec_t wave_rx_rec; /* wave recording (from rx) */ wave_rec_t wave_tx_rec; /* wave recording (from tx) */ wave_play_t wave_rx_play; /* wave playback (as rx) */ + wave_play_t wave_tx_play; /* wave playback (as tx) */ /* audio buffer for audio to send to transmitter (also used as loopback buffer) */ jitter_t dejitter; @@ -88,7 +90,7 @@ typedef struct sender { extern sender_t *sender_head; extern int cant_recover; -int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, int loopback, double loss_volume, enum paging_signal paging_signal); +int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, double loss_volume, enum paging_signal paging_signal); void sender_destroy(sender_t *sender); void sender_set_fm(sender_t *sender, double max_deviation, double max_modulation, double dBm0_deviation, double max_display); int sender_open_audio(void); |