diff options
-rw-r--r-- | gr-vocoder/examples/Makefile.am | 1 | ||||
-rwxr-xr-x | gr-vocoder/examples/g721_audio_loopback.py | 45 | ||||
-rw-r--r-- | gr-vocoder/include/Makefile.am | 2 | ||||
-rw-r--r-- | gr-vocoder/include/vocoder_g721_decode_bs.h | 44 | ||||
-rw-r--r-- | gr-vocoder/include/vocoder_g721_encode_sb.h | 44 | ||||
-rw-r--r-- | gr-vocoder/lib/Makefile.am | 4 | ||||
-rw-r--r-- | gr-vocoder/lib/vocoder_g721_decode_bs.cc | 81 | ||||
-rw-r--r-- | gr-vocoder/lib/vocoder_g721_encode_sb.cc | 81 | ||||
-rw-r--r-- | gr-vocoder/python/Makefile.am | 1 | ||||
-rwxr-xr-x | gr-vocoder/python/qa_g721_vocoder.py | 39 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_g721_decode_bs.i | 33 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_g721_encode_sb.i | 33 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_swig.i | 6 |
13 files changed, 411 insertions, 3 deletions
diff --git a/gr-vocoder/examples/Makefile.am b/gr-vocoder/examples/Makefile.am index 6d881e1a6..da1d87b80 100644 --- a/gr-vocoder/examples/Makefile.am +++ b/gr-vocoder/examples/Makefile.am @@ -27,5 +27,6 @@ dist_ourdata_SCRIPTS = \ alaw_audio_loopback.py \ codec2_audio_loopback.py \ cvsd_audio_loopback.py \ + g721_audio_loopback.py \ gsm_audio_loopback.py \ ulaw_audio_loopback.py diff --git a/gr-vocoder/examples/g721_audio_loopback.py b/gr-vocoder/examples/g721_audio_loopback.py new file mode 100755 index 000000000..8b5bc8f33 --- /dev/null +++ b/gr-vocoder/examples/g721_audio_loopback.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# +# Copyright 2011 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. +# + +from gnuradio import gr +from gnuradio import audio +from gnuradio import vocoder + +def build_graph(): + tb = gr.top_block() + src = audio.source(8000) + src_scale = gr.multiply_const_ff(32767) + f2s = gr.float_to_short () + enc = vocoder.g721_encode_sb() + dec = vocoder.g721_decode_bs() + s2f = gr.short_to_float () + sink_scale = gr.multiply_const_ff(1.0/32767.) + sink = audio.sink(8000) + tb.connect(src, src_scale, f2s, enc, dec, s2f, sink_scale, sink) + return tb + +if __name__ == '__main__': + tb = build_graph() + tb.start() + raw_input ('Press Enter to exit: ') + tb.stop() + tb.wait() diff --git a/gr-vocoder/include/Makefile.am b/gr-vocoder/include/Makefile.am index 06c649680..8298ec6e0 100644 --- a/gr-vocoder/include/Makefile.am +++ b/gr-vocoder/include/Makefile.am @@ -29,6 +29,8 @@ grinclude_HEADERS = \ vocoder_codec2_encode_sp.h \ vocoder_cvsd_decode_bs.h \ vocoder_cvsd_encode_sb.h \ + vocoder_g721_decode_bs.h \ + vocoder_g721_encode_sb.h \ vocoder_gsm_fr_decode_ps.h \ vocoder_gsm_fr_encode_sp.h \ vocoder_ulaw_decode_bs.h \ diff --git a/gr-vocoder/include/vocoder_g721_decode_bs.h b/gr-vocoder/include/vocoder_g721_decode_bs.h new file mode 100644 index 000000000..8ce3b12e5 --- /dev/null +++ b/gr-vocoder/include/vocoder_g721_decode_bs.h @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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 INCLUDED_VOCODER_G721_DECODE_BS_H +#define INCLUDED_VOCODER_G721_DECODE_BS_H + +#include <gr_sync_block.h> + +class vocoder_g721_decode_bs; + +typedef boost::shared_ptr<vocoder_g721_decode_bs> vocoder_g721_decode_bs_sptr; + +vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs(); + +/*! + * \brief This block performs g721 audio decoding. + * + * \ingroup vocoder_blk + */ + +class vocoder_g721_decode_bs : virtual public gr_sync_block +{ +}; + +#endif /* INCLUDED_VOCODER_G721_DECODE_BS_H */ diff --git a/gr-vocoder/include/vocoder_g721_encode_sb.h b/gr-vocoder/include/vocoder_g721_encode_sb.h new file mode 100644 index 000000000..5af980640 --- /dev/null +++ b/gr-vocoder/include/vocoder_g721_encode_sb.h @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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 INCLUDED_VOCODER_G721_ENCODE_SB_H +#define INCLUDED_VOCODER_G721_ENCODE_SB_H + +#include <gr_sync_block.h> + +class vocoder_g721_encode_sb; + +typedef boost::shared_ptr<vocoder_g721_encode_sb> vocoder_g721_encode_sb_sptr; + +vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb(); + +/*! + * \brief This block performs g721 audio encoding. + * + * \ingroup vocoder_blk + */ + +class vocoder_g721_encode_sb : virtual public gr_sync_block +{ +}; + +#endif /* INCLUDED_VOCODER_G721_ENCODE_SB_H */ diff --git a/gr-vocoder/lib/Makefile.am b/gr-vocoder/lib/Makefile.am index e05d61f3c..49959529a 100644 --- a/gr-vocoder/lib/Makefile.am +++ b/gr-vocoder/lib/Makefile.am @@ -33,8 +33,10 @@ libgnuradio_vocoder_la_SOURCES = \ vocoder_alaw_encode_sb.cc \ vocoder_codec2_decode_ps.cc \ vocoder_codec2_encode_sp.cc \ - vocoder_cvsd_encode_sb.cc \ vocoder_cvsd_decode_bs.cc \ + vocoder_cvsd_encode_sb.cc \ + vocoder_g721_decode_bs.cc \ + vocoder_g721_encode_sb.cc \ vocoder_gsm_fr_decode_ps.cc \ vocoder_gsm_fr_encode_sp.cc \ vocoder_ulaw_decode_bs.cc \ diff --git a/gr-vocoder/lib/vocoder_g721_decode_bs.cc b/gr-vocoder/lib/vocoder_g721_decode_bs.cc new file mode 100644 index 000000000..2abee8d14 --- /dev/null +++ b/gr-vocoder/lib/vocoder_g721_decode_bs.cc @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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 <vocoder_g721_decode_bs.h> +#include <gr_io_signature.h> +#include <limits.h> + +extern "C" { +#include "g7xx/g72x.h" +} + +class vocoder_g721_decode_bs_impl : public vocoder_g721_decode_bs +{ +public: + + vocoder_g721_decode_bs_impl(); + ~vocoder_g721_decode_bs_impl(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +private: + + g72x_state d_state; + +}; + +vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs() +{ + return gnuradio::get_initial_sptr(new vocoder_g721_decode_bs_impl()); +} + +vocoder_g721_decode_bs_impl::vocoder_g721_decode_bs_impl() + : gr_sync_block("vocoder_g721_decode_bs", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (short))) +{ + g72x_init_state(&d_state); +} + +vocoder_g721_decode_bs_impl::~vocoder_g721_decode_bs_impl() +{ +} + +int +vocoder_g721_decode_bs_impl::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const unsigned char *in = (const unsigned char *)input_items[0]; + short *out = (short *)output_items[0]; + + for(int i = 0; i < noutput_items; i++) + out[i] = g721_decoder(in[i], AUDIO_ENCODING_LINEAR, &d_state); + + return noutput_items; +} diff --git a/gr-vocoder/lib/vocoder_g721_encode_sb.cc b/gr-vocoder/lib/vocoder_g721_encode_sb.cc new file mode 100644 index 000000000..667e983dc --- /dev/null +++ b/gr-vocoder/lib/vocoder_g721_encode_sb.cc @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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 <vocoder_g721_encode_sb.h> +#include <gr_io_signature.h> +#include <limits.h> + +extern "C" { +#include "g7xx/g72x.h" +} + +class vocoder_g721_encode_sb_impl : public vocoder_g721_encode_sb +{ +public: + + vocoder_g721_encode_sb_impl(); + ~vocoder_g721_encode_sb_impl(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +private: + + g72x_state d_state; + +}; + +vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb() +{ + return gnuradio::get_initial_sptr(new vocoder_g721_encode_sb_impl()); +} + +vocoder_g721_encode_sb_impl::vocoder_g721_encode_sb_impl() + : gr_sync_block("vocoder_g721_encode_sb", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (unsigned char))) +{ + g72x_init_state(&d_state); +} + +vocoder_g721_encode_sb_impl::~vocoder_g721_encode_sb_impl() +{ +} + +int +vocoder_g721_encode_sb_impl::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const short *in = (const short *)input_items[0]; + unsigned char *out = (unsigned char *)output_items[0]; + + for(int i = 0; i < noutput_items; i++) + out[i] = g721_encoder(in[i], AUDIO_ENCODING_LINEAR, &d_state); + + return noutput_items; +} diff --git a/gr-vocoder/python/Makefile.am b/gr-vocoder/python/Makefile.am index 256b46005..fea9b572f 100644 --- a/gr-vocoder/python/Makefile.am +++ b/gr-vocoder/python/Makefile.am @@ -29,6 +29,7 @@ noinst_PYTHON = \ qa_alaw_vocoder.py \ qa_codec2_vocoder.py \ qa_cvsd_vocoder.py \ + qa_g721_vocoder.py \ qa_gsm_full_rate.py \ qa_ulaw_vocoder.py diff --git a/gr-vocoder/python/qa_g721_vocoder.py b/gr-vocoder/python/qa_g721_vocoder.py new file mode 100755 index 000000000..79cc944f3 --- /dev/null +++ b/gr-vocoder/python/qa_g721_vocoder.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# +# Copyright 2011 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. +# + +from gnuradio import gr, gr_unittest +from vocoder_swig import * + +class test_g721_vocoder (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + def test001_module_load (self): + enc = g721_encode_sb(); + dec = g721_decode_bs(); + +if __name__ == '__main__': + gr_unittest.run(test_g721_vocoder, "test_g721_vocoder.xml") diff --git a/gr-vocoder/swig/vocoder_g721_decode_bs.i b/gr-vocoder/swig/vocoder_g721_decode_bs.i new file mode 100644 index 000000000..47e7d2861 --- /dev/null +++ b/gr-vocoder/swig/vocoder_g721_decode_bs.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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. + */ + +%{ +#include "vocoder_g721_decode_bs.h" +%} + +GR_SWIG_BLOCK_MAGIC(vocoder,g721_decode_bs); + +vocoder_g721_decode_bs_sptr vocoder_make_g721_decode_bs(); + +class vocoder_g721_decode_bs : public gr_sync_block +{ +}; diff --git a/gr-vocoder/swig/vocoder_g721_encode_sb.i b/gr-vocoder/swig/vocoder_g721_encode_sb.i new file mode 100644 index 000000000..0675087a0 --- /dev/null +++ b/gr-vocoder/swig/vocoder_g721_encode_sb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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. + */ + +%{ +#include "vocoder_g721_encode_sb.h" +%} + +GR_SWIG_BLOCK_MAGIC(vocoder,g721_encode_sb); + +vocoder_g721_encode_sb_sptr vocoder_make_g721_encode_sb(); + +class vocoder_g721_encode_sb : public gr_sync_block +{ +}; diff --git a/gr-vocoder/swig/vocoder_swig.i b/gr-vocoder/swig/vocoder_swig.i index b339cc7a4..30e36bfb4 100644 --- a/gr-vocoder/swig/vocoder_swig.i +++ b/gr-vocoder/swig/vocoder_swig.i @@ -24,12 +24,14 @@ %include "vocoder_alaw_decode_bs.i" %include "vocoder_alaw_encode_sb.i" -%include "vocoder_codec2_encode_sp.i" %include "vocoder_codec2_decode_ps.i" +%include "vocoder_codec2_encode_sp.i" %include "vocoder_cvsd_decode_bs.i" %include "vocoder_cvsd_encode_sb.i" -%include "vocoder_gsm_fr_encode_sp.i" +%include "vocoder_g721_decode_bs.i" +%include "vocoder_g721_encode_sb.i" %include "vocoder_gsm_fr_decode_ps.i" +%include "vocoder_gsm_fr_encode_sp.i" %include "vocoder_ulaw_decode_bs.i" %include "vocoder_ulaw_encode_sb.i" |