diff options
-rw-r--r-- | gr-vocoder/examples/CMakeLists.txt | 7 | ||||
-rw-r--r-- | gr-vocoder/examples/grfreedv.grc | 809 | ||||
-rw-r--r-- | gr-vocoder/examples/loopback-codec2.grc | 1773 | ||||
-rw-r--r-- | gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml | 12 | ||||
-rw-r--r-- | gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml | 12 | ||||
-rw-r--r-- | gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml | 22 | ||||
-rw-r--r-- | gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml | 25 | ||||
-rw-r--r-- | gr-vocoder/include/gnuradio/vocoder/codec2.h | 8 | ||||
-rw-r--r-- | gr-vocoder/include/gnuradio/vocoder/freedv_api.h | 11 | ||||
-rw-r--r-- | gr-vocoder/include/gnuradio/vocoder/freedv_rx_ss.h | 6 | ||||
-rw-r--r-- | gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h | 5 | ||||
-rw-r--r-- | gr-vocoder/lib/freedv_rx_ss_impl.cc | 31 | ||||
-rw-r--r-- | gr-vocoder/lib/freedv_rx_ss_impl.h | 10 | ||||
-rw-r--r-- | gr-vocoder/lib/freedv_tx_ss_impl.cc | 53 | ||||
-rw-r--r-- | gr-vocoder/lib/freedv_tx_ss_impl.h | 17 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_swig.i | 6 |
16 files changed, 970 insertions, 1837 deletions
diff --git a/gr-vocoder/examples/CMakeLists.txt b/gr-vocoder/examples/CMakeLists.txt index 20e250fe29..47ba927444 100644 --- a/gr-vocoder/examples/CMakeLists.txt +++ b/gr-vocoder/examples/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2011,2016 Free Software Foundation, Inc. +# Copyright 2011,2016,2019 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -36,7 +36,12 @@ if(LIBCODEC2_FOUND) GR_PYTHON_INSTALL( PROGRAMS codec2_audio_loopback.py + DESTINATION ${GR_PKG_VOCODER_EXAMPLES_DIR} + ) + install( + FILES grfreedv.grc + loopback-codec2.grc DESTINATION ${GR_PKG_VOCODER_EXAMPLES_DIR} ) endif(LIBCODEC2_FOUND) diff --git a/gr-vocoder/examples/grfreedv.grc b/gr-vocoder/examples/grfreedv.grc index 9f6b95d5bd..dc8594eee9 100644 --- a/gr-vocoder/examples/grfreedv.grc +++ b/gr-vocoder/examples/grfreedv.grc @@ -1,616 +1,193 @@ -<?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.9'?> -<flow_graph> - <timestamp>Wed Jun 29 19:22:27 2016</timestamp> - <block> - <key>options</key> - <param> - <key>author</key> - <value>A. MAitland Bottoms</value> - </param> - <param> - <key>window_size</key> - <value></value> - </param> - <param> - <key>category</key> - <value>Custom</value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>description</key> - <value>A FreeDV Modulator</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>_coordinate</key> - <value>(8, 8)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>generate_options</key> - <value>qt_gui</value> - </param> - <param> - <key>hier_block_src_path</key> - <value>.:</value> - </param> - <param> - <key>id</key> - <value>grfreedv</value> - </param> - <param> - <key>max_nouts</key> - <value>0</value> - </param> - <param> - <key>qt_qss_theme</key> - <value></value> - </param> - <param> - <key>realtime_scheduling</key> - <value></value> - </param> - <param> - <key>run_command</key> - <value>{python} -u {filename}</value> - </param> - <param> - <key>run_options</key> - <value>prompt</value> - </param> - <param> - <key>run</key> - <value>True</value> - </param> - <param> - <key>thread_safe_setters</key> - <value></value> - </param> - <param> - <key>title</key> - <value>GNU Radio FreeDV</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>_coordinate</key> - <value>(8, 160)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>samp_rate</value> - </param> - <param> - <key>value</key> - <value>8000</value> - </param> - </block> - <block> - <key>variable_qtgui_range</key> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>value</key> - <value>-120</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>_coordinate</key> - <value>(232, 16)</value> - </param> - <param> - <key>gui_hint</key> - <value></value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>squelch</value> - </param> - <param> - <key>label</key> - <value>squelch slider</value> - </param> - <param> - <key>min_len</key> - <value>256</value> - </param> - <param> - <key>orient</key> - <value>Qt.Horizontal</value> - </param> - <param> - <key>start</key> - <value>-127</value> - </param> - <param> - <key>step</key> - <value>1</value> - </param> - <param> - <key>stop</key> - <value>128</value> - </param> - <param> - <key>rangeType</key> - <value>float</value> - </param> - <param> - <key>widget</key> - <value>counter_slider</value> - </param> - </block> - <block> - <key>audio_sink</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>device_name</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>_coordinate</key> - <value>(920, 228)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>audio_sink_0</value> - </param> - <param> - <key>num_inputs</key> - <value>1</value> - </param> - <param> - <key>ok_to_block</key> - <value>True</value> - </param> - <param> - <key>samp_rate</key> - <value>samp_rate</value> - </param> - </block> - <block> - <key>audio_source</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>device_name</key> - <value>hw:2,0</value> - </param> - <param> - <key>_enabled</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(16, 325)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>audio_source_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>num_outputs</key> - <value>1</value> - </param> - <param> - <key>ok_to_block</key> - <value>True</value> - </param> - <param> - <key>samp_rate</key> - <value>48000</value> - </param> - </block> - <block> - <key>blocks_float_to_short</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(256, 228)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>blocks_float_to_short_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>scale</key> - <value>32768</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - </block> - <block> - <key>blocks_short_to_float</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(736, 228)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>blocks_short_to_float_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>scale</key> - <value>32768</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - </block> - <block> - <key>blocks_wavfile_source</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>file</key> - <value>/usr/share/codec2/wav/all.wav</value> - </param> - <param> - <key>_coordinate</key> - <value>(24, 221)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>blocks_wavfile_source_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>nchan</key> - <value>1</value> - </param> - <param> - <key>repeat</key> - <value>True</value> - </param> - </block> - <block> - <key>rational_resampler_xxx</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>decim</key> - <value>6</value> - </param> - <param> - <key>_enabled</key> - <value>0</value> - </param> - <param> - <key>fbw</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(216, 303)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>rational_resampler_xxx_0</value> - </param> - <param> - <key>interp</key> - <value>1</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>taps</key> - <value></value> - </param> - <param> - <key>type</key> - <value>fff</value> - </param> - </block> - <block> - <key>vocoder_freedv_rx_ss</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(576, 325)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>vocoder_freedv_rx_ss_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>mode</key> - <value>freedv_api.MODE_1600</value> - </param> - <param> - <key>squelch_thresh</key> - <value>squelch</value> - </param> - </block> - <block> - <key>vocoder_freedv_tx_ss</key> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>comment</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(424, 221)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - <param> - <key>id</key> - <value>vocoder_freedv_tx_ss_0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>mode</key> - <value>freedv_api.MODE_1600</value> - </param> - <param> - <key>txt_msg</key> - <value>'GNU Radio'</value> - </param> - </block> - <connection> - <source_block_id>audio_source_0</source_block_id> - <sink_block_id>rational_resampler_xxx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_float_to_short_0</source_block_id> - <sink_block_id>vocoder_freedv_tx_ss_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_short_to_float_0</source_block_id> - <sink_block_id>audio_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_wavfile_source_0</source_block_id> - <sink_block_id>blocks_float_to_short_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>rational_resampler_xxx_0</source_block_id> - <sink_block_id>blocks_float_to_short_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>vocoder_freedv_rx_ss_0</source_block_id> - <sink_block_id>blocks_short_to_float_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>vocoder_freedv_tx_ss_0</source_block_id> - <sink_block_id>vocoder_freedv_rx_ss_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> -</flow_graph> +options: + parameters: + author: A. Maitland Bottoms + category: Custom + cmake_opt: '' + comment: '' + copyright: '2016,2019 Free Software Foundation, Inc.' + description: A FreeDV Modulator + gen_cmake: 'On' + gen_linking: dynamic + generate_options: qt_gui + hier_block_src_path: '.:' + id: grfreedv + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: prompt + sizing_mode: fixed + thread_safe_setters: '' + title: GNU Radio FreeDV + window_size: '' + states: + coordinate: [8, 8] + rotation: 0 + state: enabled + +blocks: +- name: samp_rate + id: variable + parameters: + comment: '' + value: '8000' + states: + coordinate: [8, 160] + rotation: 0 + state: enabled +- name: squelch + id: variable_qtgui_range + parameters: + comment: '' + gui_hint: '' + label: squelch slider + min_len: '256' + orient: Qt.Horizontal + rangeType: float + start: '-127' + step: '1' + stop: '128' + value: '-120' + widget: counter_slider + states: + coordinate: [232, 16] + rotation: 0 + state: enabled +- name: audio_sink_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + num_inputs: '1' + ok_to_block: 'True' + samp_rate: samp_rate + states: + coordinate: [792, 316.0] + rotation: 0 + state: enabled +- name: audio_source_0 + id: audio_source + parameters: + affinity: '' + alias: '' + comment: '' + device_name: hw:2,0 + maxoutbuf: '0' + minoutbuf: '0' + num_outputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + coordinate: [16, 325] + rotation: 0 + state: disabled +- name: blocks_float_to_short_0 + id: blocks_float_to_short + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + scale: '32768' + vlen: '1' + states: + coordinate: [256, 228] + rotation: 0 + state: enabled +- name: blocks_short_to_float_0 + id: blocks_short_to_float + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + scale: '32768' + vlen: '1' + states: + coordinate: [736, 228] + rotation: 0 + state: enabled +- name: blocks_wavfile_source_0 + id: blocks_wavfile_source + parameters: + affinity: '' + alias: '' + comment: '' + file: /usr/share/codec2/wav/all.wav + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + repeat: 'True' + states: + coordinate: [24, 221] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_0 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '6' + fbw: '0' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + taps: '' + type: fff + states: + coordinate: [216, 303] + rotation: 0 + state: disabled +- name: vocoder_freedv_rx_ss_0 + id: vocoder_freedv_rx_ss + parameters: + affinity: '' + alias: '' + comment: '' + interleave_frames: '1' + maxoutbuf: '0' + minoutbuf: '0' + mode: freedv_api.MODE_1600 + squelch_enable: 'True' + squelch_thresh: squelch + states: + coordinate: [568, 92.0] + rotation: 0 + state: enabled +- name: vocoder_freedv_tx_ss_0 + id: vocoder_freedv_tx_ss + parameters: + affinity: '' + alias: '' + clip_val: 'False' + comment: '' + interleave_frames: '1' + maxoutbuf: '0' + minoutbuf: '0' + mode: freedv_api.MODE_1600 + tx_bpf_val: 'True' + txt_msg: '''GNU Radio''' + states: + coordinate: [360, 84.0] + rotation: 0 + state: enabled + +connections: +- [audio_source_0, '0', rational_resampler_xxx_0, '0'] +- [blocks_float_to_short_0, '0', vocoder_freedv_tx_ss_0, '0'] +- [blocks_short_to_float_0, '0', audio_sink_0, '0'] +- [blocks_wavfile_source_0, '0', blocks_float_to_short_0, '0'] +- [rational_resampler_xxx_0, '0', blocks_float_to_short_0, '0'] +- [vocoder_freedv_rx_ss_0, '0', blocks_short_to_float_0, '0'] +- [vocoder_freedv_tx_ss_0, '0', vocoder_freedv_rx_ss_0, '0'] + +metadata: + file_format: 1 diff --git a/gr-vocoder/examples/loopback-codec2.grc b/gr-vocoder/examples/loopback-codec2.grc index 4d22c8fc74..742fb4cefe 100644 --- a/gr-vocoder/examples/loopback-codec2.grc +++ b/gr-vocoder/examples/loopback-codec2.grc @@ -1,1184 +1,589 @@ -<?xml version='1.0' encoding='ASCII'?> -<flow_graph> - <timestamp>Fri Mar 7 18:08:43 2014</timestamp> - <block> - <key>options</key> - <param> - <key>id</key> - <value>loopback_codec2</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>title</key> - <value>Codec2 Looback Test</value> - </param> - <param> - <key>author</key> - <value>Martin Braun</value> - </param> - <param> - <key>description</key> - <value>An example how to use the Codec2 Vocoder</value> - </param> - <param> - <key>window_size</key> - <value>1280, 1024</value> - </param> - <param> - <key>generate_options</key> - <value>qt_gui</value> - </param> - <param> - <key>category</key> - <value>Custom</value> - </param> - <param> - <key>run_options</key> - <value>prompt</value> - </param> - <param> - <key>run</key> - <value>True</value> - </param> - <param> - <key>max_nouts</key> - <value>0</value> - </param> - <param> - <key>realtime_scheduling</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(0, -1)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>scale</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>2**13</value> - </param> - <param> - <key>_coordinate</key> - <value>(301, -1)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>samp_rate</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>48000</value> - </param> - <param> - <key>_coordinate</key> - <value>(186, 0)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_float_to_short</key> - <param> - <key>id</key> - <value>blocks_float_to_short_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>scale</key> - <value>scale</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(417, 119)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>qtgui_time_sink_x</key> - <param> - <key>id</key> - <value>qtgui_time_sink_x_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>name</key> - <value>Audio Pre-Encoding</value> - </param> - <param> - <key>size</key> - <value>1024</value> - </param> - <param> - <key>srate</key> - <value>8000</value> - </param> - <param> - <key>ymin</key> - <value>-1</value> - </param> - <param> - <key>ymax</key> - <value>1</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>tr_mode</key> - <value>qtgui.TRIG_MODE_FREE</value> - </param> - <param> - <key>tr_slope</key> - <value>qtgui.TRIG_SLOPE_POS</value> - </param> - <param> - <key>tr_level</key> - <value>0.0</value> - </param> - <param> - <key>tr_delay</key> - <value>0</value> - </param> - <param> - <key>tr_chan</key> - <value>0</value> - </param> - <param> - <key>tr_tag</key> - <value>""</value> - </param> - <param> - <key>entags</key> - <value>True</value> - </param> - <param> - <key>gui_hint</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(434, 202)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>rational_resampler_xxx</key> - <param> - <key>id</key> - <value>rational_resampler_xxx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>fff</value> - </param> - <param> - <key>interp</key> - <value>1</value> - </param> - <param> - <key>decim</key> - <value>6</value> - </param> - <param> - <key>taps</key> - <value></value> - </param> - <param> - <key>fbw</key> - <value>0</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(204, 94)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_source</key> - <param> - <key>id</key> - <value>virtual_source_1_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Decoded Speech</value> - </param> - <param> - <key>_coordinate</key> - <value>(3, 449)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable_qtgui_check_box</key> - <param> - <key>id</key> - <value>play_encoded</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>label</key> - <value>Encode Audio</value> - </param> - <param> - <key>type</key> - <value>int</value> - </param> - <param> - <key>value</key> - <value>True</value> - </param> - <param> - <key>true</key> - <value>1</value> - </param> - <param> - <key>false</key> - <value>0</value> - </param> - <param> - <key>gui_hint</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(834, 0)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blks2_selector</key> - <param> - <key>id</key> - <value>blks2_selector_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>num_outputs</key> - <value>1</value> - </param> - <param> - <key>input_index</key> - <value>play_encoded</value> - </param> - <param> - <key>output_index</key> - <value>0</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(280, 411)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>rational_resampler_xxx</key> - <param> - <key>id</key> - <value>rational_resampler_xxx_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>fff</value> - </param> - <param> - <key>interp</key> - <value>6</value> - </param> - <param> - <key>decim</key> - <value>1</value> - </param> - <param> - <key>taps</key> - <value></value> - </param> - <param> - <key>fbw</key> - <value>0</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(478, 400)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>audio_sink</key> - <param> - <key>id</key> - <value>audio_sink_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>samp_rate</key> - <value>48000</value> - </param> - <param> - <key>device_name</key> - <value></value> - </param> - <param> - <key>ok_to_block</key> - <value>True</value> - </param> - <param> - <key>num_inputs</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(706, 424)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>vocoder_codec2_encode_sp</key> - <param> - <key>id</key> - <value>vocoder_codec2_encode_sp_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(590, 123)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_vector_to_stream</key> - <param> - <key>id</key> - <value>blocks_vector_to_stream_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>num_items</key> - <value>50</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(822, 119)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_source</key> - <param> - <key>id</key> - <value>virtual_source_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Encoded Speech</value> - </param> - <param> - <key>_coordinate</key> - <value>(0, 298)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_stream_to_vector</key> - <param> - <key>id</key> - <value>blocks_stream_to_vector_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>num_items</key> - <value>50</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(444, 298)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>vocoder_codec2_decode_ps</key> - <param> - <key>id</key> - <value>vocoder_codec2_decode_ps_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(641, 302)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_short_to_float</key> - <param> - <key>id</key> - <value>blocks_short_to_float_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>scale</key> - <value>scale</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(735, 361)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_sink</key> - <param> - <key>id</key> - <value>virtual_sink_2</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Decoded Speech</value> - </param> - <param> - <key>_coordinate</key> - <value>(960, 393)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>qtgui_time_sink_x</key> - <param> - <key>id</key> - <value>qtgui_time_sink_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>name</key> - <value>Audio Post-Encoding</value> - </param> - <param> - <key>size</key> - <value>1024</value> - </param> - <param> - <key>srate</key> - <value>8000</value> - </param> - <param> - <key>ymin</key> - <value>-1</value> - </param> - <param> - <key>ymax</key> - <value>1</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>tr_mode</key> - <value>qtgui.TRIG_MODE_FREE</value> - </param> - <param> - <key>tr_slope</key> - <value>qtgui.TRIG_SLOPE_POS</value> - </param> - <param> - <key>tr_level</key> - <value>0.0</value> - </param> - <param> - <key>tr_delay</key> - <value>0</value> - </param> - <param> - <key>tr_chan</key> - <value>0</value> - </param> - <param> - <key>tr_tag</key> - <value>""</value> - </param> - <param> - <key>entags</key> - <value>True</value> - </param> - <param> - <key>gui_hint</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(960, 283)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>audio_source</key> - <param> - <key>id</key> - <value>audio_source_0</value> - </param> - <param> - <key>_enabled</key> - <value>False</value> - </param> - <param> - <key>samp_rate</key> - <value>48000</value> - </param> - <param> - <key>device_name</key> - <value></value> - </param> - <param> - <key>ok_to_block</key> - <value>True</value> - </param> - <param> - <key>num_outputs</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(0, 117)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_wavfile_source</key> - <param> - <key>id</key> - <value>blocks_wavfile_source_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>file</key> - <value>/home/mbr0wn/12345.wav</value> - </param> - <param> - <key>repeat</key> - <value>True</value> - </param> - <param> - <key>nchan</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(-1, 225)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_packed_to_unpacked_xx</key> - <param> - <key>id</key> - <value>blocks_packed_to_unpacked_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>bits_per_chunk</key> - <value>1</value> - </param> - <param> - <key>endianness</key> - <value>gr.GR_LSB_FIRST</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(229, 290)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_sink</key> - <param> - <key>id</key> - <value>virtual_sink_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Encoded Speech</value> - </param> - <param> - <key>_coordinate</key> - <value>(908, 207)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_unpacked_to_packed_xx</key> - <param> - <key>id</key> - <value>blocks_unpacked_to_packed_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>bits_per_chunk</key> - <value>1</value> - </param> - <param> - <key>endianness</key> - <value>gr.GR_LSB_FIRST</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(694, 199)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_sink</key> - <param> - <key>id</key> - <value>virtual_sink_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Raw Audio</value> - </param> - <param> - <key>_coordinate</key> - <value>(508, 25)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>virtual_source</key> - <param> - <key>id</key> - <value>virtual_source_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>Raw Audio</value> - </param> - <param> - <key>_coordinate</key> - <value>(-1, 389)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <connection> - <source_block_id>audio_source_0</source_block_id> - <sink_block_id>rational_resampler_xxx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>rational_resampler_xxx_0</source_block_id> - <sink_block_id>blocks_float_to_short_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_float_to_short_0</source_block_id> - <sink_block_id>vocoder_codec2_encode_sp_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_wavfile_source_0</source_block_id> - <sink_block_id>rational_resampler_xxx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>rational_resampler_xxx_0</source_block_id> - <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>rational_resampler_xxx_0</source_block_id> - <sink_block_id>virtual_sink_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>virtual_source_1</source_block_id> - <sink_block_id>blks2_selector_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>virtual_source_1_0</source_block_id> - <sink_block_id>blks2_selector_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>rational_resampler_xxx_1</source_block_id> - <sink_block_id>audio_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blks2_selector_0</source_block_id> - <sink_block_id>rational_resampler_xxx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>vocoder_codec2_encode_sp_0</source_block_id> - <sink_block_id>blocks_vector_to_stream_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_vector_to_stream_0</source_block_id> - <sink_block_id>blocks_unpacked_to_packed_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_unpacked_to_packed_xx_0</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_short_to_float_0</source_block_id> - <sink_block_id>virtual_sink_2</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_short_to_float_0</source_block_id> - <sink_block_id>qtgui_time_sink_x_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>vocoder_codec2_decode_ps_0</source_block_id> - <sink_block_id>blocks_short_to_float_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_stream_to_vector_0</source_block_id> - <sink_block_id>vocoder_codec2_decode_ps_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id> - <sink_block_id>blocks_stream_to_vector_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> -</flow_graph> +options: + parameters: + author: Martin Braun + category: Custom + cmake_opt: '' + comment: '' + copyright: '2014,2019 Free Software Foundation, Inc.' + description: An example how to use the Codec2 Vocoder + gen_cmake: 'On' + gen_linking: dynamic + generate_options: qt_gui + hier_block_src_path: '.:' + id: loopback_codec2 + max_nouts: '0' + output_language: python + placement: (0,0) + qt_qss_theme: '' + realtime_scheduling: '' + run: 'True' + run_command: '{python} -u {filename}' + run_options: prompt + sizing_mode: fixed + thread_safe_setters: '' + title: Codec2 Looback Test + window_size: 1280, 1024 + states: + coordinate: [0, -1] + rotation: 0 + state: enabled + +blocks: +- name: play_encoded + id: variable_qtgui_check_box + parameters: + comment: '' + 'false': '0' + gui_hint: '' + label: Encode Audio + 'true': '1' + type: int + value: 'True' + states: + coordinate: [688, 12.0] + rotation: 0 + state: enabled +- name: samp_rate + id: variable + parameters: + comment: '' + value: '48000' + states: + coordinate: [186, 0] + rotation: 0 + state: enabled +- name: scale + id: variable + parameters: + comment: '' + value: 2**13 + states: + coordinate: [301, -1] + rotation: 0 + state: enabled +- name: audio_sink_0 + id: audio_sink + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + num_inputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + coordinate: [784, 420.0] + rotation: 0 + state: enabled +- name: audio_source_0 + id: audio_source + parameters: + affinity: '' + alias: '' + comment: '' + device_name: '' + maxoutbuf: '0' + minoutbuf: '0' + num_outputs: '1' + ok_to_block: 'True' + samp_rate: '48000' + states: + coordinate: [0, 116.0] + rotation: 0 + state: enabled +- name: blocks_add_xx_0 + id: blocks_add_xx + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '' + minoutbuf: '' + num_inputs: '2' + type: float + vlen: '1' + states: + coordinate: [480, 408.0] + rotation: 0 + state: true +- name: blocks_float_to_short_0 + id: blocks_float_to_short + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + scale: scale + vlen: '1' + states: + coordinate: [416, 116.0] + rotation: 0 + state: enabled +- name: blocks_multiply_const_vxx_0 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: 0.0 if play_encoded else 1.0 + maxoutbuf: '' + minoutbuf: '' + type: float + vlen: '1' + states: + coordinate: [224, 388.0] + rotation: 0 + state: true +- name: blocks_multiply_const_vxx_1 + id: blocks_multiply_const_vxx + parameters: + affinity: '' + alias: '' + comment: '' + const: 1.0 if play_encoded else 0.0 + maxoutbuf: '' + minoutbuf: '' + type: float + vlen: '1' + states: + coordinate: [224, 452.0] + rotation: 0 + state: true +- name: blocks_packed_to_unpacked_xx_0 + id: blocks_packed_to_unpacked_xx + parameters: + affinity: '' + alias: '' + bits_per_chunk: '1' + comment: '' + endianness: gr.GR_LSB_FIRST + maxoutbuf: '0' + minoutbuf: '0' + num_ports: '1' + type: byte + states: + coordinate: [224, 284.0] + rotation: 0 + state: enabled +- name: blocks_short_to_float_0 + id: blocks_short_to_float + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + scale: scale + vlen: '1' + states: + coordinate: [735, 361] + rotation: 0 + state: enabled +- name: blocks_stream_to_vector_0 + id: blocks_stream_to_vector + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + num_items: '48' + type: byte + vlen: '1' + states: + coordinate: [432, 296.0] + rotation: 0 + state: enabled +- name: blocks_unpacked_to_packed_xx_0 + id: blocks_unpacked_to_packed_xx + parameters: + affinity: '' + alias: '' + bits_per_chunk: '1' + comment: '' + endianness: gr.GR_LSB_FIRST + maxoutbuf: '0' + minoutbuf: '0' + num_ports: '1' + type: byte + states: + coordinate: [694, 199] + rotation: 0 + state: enabled +- name: blocks_vector_to_stream_0 + id: blocks_vector_to_stream + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + num_items: '48' + type: byte + vlen: '1' + states: + coordinate: [824, 120.0] + rotation: 0 + state: enabled +- name: blocks_wavfile_source_0 + id: blocks_wavfile_source + parameters: + affinity: '' + alias: '' + comment: '' + file: /home/mbr0wn/12345.wav + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + repeat: 'True' + states: + coordinate: [-1, 225] + rotation: 0 + state: disabled +- name: qtgui_time_sink_x_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: '"blue"' + color10: '"blue"' + color2: '"red"' + color3: '"green"' + color4: '"black"' + color5: '"cyan"' + color6: '"magenta"' + color7: '"yellow"' + color8: '"dark red"' + color9: '"dark green"' + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: '' + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: Audio Post-Encoding + nconnections: '1' + size: '1024' + srate: '8000' + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + coordinate: [960, 283] + rotation: 0 + state: enabled +- name: qtgui_time_sink_x_0_0 + id: qtgui_time_sink_x + parameters: + affinity: '' + alias: '' + alpha1: '1.0' + alpha10: '1.0' + alpha2: '1.0' + alpha3: '1.0' + alpha4: '1.0' + alpha5: '1.0' + alpha6: '1.0' + alpha7: '1.0' + alpha8: '1.0' + alpha9: '1.0' + autoscale: 'False' + axislabels: 'True' + color1: '"blue"' + color10: '"blue"' + color2: '"red"' + color3: '"green"' + color4: '"black"' + color5: '"cyan"' + color6: '"magenta"' + color7: '"yellow"' + color8: '"dark red"' + color9: '"dark green"' + comment: '' + ctrlpanel: 'False' + entags: 'True' + grid: 'False' + gui_hint: '' + label1: '' + label10: '' + label2: '' + label3: '' + label4: '' + label5: '' + label6: '' + label7: '' + label8: '' + label9: '' + legend: 'True' + marker1: '-1' + marker10: '-1' + marker2: '-1' + marker3: '-1' + marker4: '-1' + marker5: '-1' + marker6: '-1' + marker7: '-1' + marker8: '-1' + marker9: '-1' + name: Audio Pre-Encoding + nconnections: '1' + size: '1024' + srate: '8000' + stemplot: 'False' + style1: '1' + style10: '1' + style2: '1' + style3: '1' + style4: '1' + style5: '1' + style6: '1' + style7: '1' + style8: '1' + style9: '1' + tr_chan: '0' + tr_delay: '0' + tr_level: '0.0' + tr_mode: qtgui.TRIG_MODE_FREE + tr_slope: qtgui.TRIG_SLOPE_POS + tr_tag: '""' + type: float + update_time: '0.10' + width1: '1' + width10: '1' + width2: '1' + width3: '1' + width4: '1' + width5: '1' + width6: '1' + width7: '1' + width8: '1' + width9: '1' + ylabel: Amplitude + ymax: '1' + ymin: '-1' + yunit: '""' + states: + coordinate: [434, 202] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_0 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '6' + fbw: '0.4' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + taps: '' + type: fff + states: + coordinate: [208, 92.0] + rotation: 0 + state: enabled +- name: rational_resampler_xxx_1 + id: rational_resampler_xxx + parameters: + affinity: '' + alias: '' + comment: '' + decim: '1' + fbw: '0.4' + interp: '6' + maxoutbuf: '0' + minoutbuf: '0' + taps: '' + type: fff + states: + coordinate: [568, 396.0] + rotation: 0 + state: enabled +- name: virtual_sink_0 + id: virtual_sink + parameters: + affinity: '' + alias: '' + comment: '' + stream_id: Encoded Speech + states: + coordinate: [908, 207] + rotation: 0 + state: enabled +- name: virtual_sink_1 + id: virtual_sink + parameters: + affinity: '' + alias: '' + comment: '' + stream_id: Raw Audio + states: + coordinate: [508, 25] + rotation: 0 + state: enabled +- name: virtual_sink_2 + id: virtual_sink + parameters: + affinity: '' + alias: '' + comment: '' + stream_id: Decoded Speech + states: + coordinate: [960, 393] + rotation: 0 + state: enabled +- name: virtual_source_0 + id: virtual_source + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '' + minoutbuf: '' + stream_id: Encoded Speech + states: + coordinate: [0, 292.0] + rotation: 0 + state: enabled +- name: virtual_source_1 + id: virtual_source + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '' + minoutbuf: '' + stream_id: Raw Audio + states: + coordinate: [-1, 389] + rotation: 0 + state: enabled +- name: virtual_source_1_0 + id: virtual_source + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '' + minoutbuf: '' + stream_id: Decoded Speech + states: + coordinate: [3, 449] + rotation: 0 + state: enabled +- name: vocoder_codec2_decode_ps_0 + id: vocoder_codec2_decode_ps + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + mode: codec2.MODE_2400 + states: + coordinate: [608, 296.0] + rotation: 0 + state: enabled +- name: vocoder_codec2_encode_sp_0 + id: vocoder_codec2_encode_sp + parameters: + affinity: '' + alias: '' + comment: '' + maxoutbuf: '0' + minoutbuf: '0' + mode: codec2.MODE_2400 + states: + coordinate: [592, 116.0] + rotation: 0 + state: enabled + +connections: +- [audio_source_0, '0', rational_resampler_xxx_0, '0'] +- [blocks_add_xx_0, '0', rational_resampler_xxx_1, '0'] +- [blocks_float_to_short_0, '0', vocoder_codec2_encode_sp_0, '0'] +- [blocks_multiply_const_vxx_0, '0', blocks_add_xx_0, '0'] +- [blocks_multiply_const_vxx_1, '0', blocks_add_xx_0, '1'] +- [blocks_packed_to_unpacked_xx_0, '0', blocks_stream_to_vector_0, '0'] +- [blocks_short_to_float_0, '0', qtgui_time_sink_x_0, '0'] +- [blocks_short_to_float_0, '0', virtual_sink_2, '0'] +- [blocks_stream_to_vector_0, '0', vocoder_codec2_decode_ps_0, '0'] +- [blocks_unpacked_to_packed_xx_0, '0', virtual_sink_0, '0'] +- [blocks_vector_to_stream_0, '0', blocks_unpacked_to_packed_xx_0, '0'] +- [blocks_wavfile_source_0, '0', rational_resampler_xxx_0, '0'] +- [rational_resampler_xxx_0, '0', blocks_float_to_short_0, '0'] +- [rational_resampler_xxx_0, '0', qtgui_time_sink_x_0_0, '0'] +- [rational_resampler_xxx_0, '0', virtual_sink_1, '0'] +- [rational_resampler_xxx_1, '0', audio_sink_0, '0'] +- [virtual_source_0, '0', blocks_packed_to_unpacked_xx_0, '0'] +- [virtual_source_1, '0', blocks_multiply_const_vxx_0, '0'] +- [virtual_source_1_0, '0', blocks_multiply_const_vxx_1, '0'] +- [vocoder_codec2_decode_ps_0, '0', blocks_short_to_float_0, '0'] +- [vocoder_codec2_encode_sp_0, '0', blocks_vector_to_stream_0, '0'] + +metadata: + file_format: 1 diff --git a/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml b/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml index 0aec7ec4c1..1fc0e7dbad 100644 --- a/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml +++ b/gr-vocoder/grc/vocoder_codec2_decode_ps.block.yml @@ -7,15 +7,16 @@ parameters: dtype: int default: codec2.MODE_2400 options: [codec2.MODE_3200, codec2.MODE_2400, codec2.MODE_1600, codec2.MODE_1400, - codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B] + codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B, + codec2.MODE_700C, codec2.MODE_WB, codec2.MODE_450, codec2.MODE_450PWB] option_labels: [3200 bps, 2400 bps, 1600 bps, 1400 bps, 1300 bps, 1200 bps, 700 - bps, 700B bps] - hide: ${ 'part' if vlen == 1 else 'none' } + bps, 700B bps, 700C bps, Wideband, 450 bps, 450PWB bps] + hide: none inputs: - domain: stream dtype: byte - vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[mode] }' + vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28, 8: 28, 9: 64, 10: 18, 11: 18 }[mode] }' outputs: - domain: stream @@ -27,4 +28,7 @@ templates: from gnuradio.vocoder import codec2 make: vocoder.codec2_decode_ps(${mode}) +documentation: |- + Not all modes may be supported by the underlying codec2 library. + file_format: 1 diff --git a/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml b/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml index f03787341c..0357fa2ac7 100644 --- a/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml +++ b/gr-vocoder/grc/vocoder_codec2_encode_sp.block.yml @@ -7,10 +7,11 @@ parameters: dtype: int default: codec2.MODE_2400 options: [codec2.MODE_3200, codec2.MODE_2400, codec2.MODE_1600, codec2.MODE_1400, - codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B] + codec2.MODE_1300, codec2.MODE_1200, codec2.MODE_700, codec2.MODE_700B, + codec2.MODE_700C, codec2.MODE_WB, codec2.MODE_450, codec2.MODE_450PWB] option_labels: [3200 bps, 2400 bps, 1600 bps, 1400 bps, 1300 bps, 1200 bps, 700 - bps, 700B bps] - hide: ${ 'part' if vlen == 1 else 'none' } + bps, 700B bps, 700C bps, Wideband, 450 bps, 450PWB bps] + hide: none inputs: - domain: stream @@ -19,7 +20,7 @@ inputs: outputs: - domain: stream dtype: byte - vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[mode] }' + vlen: '${ { 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28, 8: 28, 9: 64, 10: 18, 11: 18 }[mode] }' templates: imports: |- @@ -27,4 +28,7 @@ templates: from gnuradio.vocoder import codec2 make: vocoder.codec2_encode_sp(${mode}) +documentation: |- + Not all modes may be supported by the underlying codec2 library. + file_format: 1 diff --git a/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml b/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml index 4b486d41cb..fd3392e13f 100644 --- a/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml +++ b/gr-vocoder/grc/vocoder_freedv_rx_ss.block.yml @@ -7,12 +7,20 @@ parameters: dtype: int default: freedv_api.MODE_1600 options: [freedv_api.MODE_1600, freedv_api.MODE_700, freedv_api.MODE_700B, freedv_api.MODE_2400A, - freedv_api.MODE_2400B, freedv_api.MODE_800XA] - option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA] + freedv_api.MODE_2400B, freedv_api.MODE_800XA, freedv_api.MODE_700C, freedv_api.MODE_700D] + option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA, 700C, 700D] - id: squelch_thresh label: Squelch Threshold dtype: float default: '-100.0' +- id: interleave_frames + label: Interleave Frames + dtype: int + default: '1' +- id: squelch_enable + label: Squelch Enable + dtype: bool + default: True inputs: - domain: stream @@ -26,8 +34,16 @@ templates: imports: |- from gnuradio import vocoder from gnuradio.vocoder import freedv_api - make: vocoder.freedv_rx_ss(${mode},${squelch_thresh}) + make: vocoder.freedv_rx_ss(${mode},${squelch_thresh},${interleave_frames}) callbacks: + - set_squelch_en(${squelch_enable}) - set_squelch_thresh(${squelch_thresh}) +documentation: |- + Not all modes may be supported by the underlying codec2 library. + interleave_frames is an integer between 1 and 32, and is only used in the 700D mode. + (must be set the same on both transmitter and receiver) + Squelch Enable defaults to On + Squelch Threshold - cutoff level for receiver + file_format: 1 diff --git a/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml b/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml index 6ae73dfbbb..1fb13ec106 100644 --- a/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml +++ b/gr-vocoder/grc/vocoder_freedv_tx_ss.block.yml @@ -7,12 +7,24 @@ parameters: dtype: int default: freedv_api.MODE_1600 options: [freedv_api.MODE_1600, freedv_api.MODE_700, freedv_api.MODE_700B, freedv_api.MODE_2400A, - freedv_api.MODE_2400B, freedv_api.MODE_800XA] - option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA] + freedv_api.MODE_2400B, freedv_api.MODE_800XA, freedv_api.MODE_700C, freedv_api.MODE_700D] + option_labels: ['1600', '700', 700B, 2400A, 2400B, 800XA, 700C, 700D] - id: txt_msg label: Text Message dtype: string default: '''GNU Radio''' +- id: interleave_frames + label: Interleave Frames + dtype: int + default: 1 +- id: clip_val + label: Clip + dtype: bool + default: False +- id: tx_bpf_val + label: Tx BPF + dtype: bool + default: True inputs: - domain: stream @@ -26,6 +38,13 @@ templates: imports: |- from gnuradio import vocoder from gnuradio.vocoder import freedv_api - make: vocoder.freedv_tx_ss(${mode},${txt_msg}) + make: vocoder.freedv_tx_ss(${mode},${txt_msg},${interleave_frames}) + +documentation: |- + Not all modes may be supported by the underlying codec2 library. + interleave_frames is an integer between 1 and 32, and is only used in the 700D mode. + (must be set the same on both transmitter and receiver) + Clip reduces the Peak/Average Power Ratio from 12dB to 8dB by clipping. + Tx BPF: enable a bandpass filter file_format: 1 diff --git a/gr-vocoder/include/gnuradio/vocoder/codec2.h b/gr-vocoder/include/gnuradio/vocoder/codec2.h index afa53d5ac0..cca0fc46be 100644 --- a/gr-vocoder/include/gnuradio/vocoder/codec2.h +++ b/gr-vocoder/include/gnuradio/vocoder/codec2.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2014,2016 Free Software Foundation, Inc. + * Copyright 2014,2016,2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -48,6 +48,12 @@ namespace gr { #ifdef CODEC2_MODE_700B MODE_700B = CODEC2_MODE_700B, #endif +#ifdef CODEC2_MODE_700C + MODE_700C = CODEC2_MODE_700C, +#endif +#ifdef CODEC2_MODE_WB + MODE_WB = CODEC2_MODE_WB, +#endif }; private: diff --git a/gr-vocoder/include/gnuradio/vocoder/freedv_api.h b/gr-vocoder/include/gnuradio/vocoder/freedv_api.h index 230da4e108..7838fb4a08 100644 --- a/gr-vocoder/include/gnuradio/vocoder/freedv_api.h +++ b/gr-vocoder/include/gnuradio/vocoder/freedv_api.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -56,6 +56,15 @@ namespace gr { #ifdef FREEDV_MODE_800XA MODE_800XA = FREEDV_MODE_800XA, #endif +#ifdef FREEDV_MODE_700C + MODE_700C = FREEDV_MODE_700C, +#endif +#ifdef FREEDV_MODE_700D + MODE_700D = FREEDV_MODE_700D, + SYNC_UNSYNC = FREEDV_SYNC_UNSYNC, + SYNC_AUTO = FREEDV_SYNC_AUTO, + SYNC_MANUAL = FREEDV_SYNC_MANUAL, +#endif }; private: diff --git a/gr-vocoder/include/gnuradio/vocoder/freedv_rx_ss.h b/gr-vocoder/include/gnuradio/vocoder/freedv_rx_ss.h index a6568dee7d..d1d1a55989 100644 --- a/gr-vocoder/include/gnuradio/vocoder/freedv_rx_ss.h +++ b/gr-vocoder/include/gnuradio/vocoder/freedv_rx_ss.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -50,11 +50,13 @@ namespace gr { * * \param mode Operating Mode designation * \param squelch_thresh FreeDV modem squelch threshold value + * \param interleave_frames FreeDV 700D mode number of frames to average error */ - static sptr make(int mode=freedv_api::MODE_1600, float squelch_thresh=-100.0); + static sptr make(int mode=freedv_api::MODE_1600, float squelch_thresh=-100.0, int interleave_frames=1); virtual void set_squelch_thresh(float squelch_thresh) = 0; virtual float squelch_thresh() = 0; + virtual void set_squelch_en(bool squelch_enable) = 0; }; } /* namespace vocoder */ diff --git a/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h b/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h index 0e80d78bfb..21754c604a 100644 --- a/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h +++ b/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -49,8 +49,9 @@ namespace gr { * * \param mode Operating Mode designation * \param msg_txt Low Rate message text (callsign, location) + * \param interleave_frames FreeDV 700D mode number of frames to average error */ - static sptr make(int mode=freedv_api::MODE_1600,const std::string msg_txt="GNU Radio"); + static sptr make(int mode=freedv_api::MODE_1600,const std::string msg_txt="GNU Radio",int interleave_frames=1); }; } /* namespace vocoder */ diff --git a/gr-vocoder/lib/freedv_rx_ss_impl.cc b/gr-vocoder/lib/freedv_rx_ss_impl.cc index 748a5c10aa..f1096b2391 100644 --- a/gr-vocoder/lib/freedv_rx_ss_impl.cc +++ b/gr-vocoder/lib/freedv_rx_ss_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -47,20 +47,31 @@ namespace gr { namespace vocoder { freedv_rx_ss::sptr - freedv_rx_ss::make(int mode, float squelch_thresh) + freedv_rx_ss::make(int mode, float squelch_thresh, int interleave_frames) { return gnuradio::get_initial_sptr - (new freedv_rx_ss_impl(mode, squelch_thresh)); + (new freedv_rx_ss_impl(mode, squelch_thresh, interleave_frames)); } - freedv_rx_ss_impl::freedv_rx_ss_impl (int mode, float squelch_thresh) + freedv_rx_ss_impl::freedv_rx_ss_impl (int mode, float squelch_thresh, int interleave_frames) : gr::block("vocoder_freedv_rx_ss", io_signature::make(1, 1, sizeof(short)), io_signature::make(1, 1, sizeof(short))), - d_mode(mode), d_squelch_thresh(squelch_thresh) + d_mode(mode), d_squelch_thresh(squelch_thresh), d_interleave_frames(interleave_frames) { +#ifdef FREEDV_MODE_700D + if (mode == FREEDV_MODE_700D) { + d_adv.interleave_frames = interleave_frames; + if((d_freedv = freedv_open_advanced(mode, &d_adv)) ==NULL) + throw std::runtime_error("freedv_tx_ss_impl: freedv_open_advanced failed"); + } else { + if((d_freedv = freedv_open(mode)) == NULL) + throw std::runtime_error("freedv_tx_ss_impl: freedv_open failed"); + } +#else if((d_freedv = freedv_open(mode)) == NULL) throw std::runtime_error("freedv_rx_ss_impl: freedv_open failed"); +#endif freedv_set_snr_squelch_thresh(d_freedv, d_squelch_thresh); freedv_set_squelch_en(d_freedv, 0); freedv_set_callback_txt(d_freedv, put_next_rx_char, NULL, (void *) &d_cb_state); @@ -138,6 +149,16 @@ namespace gr { freedv_set_snr_squelch_thresh(d_freedv, d_squelch_thresh); } + void freedv_rx_ss_impl::set_squelch_en(bool squelch_enabled) + { + gr::thread::scoped_lock l(d_setlock); + d_squelch_en = squelch_enabled; + if (squelch_enabled) + freedv_set_squelch_en(d_freedv, 1); + else + freedv_set_squelch_en(d_freedv, 0); + } + float freedv_rx_ss_impl::squelch_thresh() { return(d_squelch_thresh); } diff --git a/gr-vocoder/lib/freedv_rx_ss_impl.h b/gr-vocoder/lib/freedv_rx_ss_impl.h index acc49d9d82..56a770be36 100644 --- a/gr-vocoder/lib/freedv_rx_ss_impl.h +++ b/gr-vocoder/lib/freedv_rx_ss_impl.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -53,18 +53,24 @@ namespace gr { int d_total_bit_errors; float d_snr_est; float d_squelch_thresh; + bool d_squelch_en; int d_speech_samples; int d_max_modem_samples; float d_clock_offset; int d_use_codecrx; + int d_interleave_frames; +#ifdef FREEDV_MODE_700D + struct freedv_advanced d_adv; +#endif struct CODEC2 *d_c2 = NULL; public: - freedv_rx_ss_impl(int mode, float squelch_thresh); + freedv_rx_ss_impl(int mode, float squelch_thresh, int interleave_frames); ~freedv_rx_ss_impl(); void set_squelch_thresh(float squelch_thresh); float squelch_thresh(); + void set_squelch_en(bool squelch_enabled); // Where all the action really happens void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-vocoder/lib/freedv_tx_ss_impl.cc b/gr-vocoder/lib/freedv_tx_ss_impl.cc index a375510050..e56267d5ef 100644 --- a/gr-vocoder/lib/freedv_tx_ss_impl.cc +++ b/gr-vocoder/lib/freedv_tx_ss_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -54,20 +54,31 @@ namespace gr { namespace vocoder { freedv_tx_ss::sptr - freedv_tx_ss::make(int mode, const std::string msg_txt) + freedv_tx_ss::make(int mode, const std::string msg_txt, int interleave_frames) { return gnuradio::get_initial_sptr - (new freedv_tx_ss_impl(mode, msg_txt)); + (new freedv_tx_ss_impl(mode, msg_txt, interleave_frames)); } - freedv_tx_ss_impl::freedv_tx_ss_impl(int mode, const std::string msg_txt) + freedv_tx_ss_impl::freedv_tx_ss_impl(int mode, const std::string msg_txt, int interleave_frames) : sync_block("vocoder_freedv_tx_ss", io_signature::make(1, 1, sizeof(short)), io_signature::make(1, 1, sizeof(short))), - d_mode(mode), d_msg_text(msg_txt) + d_mode(mode), d_msg_text(msg_txt), d_interleave_frames(interleave_frames) { +#ifdef FREEDV_MODE_700D + if (mode == FREEDV_MODE_700D) { + d_adv.interleave_frames = interleave_frames; + if((d_freedv = freedv_open_advanced(mode, &d_adv)) ==NULL) + throw std::runtime_error("freedv_tx_ss_impl: freedv_open_advanced failed"); + } else { + if((d_freedv = freedv_open(mode)) == NULL) + throw std::runtime_error("freedv_tx_ss_impl: freedv_open failed"); + } +#else if((d_freedv = freedv_open(mode)) == NULL) throw std::runtime_error("freedv_tx_ss_impl: freedv_open failed"); +#endif snprintf(d_cb_state.tx_str,79,"%s",d_msg_text.c_str()); d_cb_state.ptx_str = d_cb_state.tx_str; freedv_set_callback_txt(d_freedv, NULL, get_next_tx_char, (void *) &d_cb_state); @@ -80,6 +91,38 @@ namespace gr { freedv_close(d_freedv); } + void freedv_tx_ss_impl::set_clip(int val) + { + d_clip = val; +#if defined(FREEDV_MODE_700C) || defined(FREEDV_MODE_700D) + freedv_set_clip(d_freedv, d_clip); +#endif + } + + void freedv_tx_ss_impl::set_clip(bool val) + { + if (val) + freedv_tx_ss_impl::set_clip(1); + else + freedv_tx_ss_impl::set_clip(0); + } + + void freedv_tx_ss_impl::set_tx_bpf(int val) + { + d_tx_bpf = val; +#ifdef FREEDV_MODE_700D + freedv_set_tx_bpf(d_freedv, d_tx_bpf); +#endif + } + + void freedv_tx_ss_impl::set_tx_bpf(bool val) + { + if (val) + freedv_tx_ss_impl::set_tx_bpf(1); + else + freedv_tx_ss_impl::set_tx_bpf(0); + } + int freedv_tx_ss_impl::work(int noutput_items, gr_vector_const_void_star &input_items, diff --git a/gr-vocoder/lib/freedv_tx_ss_impl.h b/gr-vocoder/lib/freedv_tx_ss_impl.h index a023b67f5b..167ee28ea8 100644 --- a/gr-vocoder/lib/freedv_tx_ss_impl.h +++ b/gr-vocoder/lib/freedv_tx_ss_impl.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2016 Free Software Foundation, Inc. + * Copyright 2016-2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -48,18 +48,29 @@ namespace gr { struct freedv_tx_callback_state d_cb_state; struct freedv *d_freedv; int d_mode; + std::string d_msg_text; + int d_interleave_frames; float d_squelch_thresh; int d_speech_samples; int d_nom_modem_samples; int d_use_codectx; int d_use_datatx; - std::string d_msg_text; + int d_clip; + int d_tx_bpf; +#ifdef FREEDV_MODE_700D + struct freedv_advanced d_adv; +#endif struct CODEC2 *d_c2; public: - freedv_tx_ss_impl(int mode, const std::string txt_msg); + freedv_tx_ss_impl(int mode, const std::string txt_msg, int interleave_frames); ~freedv_tx_ss_impl(); + void set_clip(bool val); + void set_clip(int val); + void set_tx_bpf(bool val); + void set_tx_bpf(int val); + // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star &input_items, diff --git a/gr-vocoder/swig/vocoder_swig.i b/gr-vocoder/swig/vocoder_swig.i index 1bf451539d..7af9c0002a 100644 --- a/gr-vocoder/swig/vocoder_swig.i +++ b/gr-vocoder/swig/vocoder_swig.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2011,2013,2016 Free Software Foundation, Inc. + * Copyright 2011,2013,2016,2019 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -93,8 +93,12 @@ GR_SWIG_BLOCK_MAGIC2(vocoder, codec2_encode_sp); #include "gnuradio/vocoder/freedv_tx_ss.h" %} +#ifdef FREEDV_MODE_700D +#else %ignore freedv_set_smooth_symbols; %ignore freedv_set_clip; +#endif + %include <codec2/freedv_api.h> %include "gnuradio/vocoder/freedv_api.h" %include "gnuradio/vocoder/freedv_rx_ss.h" |