aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/sender.c
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2017-01-13 07:31:15 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2017-02-18 21:00:59 +0100
commit19b396ab4dc1065cd1334b713a817299df57d208 (patch)
tree63ce47a32bb509e1c258518d1f3d24e63a874352 /src/common/sender.c
parent2d8d7e62c1fc902a8495610f335c6e65cc1003d4 (diff)
Wave recording and playback now uses multi channels
Diffstat (limited to 'src/common/sender.c')
-rw-r--r--src/common/sender.c64
1 files changed, 34 insertions, 30 deletions
diff --git a/src/common/sender.c b/src/common/sender.c
index f610dbc..d636974 100644
--- a/src/common/sender.c
+++ b/src/common/sender.c
@@ -50,6 +50,9 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf
sender->loopback = loopback;
sender->loss_volume = loss_volume;
sender->paging_signal = paging_signal;
+ sender->write_rx_wave = write_rx_wave;
+ sender->write_tx_wave = write_tx_wave;
+ sender->read_rx_wave = read_rx_wave;
PDEBUG_CHAN(DSENDER, DEBUG_DEBUG, "Creating 'Sender' instance\n");
@@ -118,28 +121,6 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf
goto error;
}
- if (write_rx_wave) {
- rc = wave_create_record(&sender->wave_rx_rec, write_rx_wave, samplerate);
- if (rc < 0) {
- PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE recoding instance!\n");
- goto error;
- }
- }
- if (write_tx_wave) {
- rc = wave_create_record(&sender->wave_tx_rec, write_tx_wave, samplerate);
- if (rc < 0) {
- PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE recoding instance!\n");
- goto error;
- }
- }
- if (read_rx_wave) {
- rc = wave_create_playback(&sender->wave_rx_play, read_rx_wave, samplerate);
- if (rc < 0) {
- PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE playback instance!\n");
- goto error;
- }
- }
-
rc = init_emphasis(&sender->estate, samplerate, CUT_OFF_EMPHASIS_DEFAULT);
if (rc < 0)
goto error;
@@ -162,6 +143,7 @@ int sender_open_audio(void)
int channels;
double paging_frequency = 0.0;
int i;
+ int rc;
for (master = sender_head; master; master = master->next) {
/* skip audio slaves */
@@ -184,6 +166,28 @@ int sender_open_audio(void)
paging_frequency = inst->ruffrequenz;
}
+ if (master->write_rx_wave) {
+ rc = wave_create_record(&master->wave_rx_rec, master->write_rx_wave, master->samplerate, channels);
+ if (rc < 0) {
+ PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE recoding instance!\n");
+ return rc;
+ }
+ }
+ if (master->write_tx_wave) {
+ rc = wave_create_record(&master->wave_tx_rec, master->write_tx_wave, master->samplerate, channels);
+ if (rc < 0) {
+ PDEBUG(DSENDER, DEBUG_ERROR, "Failed to create WAVE recoding instance!\n");
+ return rc;
+ }
+ }
+ if (master->read_rx_wave) {
+ rc = wave_create_playback(&master->wave_rx_play, master->read_rx_wave, master->samplerate, channels);
+ 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->bandwidth, master->sample_deviation);
if (!master->audio) {
@@ -278,12 +282,8 @@ cant_recover:
jitter_load(&inst->dejitter, samples[i], count);
else
sender_send(inst, samples[i], count);
- if (inst->wave_tx_rec.fp)
- wave_write(&inst->wave_tx_rec, samples[i], count);
/* internal loopback: loop back TX audio to RX */
if (inst->loopback == 1) {
- if (inst->wave_rx_rec.fp)
- wave_write(&inst->wave_rx_rec, samples[i], count);
display_wave(inst, samples[i], count);
sender_receive(inst, samples[i], count);
}
@@ -295,6 +295,9 @@ cant_recover:
on[i] = sender->paging_on;
}
+ if (sender->wave_tx_rec.fp)
+ wave_write(&sender->wave_tx_rec, samples, count);
+
rc = sender->audio_write(sender->audio, samples, count, paging_signal, on, num_chan);
if (rc < 0) {
PDEBUG(DSENDER, DEBUG_ERROR, "Failed to write TX data to audio device (rc = %d)\n", rc);
@@ -324,6 +327,11 @@ transmit_later:
return;
}
if (count) {
+ if (sender->wave_rx_rec.fp)
+ wave_write(&sender->wave_rx_rec, samples, count);
+ if (sender->wave_rx_play.fp)
+ wave_read(&sender->wave_rx_play, samples, count);
+
/* loop through all channels */
for (i = 0, inst = sender; inst; i++, inst = inst->slave) {
/* rx gain */
@@ -332,11 +340,7 @@ transmit_later:
/* do de emphasis from radio (then write_wave/wave_read), receive audio, process echo test */
if (inst->de_emphasis)
de_emphasis(&inst->estate, samples[i], count);
- if (inst->wave_rx_play.fp)
- wave_read(&inst->wave_rx_play, samples[i], count);
if (inst->loopback != 1) {
- if (inst->wave_rx_rec.fp)
- wave_write(&inst->wave_rx_rec, samples[i], count);
display_wave(inst, samples[i], count);
sender_receive(inst, samples[i], count);
}