summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClayton Smith <argilo@gmail.com>2014-04-06 08:56:50 -0400
committerJohnathan Corgan <johnathan@corganlabs.com>2014-04-16 11:54:43 -0700
commit9d48d89998bb9b4c36615bc7bab622f9b5c066dd (patch)
treeb305542921ea1eaea93da863661f9630eea1d57d
parent0c23ef5f16fb7814fd47beba3c96bd4fbe54c952 (diff)
Bring codec2 up to the latest version, and add support for all six bit rates.
-rwxr-xr-xgr-vocoder/examples/codec2_audio_loopback.py5
-rw-r--r--gr-vocoder/grc/vocoder_codec2_decode_ps.xml35
-rw-r--r--gr-vocoder/grc/vocoder_codec2_encode_sp.xml35
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt1
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/codec2.h54
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/codec2_decode_ps.h2
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/codec2_encode_sp.h2
-rw-r--r--gr-vocoder/lib/CMakeLists.txt1
-rw-r--r--gr-vocoder/lib/codec2.cc33
-rw-r--r--gr-vocoder/lib/codec2_decode_ps_impl.cc44
-rw-r--r--gr-vocoder/lib/codec2_decode_ps_impl.h5
-rw-r--r--gr-vocoder/lib/codec2_encode_sp_impl.cc35
-rw-r--r--gr-vocoder/lib/codec2_encode_sp_impl.h5
-rwxr-xr-xgr-vocoder/python/vocoder/qa_codec2_vocoder.py22
-rw-r--r--gr-vocoder/swig/vocoder_swig.i2
15 files changed, 226 insertions, 55 deletions
diff --git a/gr-vocoder/examples/codec2_audio_loopback.py b/gr-vocoder/examples/codec2_audio_loopback.py
index bf95f39ce9..b63d508025 100755
--- a/gr-vocoder/examples/codec2_audio_loopback.py
+++ b/gr-vocoder/examples/codec2_audio_loopback.py
@@ -24,14 +24,15 @@ from gnuradio import gr
from gnuradio import audio
from gnuradio import blocks
from gnuradio import vocoder
+from gnuradio.vocoder import codec2
def build_graph():
tb = gr.top_block()
src = audio.source(8000)
src_scale = blocks.multiply_const_ff(32767)
f2s = blocks.float_to_short()
- enc = vocoder.codec2_encode_sp()
- dec = vocoder.codec2_decode_ps()
+ enc = vocoder.codec2_encode_sp(codec2.MODE_2400)
+ dec = vocoder.codec2_decode_ps(codec2.MODE_2400)
s2f = blocks.short_to_float()
sink_scale = blocks.multiply_const_ff(1.0/32767.)
sink = audio.sink(8000)
diff --git a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml b/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
index 8b5f348671..b6e10ef8ba 100644
--- a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
+++ b/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
@@ -8,11 +8,42 @@
<name>CODEC2 Audio Decoder</name>
<key>vocoder_codec2_decode_ps</key>
<import>from gnuradio import vocoder</import>
- <make>vocoder.codec2_decode_ps()</make>
+ <import>from gnuradio.vocoder import codec2</import>
+ <make>vocoder.codec2_decode_ps($mode)</make>
+ <param>
+ <name>Bit rate</name>
+ <key>mode</key>
+ <value>codec2.MODE_2400</value>
+ <type>int</type>
+ <option>
+ <name>3200 bps</name>
+ <key>codec2.MODE_3200</key>
+ </option>
+ <option>
+ <name>2400 bps</name>
+ <key>codec2.MODE_2400</key>
+ </option>
+ <option>
+ <name>1600 bps</name>
+ <key>codec2.MODE_1600</key>
+ </option>
+ <option>
+ <name>1400 bps</name>
+ <key>codec2.MODE_1400</key>
+ </option>
+ <option>
+ <name>1300 bps</name>
+ <key>codec2.MODE_1300</key>
+ </option>
+ <option>
+ <name>1200 bps</name>
+ <key>codec2.MODE_1200</key>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>byte</type>
- <vlen>50</vlen>
+ <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48 }[$mode]</vlen>
</sink>
<source>
<name>out</name>
diff --git a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml b/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
index 0fb0ecc2ff..6af54fa586 100644
--- a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
+++ b/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
@@ -8,7 +8,38 @@
<name>CODEC2 Audio Encoder</name>
<key>vocoder_codec2_encode_sp</key>
<import>from gnuradio import vocoder</import>
- <make>vocoder.codec2_encode_sp()</make>
+ <import>from gnuradio.vocoder import codec2</import>
+ <make>vocoder.codec2_encode_sp($mode)</make>
+ <param>
+ <name>Bit rate</name>
+ <key>mode</key>
+ <value>codec2.MODE_2400</value>
+ <type>int</type>
+ <option>
+ <name>3200 bps</name>
+ <key>codec2.MODE_3200</key>
+ </option>
+ <option>
+ <name>2400 bps</name>
+ <key>codec2.MODE_2400</key>
+ </option>
+ <option>
+ <name>1600 bps</name>
+ <key>codec2.MODE_1600</key>
+ </option>
+ <option>
+ <name>1400 bps</name>
+ <key>codec2.MODE_1400</key>
+ </option>
+ <option>
+ <name>1300 bps</name>
+ <key>codec2.MODE_1300</key>
+ </option>
+ <option>
+ <name>1200 bps</name>
+ <key>codec2.MODE_1200</key>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>short</type>
@@ -16,7 +47,7 @@
<source>
<name>out</name>
<type>byte</type>
- <vlen>50</vlen>
+ <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48 }[$mode]</vlen>
</source>
</block>
diff --git a/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt b/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
index ea0562f36f..1ad2f711fc 100644
--- a/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
+++ b/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
@@ -24,6 +24,7 @@ install(FILES
api.h
alaw_decode_bs.h
alaw_encode_sb.h
+ codec2.h
codec2_decode_ps.h
codec2_encode_sp.h
cvsd_decode_bs.h
diff --git a/gr-vocoder/include/gnuradio/vocoder/codec2.h b/gr-vocoder/include/gnuradio/vocoder/codec2.h
new file mode 100644
index 0000000000..ca09e4dfc0
--- /dev/null
+++ b/gr-vocoder/include/gnuradio/vocoder/codec2.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2014 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _VOCODER_CODEC2_H_
+#define _VOCODER_CODEC2_H_
+
+#include <gnuradio/vocoder/api.h>
+
+extern "C" {
+#include "../lib/codec2/codec2.h"
+}
+
+namespace gr {
+ namespace vocoder {
+
+ class VOCODER_API codec2 {
+ public:
+
+ enum bit_rate {
+ MODE_3200 = CODEC2_MODE_3200,
+ MODE_2400 = CODEC2_MODE_2400,
+ MODE_1600 = CODEC2_MODE_1600,
+ MODE_1400 = CODEC2_MODE_1400,
+ MODE_1300 = CODEC2_MODE_1300,
+ MODE_1200 = CODEC2_MODE_1200,
+ };
+
+ private:
+
+ };
+
+ } /* namespace vocoder */
+} /* namespace gr */
+
+#endif /* _VOCODER_CODEC2_H_ */
diff --git a/gr-vocoder/include/gnuradio/vocoder/codec2_decode_ps.h b/gr-vocoder/include/gnuradio/vocoder/codec2_decode_ps.h
index 041877174b..2b74c016b8 100644
--- a/gr-vocoder/include/gnuradio/vocoder/codec2_decode_ps.h
+++ b/gr-vocoder/include/gnuradio/vocoder/codec2_decode_ps.h
@@ -48,7 +48,7 @@ namespace gr {
/*!
* \brief Make Codec2 decoder block.
*/
- static sptr make();
+ static sptr make(int mode);
};
} /* namespace vocoder */
diff --git a/gr-vocoder/include/gnuradio/vocoder/codec2_encode_sp.h b/gr-vocoder/include/gnuradio/vocoder/codec2_encode_sp.h
index 12b91b0428..a6acc58453 100644
--- a/gr-vocoder/include/gnuradio/vocoder/codec2_encode_sp.h
+++ b/gr-vocoder/include/gnuradio/vocoder/codec2_encode_sp.h
@@ -53,7 +53,7 @@ namespace gr {
/*!
* \brief Make Codec2 encoder block.
*/
- static sptr make();
+ static sptr make(int mode);
};
} /* namespace vocoder */
diff --git a/gr-vocoder/lib/CMakeLists.txt b/gr-vocoder/lib/CMakeLists.txt
index 08ff4108d3..e8368f702c 100644
--- a/gr-vocoder/lib/CMakeLists.txt
+++ b/gr-vocoder/lib/CMakeLists.txt
@@ -44,6 +44,7 @@ link_directories(${LOG4CPP_LIBRARY_DIRS})
list(APPEND gr_vocoder_sources
alaw_decode_bs_impl.cc
alaw_encode_sb_impl.cc
+ codec2.cc
codec2_decode_ps_impl.cc
codec2_encode_sp_impl.cc
cvsd_decode_bs_impl.cc
diff --git a/gr-vocoder/lib/codec2.cc b/gr-vocoder/lib/codec2.cc
new file mode 100644
index 0000000000..6d0ef61352
--- /dev/null
+++ b/gr-vocoder/lib/codec2.cc
@@ -0,0 +1,33 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002,2007,2008,2012,2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gnuradio/vocoder/codec2.h>
+
+namespace gr {
+ namespace vocoder {
+
+ } /* namespace vocoder */
+} /* namespace gr */
diff --git a/gr-vocoder/lib/codec2_decode_ps_impl.cc b/gr-vocoder/lib/codec2_decode_ps_impl.cc
index a4f7cccf82..fa4c1839d0 100644
--- a/gr-vocoder/lib/codec2_decode_ps_impl.cc
+++ b/gr-vocoder/lib/codec2_decode_ps_impl.cc
@@ -24,12 +24,12 @@
#include "config.h"
#endif
-#include "codec2_decode_ps_impl.h"
-
extern "C" {
#include "codec2/codec2.h"
}
+#include "codec2_decode_ps_impl.h"
+
#include <gnuradio/io_signature.h>
#include <stdexcept>
#include <assert.h>
@@ -38,22 +38,34 @@ namespace gr {
namespace vocoder {
codec2_decode_ps::sptr
- codec2_decode_ps::make()
+ codec2_decode_ps::make(int mode)
{
+ CODEC2 *codec2;
+ int samples_per_frame, bits_per_frame;
+
+ // Check the number of input samples and output bits per frame.
+ codec2 = codec2_create(mode);
+ samples_per_frame = codec2_samples_per_frame(codec2);
+ bits_per_frame = codec2_bits_per_frame(codec2);
+ codec2_destroy(codec2);
+
return gnuradio::get_initial_sptr
- (new codec2_decode_ps_impl());
+ (new codec2_decode_ps_impl(mode, samples_per_frame, bits_per_frame));
}
- codec2_decode_ps_impl::codec2_decode_ps_impl ()
+ codec2_decode_ps_impl::codec2_decode_ps_impl (int mode, int samples_per_frame, int bits_per_frame)
: sync_interpolator("vocoder_codec2_decode_ps",
- io_signature::make(1, 1, CODEC2_BITS_PER_FRAME * sizeof(char)),
+ io_signature::make(1, 1, bits_per_frame * sizeof(char)),
io_signature::make (1, 1, sizeof(short)),
- CODEC2_SAMPLES_PER_FRAME),
- d_frame_buf(CODEC2_BYTES_PER_FRAME, 0)
+ samples_per_frame),
+ d_frame_buf((bits_per_frame + 7) / 8, 0)
{
- if((d_codec2 = codec2_create()) == 0)
+ if((d_codec2 = codec2_create(mode)) == 0)
throw std::runtime_error("codec2_decode_ps_impl: codec2_create failed");
+ d_samples_per_frame = samples_per_frame;
+ d_bits_per_frame = bits_per_frame;
+ d_bytes_per_frame = (bits_per_frame + 7) / 8;
}
codec2_decode_ps_impl::~codec2_decode_ps_impl()
@@ -69,13 +81,13 @@ namespace gr {
const unsigned char *in = (const unsigned char*)input_items[0];
short *out = (short *) output_items[0];
- assert((noutput_items % CODEC2_SAMPLES_PER_FRAME) == 0);
+ assert((noutput_items % d_samples_per_frame) == 0);
- for(int i = 0; i < noutput_items; i += CODEC2_SAMPLES_PER_FRAME) {
+ for(int i = 0; i < noutput_items; i += d_samples_per_frame) {
pack_frame(in, &d_frame_buf[0]);
- codec2_decode (d_codec2, out, const_cast<unsigned char*>(&d_frame_buf[0]));
- in += CODEC2_BITS_PER_FRAME * sizeof (char);
- out += CODEC2_SAMPLES_PER_FRAME;
+ codec2_decode (d_codec2, out, const_cast<unsigned char*>(&d_frame_buf[0]), 0.0);
+ in += d_bits_per_frame * sizeof (char);
+ out += d_samples_per_frame;
}
return noutput_items;
@@ -84,10 +96,10 @@ namespace gr {
void
codec2_decode_ps_impl::pack_frame(const unsigned char *in_unpacked, unsigned char *out_packed)
{
- memset((void *) &d_frame_buf[0], 0x00, CODEC2_BYTES_PER_FRAME);
+ memset((void *) &d_frame_buf[0], 0x00, d_bytes_per_frame);
int byte_idx = 0, bit_idx = 0;
- for(int k = 0; k < CODEC2_BITS_PER_FRAME; k++) {
+ for(int k = 0; k < d_bits_per_frame; k++) {
out_packed[byte_idx] |= ((in_unpacked[k] & 0x01) << (7-bit_idx));
bit_idx = (bit_idx + 1) % 8;
if (bit_idx == 0) {
diff --git a/gr-vocoder/lib/codec2_decode_ps_impl.h b/gr-vocoder/lib/codec2_decode_ps_impl.h
index b9591dce74..db5ba2eef1 100644
--- a/gr-vocoder/lib/codec2_decode_ps_impl.h
+++ b/gr-vocoder/lib/codec2_decode_ps_impl.h
@@ -31,13 +31,14 @@ namespace gr {
class codec2_decode_ps_impl : public codec2_decode_ps
{
private:
- void *d_codec2;
+ CODEC2 *d_codec2;
+ int d_samples_per_frame, d_bits_per_frame, d_bytes_per_frame;
std::vector<unsigned char> d_frame_buf; //!< Store 1 packed frame for decoding
void pack_frame(const unsigned char *in_unpacked, unsigned char *out_packed); //!< Pack the bytes from unpacked bits for codec2
public:
- codec2_decode_ps_impl();
+ codec2_decode_ps_impl(int mode, int samples_per_frame, int bits_per_frame);
~codec2_decode_ps_impl();
int work(int noutput_items,
diff --git a/gr-vocoder/lib/codec2_encode_sp_impl.cc b/gr-vocoder/lib/codec2_encode_sp_impl.cc
index fc0b3eee19..ae76b09472 100644
--- a/gr-vocoder/lib/codec2_encode_sp_impl.cc
+++ b/gr-vocoder/lib/codec2_encode_sp_impl.cc
@@ -24,12 +24,12 @@
#include "config.h"
#endif
-#include "codec2_encode_sp_impl.h"
-
extern "C" {
#include "codec2/codec2.h"
}
+#include "codec2_encode_sp_impl.h"
+
#include <gnuradio/io_signature.h>
#include <stdexcept>
#include <iostream>
@@ -39,21 +39,32 @@ namespace gr {
namespace vocoder {
codec2_encode_sp::sptr
- codec2_encode_sp::make()
+ codec2_encode_sp::make(int mode)
{
+ CODEC2 *codec2;
+ int samples_per_frame, bits_per_frame;
+
+ // Check the number of input samples and output bits per frame.
+ codec2 = codec2_create(mode);
+ samples_per_frame = codec2_samples_per_frame(codec2);
+ bits_per_frame = codec2_bits_per_frame(codec2);
+ codec2_destroy(codec2);
+
return gnuradio::get_initial_sptr
- (new codec2_encode_sp_impl());
+ (new codec2_encode_sp_impl(mode, samples_per_frame, bits_per_frame));
}
- codec2_encode_sp_impl::codec2_encode_sp_impl()
+ codec2_encode_sp_impl::codec2_encode_sp_impl(int mode, int samples_per_frame, int bits_per_frame)
: sync_decimator("vocoder_codec2_encode_sp",
io_signature::make(1, 1, sizeof(short)),
- io_signature::make(1, 1, CODEC2_BITS_PER_FRAME * sizeof(char)),
- CODEC2_SAMPLES_PER_FRAME),
- d_frame_buf(CODEC2_BYTES_PER_FRAME, 0)
+ io_signature::make(1, 1, bits_per_frame * sizeof(char)),
+ samples_per_frame),
+ d_frame_buf((bits_per_frame + 7) / 8, 0)
{
- if((d_codec2 = codec2_create()) == 0)
+ if((d_codec2 = codec2_create(mode)) == 0)
throw std::runtime_error("codec2_encode_sp_impl: codec2_create failed");
+ d_samples_per_frame = samples_per_frame;
+ d_bits_per_frame = bits_per_frame;
}
codec2_encode_sp_impl::~codec2_encode_sp_impl()
@@ -72,8 +83,8 @@ namespace gr {
for(int i = 0; i < noutput_items; i++) {
codec2_encode(d_codec2, &d_frame_buf[0], const_cast<short*>(in));
unpack_frame((const unsigned char *) &d_frame_buf[0], out);
- in += CODEC2_SAMPLES_PER_FRAME;
- out += CODEC2_BITS_PER_FRAME * sizeof(char);
+ in += d_samples_per_frame;
+ out += d_bits_per_frame * sizeof(char);
}
return noutput_items;
@@ -83,7 +94,7 @@ namespace gr {
codec2_encode_sp_impl::unpack_frame(const unsigned char *packed, unsigned char *out)
{
int byte_idx = 0, bit_idx = 0;
- for(int k = 0; k < CODEC2_BITS_PER_FRAME; k++) {
+ for(int k = 0; k < d_bits_per_frame; k++) {
out[k] = (packed[byte_idx] >> (7-bit_idx)) & 0x01;
bit_idx = (bit_idx + 1) % 8;
if (bit_idx == 0) {
diff --git a/gr-vocoder/lib/codec2_encode_sp_impl.h b/gr-vocoder/lib/codec2_encode_sp_impl.h
index 7402d09f90..17d6f4e2a1 100644
--- a/gr-vocoder/lib/codec2_encode_sp_impl.h
+++ b/gr-vocoder/lib/codec2_encode_sp_impl.h
@@ -31,13 +31,14 @@ namespace gr {
class codec2_encode_sp_impl : public codec2_encode_sp
{
private:
- void *d_codec2;
+ CODEC2 *d_codec2;
+ int d_samples_per_frame, d_bits_per_frame;
std::vector<unsigned char> d_frame_buf; //!< Save 1 CODEC2 frame
void unpack_frame(const unsigned char *packed, unsigned char *out); //!< Unpack the bytes from codec2 into unpacked bits
public:
- codec2_encode_sp_impl();
+ codec2_encode_sp_impl(int mode, int samples_per_frame, int bits_per_frame);
~codec2_encode_sp_impl();
int work(int noutput_items,
diff --git a/gr-vocoder/python/vocoder/qa_codec2_vocoder.py b/gr-vocoder/python/vocoder/qa_codec2_vocoder.py
index 0e29401c7a..8fe3ac56b5 100755
--- a/gr-vocoder/python/vocoder/qa_codec2_vocoder.py
+++ b/gr-vocoder/python/vocoder/qa_codec2_vocoder.py
@@ -21,6 +21,7 @@
#
from gnuradio import gr, gr_unittest, vocoder, blocks
+from gnuradio.vocoder import codec2
class test_codec2_vocoder (gr_unittest.TestCase):
@@ -31,27 +32,18 @@ class test_codec2_vocoder (gr_unittest.TestCase):
self.tb = None
def test001_module_load (self):
- data = 20*(100,200,300,400,500,600,700,800)
- expected_data = (0,0,0,3,2,0,1,5,6,7,1,-1,0,-5,-11,-10,-20,-22,
- -20,-20,-27,-26,-36,-48,-59,-24,5,-7,-12,-27,-22,
- -22,-16,13,20,39,23,25,8,-6,15,44,97,135,145,125,
- 94,102,126,129,165,192,180,132,99,79,73,83,72,47,
- 40,0,-32,-46,-67,-99,-123,-114,-87,-108,-131,-152,
- -181,-245,-348,-294,-101,-71,-85,-26,99,123,15,2,77,
- 13,-117,-145,-105,-39,-50,-89,-59,-77,-134,-95,-51,
- -22,17,-19,-59,-74,-103,-78,4,77,113,60,18,13,-67,
- -49,24,88,179,190,89,18,-90,-102,-50,-5,123,135,57,
- 31,-82,-98,-51,6,93,104,44,-5,-84,-107,-44,45,102,104,
- 15,-47,-107,-126,-87,-11,89,93,13,-95,-136,-187,-70,
- -167,216,-70,-103,175,-284,-486)
+ data = 40*(100,200,300,400,500,600,700,800)
+ expected_data = (0, 5, 10, 14, 15, 13, 14, 20, 40, 46, 39, 36, 35, 33, 22, 17, 31, 34, 29, 24, 24, 15, -3, -8, -7, 1, -4, -11, -14, -22, -39, -53, -51, -52, -58, -58, -59, -58, -61, -74, -73, -79, -75, -61, -73, -76, -72, -75, -62, -74, -75, -64, -64, -59, -61, -49, -68, -60, -23, -46, -48, -33, -48, 2, 20, -3, 2, -8, 9, 38, 9, 16, 23, 16, 44, 65, 37, 24, 25, 55, 61, 57, 52, 39, 47, 57, 66, 73, 50, 46, 47, 55, 55, 45, 73, 86, 63, 66, 60, 55, 60, 55, 71, 59, 46, 58, 46, 2, 38, 50, 33, 41, 32, 0, -16, -11, 10, 16, -13, 0, -5, -33, -45, -38, -28, -24, -41, 21, -2, -53, -55, -74, -66, -64, -64, -41, -46, -94, -122, -130, -92, -126, -104, -90, -74, -118, -162, -154, -130, -133, -163, -18, -23, -155, -95, -145, -60, -63, 156, 864, 882, 607, 449, 163, 204, 17, 47, 612, 447, 200, -59, -188, -175, -418, -192, 170, 14, -73, -258, -276, -267, -335, -117, 96, 34, -28, -152, -130, -124, -187, 42, 176, 131, 78, -52, -2, -57, -75, 104, 130, 111, 29, -50, -46, -107, -64, 66, 36, 33, -39, -129, -91, -157, -39, 69, 1, -12, -84, -99, -52, -61, 86, 147, 58, 21, -63, -60, -100, -48, 68, 76, 6, -65, -79, -108, -159, -71, 89, 171, 183, 216, 152, 26, -35, 0, 87, 126, 143, 182, 151, 95, 106, 115, 155, 103, 86, 127, 12, -41, -91, -87, -32, -52, -41, -32, -123, -147, -154, -156, -61, -37, -8, -51, -127, -132, -127, -107, -54, 1, 26, -17, -100, -61, -9, 3, 57, 117, 102, 58, -47, 24, 67, 42, 116, 141, 113, 39, -15, 63, 68, 41, 118, 80, 24, -46, -72, 12, 5, -17, 18, -43, -61, -110, -119, -42, -40, -16, 2, -11, -50)
+
src = blocks.vector_source_s(data)
- enc = vocoder.codec2_encode_sp()
- dec = vocoder.codec2_decode_ps()
+ enc = vocoder.codec2_encode_sp(codec2.MODE_2400)
+ dec = vocoder.codec2_decode_ps(codec2.MODE_2400)
snk = blocks.vector_sink_s()
self.tb.connect(src, enc, dec, snk)
self.tb.run()
actual_result = snk.data()
self.assertEqual(expected_data, actual_result)
+ self.tb.disconnect(src, enc, dec, snk)
if __name__ == '__main__':
# Note: The Vocoder is stateful, which means this test will produce failure when removing the xml option.
diff --git a/gr-vocoder/swig/vocoder_swig.i b/gr-vocoder/swig/vocoder_swig.i
index c404ea22d5..dac35c9cd4 100644
--- a/gr-vocoder/swig/vocoder_swig.i
+++ b/gr-vocoder/swig/vocoder_swig.i
@@ -30,6 +30,7 @@
%{
#include "gnuradio/vocoder/alaw_decode_bs.h"
#include "gnuradio/vocoder/alaw_encode_sb.h"
+#include "gnuradio/vocoder/codec2.h"
#include "gnuradio/vocoder/codec2_decode_ps.h"
#include "gnuradio/vocoder/codec2_encode_sp.h"
#include "gnuradio/vocoder/cvsd_decode_bs.h"
@@ -48,6 +49,7 @@
%include "gnuradio/vocoder/alaw_decode_bs.h"
%include "gnuradio/vocoder/alaw_encode_sb.h"
+%include "gnuradio/vocoder/codec2.h"
%include "gnuradio/vocoder/codec2_decode_ps.h"
%include "gnuradio/vocoder/codec2_encode_sp.h"
%include "gnuradio/vocoder/cvsd_decode_bs.h"