aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2017-07-09 19:17:37 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2017-07-15 07:38:16 +0200
commit538b4a42ec0925cbd764ab8733bc1639d4221107 (patch)
treec2f5c9e9401549fed13527fdc456e40a8e3cb0c9 /src/common
parentaa20d4e50e28b6d4fb1d00a2fef43e513514593b (diff)
Add wave file playback to replace TX audio
Diffstat (limited to 'src/common')
-rw-r--r--src/common/main.h1
-rw-r--r--src/common/main_common.c13
-rw-r--r--src/common/sender.c13
-rw-r--r--src/common/sender.h4
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);