diff options
author | Johnathan Corgan | 2011-07-22 16:08:19 -0700 |
---|---|---|
committer | Johnathan Corgan | 2011-07-22 16:08:19 -0700 |
commit | 359715c34d390a07699d0fe22eb1ad1a7dac01c5 (patch) | |
tree | 1785c9835b5cdb8af2b889c67c633bf0e2bb65d6 | |
parent | 7d4199a45036bbc10d749437cd8730434b51aec6 (diff) | |
download | gnuradio-359715c34d390a07699d0fe22eb1ad1a7dac01c5.tar.gz gnuradio-359715c34d390a07699d0fe22eb1ad1a7dac01c5.tar.bz2 gnuradio-359715c34d390a07699d0fe22eb1ad1a7dac01c5.zip |
gr-vocoder: added G.723 24K ADPCM encoder, decoder, and audio loopback example
-rw-r--r-- | gr-vocoder/examples/Makefile.am | 1 | ||||
-rwxr-xr-x | gr-vocoder/examples/g723_24_audio_loopback.py | 45 | ||||
-rw-r--r-- | gr-vocoder/include/Makefile.am | 2 | ||||
-rw-r--r-- | gr-vocoder/include/vocoder_g723_24_decode_bs.h | 44 | ||||
-rw-r--r-- | gr-vocoder/include/vocoder_g723_24_encode_sb.h | 44 | ||||
-rw-r--r-- | gr-vocoder/lib/Makefile.am | 2 | ||||
-rw-r--r-- | gr-vocoder/lib/vocoder_g723_24_decode_bs.cc | 81 | ||||
-rw-r--r-- | gr-vocoder/lib/vocoder_g723_24_encode_sb.cc | 81 | ||||
-rwxr-xr-x | gr-vocoder/python/qa_g723_24_vocoder.py | 39 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_g723_24_decode_bs.i | 33 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_g723_24_encode_sb.i | 33 | ||||
-rw-r--r-- | gr-vocoder/swig/vocoder_swig.i | 2 |
12 files changed, 407 insertions, 0 deletions
diff --git a/gr-vocoder/examples/Makefile.am b/gr-vocoder/examples/Makefile.am index da1d87b80..24c17126c 100644 --- a/gr-vocoder/examples/Makefile.am +++ b/gr-vocoder/examples/Makefile.am @@ -28,5 +28,6 @@ dist_ourdata_SCRIPTS = \ codec2_audio_loopback.py \ cvsd_audio_loopback.py \ g721_audio_loopback.py \ + g723_24_audio_loopback.py \ gsm_audio_loopback.py \ ulaw_audio_loopback.py diff --git a/gr-vocoder/examples/g723_24_audio_loopback.py b/gr-vocoder/examples/g723_24_audio_loopback.py new file mode 100755 index 000000000..f125282dc --- /dev/null +++ b/gr-vocoder/examples/g723_24_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.g723_24_encode_sb() + dec = vocoder.g723_24_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 8298ec6e0..4a970a6ed 100644 --- a/gr-vocoder/include/Makefile.am +++ b/gr-vocoder/include/Makefile.am @@ -31,6 +31,8 @@ grinclude_HEADERS = \ vocoder_cvsd_encode_sb.h \ vocoder_g721_decode_bs.h \ vocoder_g721_encode_sb.h \ + vocoder_g723_24_decode_bs.h \ + vocoder_g723_24_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_g723_24_decode_bs.h b/gr-vocoder/include/vocoder_g723_24_decode_bs.h new file mode 100644 index 000000000..8ca94f253 --- /dev/null +++ b/gr-vocoder/include/vocoder_g723_24_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_G723_24_DECODE_BS_H +#define INCLUDED_VOCODER_G723_24_DECODE_BS_H + +#include <gr_sync_block.h> + +class vocoder_g723_24_decode_bs; + +typedef boost::shared_ptr<vocoder_g723_24_decode_bs> vocoder_g723_24_decode_bs_sptr; + +vocoder_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs(); + +/*! + * \brief This block performs g723_24 audio decoding. + * + * \ingroup vocoder_blk + */ + +class vocoder_g723_24_decode_bs : virtual public gr_sync_block +{ +}; + +#endif /* INCLUDED_VOCODER_G723_24_DECODE_BS_H */ diff --git a/gr-vocoder/include/vocoder_g723_24_encode_sb.h b/gr-vocoder/include/vocoder_g723_24_encode_sb.h new file mode 100644 index 000000000..b55229980 --- /dev/null +++ b/gr-vocoder/include/vocoder_g723_24_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_G723_24_ENCODE_SB_H +#define INCLUDED_VOCODER_G723_24_ENCODE_SB_H + +#include <gr_sync_block.h> + +class vocoder_g723_24_encode_sb; + +typedef boost::shared_ptr<vocoder_g723_24_encode_sb> vocoder_g723_24_encode_sb_sptr; + +vocoder_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb(); + +/*! + * \brief This block performs g723_24 audio encoding. + * + * \ingroup vocoder_blk + */ + +class vocoder_g723_24_encode_sb : virtual public gr_sync_block +{ +}; + +#endif /* INCLUDED_VOCODER_G723_24_ENCODE_SB_H */ diff --git a/gr-vocoder/lib/Makefile.am b/gr-vocoder/lib/Makefile.am index 49959529a..d9e12c6a2 100644 --- a/gr-vocoder/lib/Makefile.am +++ b/gr-vocoder/lib/Makefile.am @@ -37,6 +37,8 @@ libgnuradio_vocoder_la_SOURCES = \ vocoder_cvsd_encode_sb.cc \ vocoder_g721_decode_bs.cc \ vocoder_g721_encode_sb.cc \ + vocoder_g723_24_decode_bs.cc \ + vocoder_g723_24_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_g723_24_decode_bs.cc b/gr-vocoder/lib/vocoder_g723_24_decode_bs.cc new file mode 100644 index 000000000..2ea036c58 --- /dev/null +++ b/gr-vocoder/lib/vocoder_g723_24_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_g723_24_decode_bs.h> +#include <gr_io_signature.h> +#include <limits.h> + +extern "C" { +#include "g7xx/g72x.h" +} + +class vocoder_g723_24_decode_bs_impl : public vocoder_g723_24_decode_bs +{ +public: + + vocoder_g723_24_decode_bs_impl(); + ~vocoder_g723_24_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_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs() +{ + return gnuradio::get_initial_sptr(new vocoder_g723_24_decode_bs_impl()); +} + +vocoder_g723_24_decode_bs_impl::vocoder_g723_24_decode_bs_impl() + : gr_sync_block("vocoder_g723_24_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_g723_24_decode_bs_impl::~vocoder_g723_24_decode_bs_impl() +{ +} + +int +vocoder_g723_24_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] = g723_24_decoder(in[i], AUDIO_ENCODING_LINEAR, &d_state); + + return noutput_items; +} diff --git a/gr-vocoder/lib/vocoder_g723_24_encode_sb.cc b/gr-vocoder/lib/vocoder_g723_24_encode_sb.cc new file mode 100644 index 000000000..7e6914223 --- /dev/null +++ b/gr-vocoder/lib/vocoder_g723_24_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_g723_24_encode_sb.h> +#include <gr_io_signature.h> +#include <limits.h> + +extern "C" { +#include "g7xx/g72x.h" +} + +class vocoder_g723_24_encode_sb_impl : public vocoder_g723_24_encode_sb +{ +public: + + vocoder_g723_24_encode_sb_impl(); + ~vocoder_g723_24_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_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb() +{ + return gnuradio::get_initial_sptr(new vocoder_g723_24_encode_sb_impl()); +} + +vocoder_g723_24_encode_sb_impl::vocoder_g723_24_encode_sb_impl() + : gr_sync_block("vocoder_g723_24_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_g723_24_encode_sb_impl::~vocoder_g723_24_encode_sb_impl() +{ +} + +int +vocoder_g723_24_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] = g723_24_encoder(in[i], AUDIO_ENCODING_LINEAR, &d_state); + + return noutput_items; +} diff --git a/gr-vocoder/python/qa_g723_24_vocoder.py b/gr-vocoder/python/qa_g723_24_vocoder.py new file mode 100755 index 000000000..ccf215f46 --- /dev/null +++ b/gr-vocoder/python/qa_g723_24_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_g723_24_vocoder (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + def test001_module_load (self): + enc = g723_24_encode_sb(); + dec = g723_24_decode_bs(); + +if __name__ == '__main__': + gr_unittest.run(test_g723_24_vocoder, "test_g723_24_vocoder.xml") diff --git a/gr-vocoder/swig/vocoder_g723_24_decode_bs.i b/gr-vocoder/swig/vocoder_g723_24_decode_bs.i new file mode 100644 index 000000000..41548059f --- /dev/null +++ b/gr-vocoder/swig/vocoder_g723_24_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_g723_24_decode_bs.h" +%} + +GR_SWIG_BLOCK_MAGIC(vocoder,g723_24_decode_bs); + +vocoder_g723_24_decode_bs_sptr vocoder_make_g723_24_decode_bs(); + +class vocoder_g723_24_decode_bs : public gr_sync_block +{ +}; diff --git a/gr-vocoder/swig/vocoder_g723_24_encode_sb.i b/gr-vocoder/swig/vocoder_g723_24_encode_sb.i new file mode 100644 index 000000000..7165a8a82 --- /dev/null +++ b/gr-vocoder/swig/vocoder_g723_24_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_g723_24_encode_sb.h" +%} + +GR_SWIG_BLOCK_MAGIC(vocoder,g723_24_encode_sb); + +vocoder_g723_24_encode_sb_sptr vocoder_make_g723_24_encode_sb(); + +class vocoder_g723_24_encode_sb : public gr_sync_block +{ +}; diff --git a/gr-vocoder/swig/vocoder_swig.i b/gr-vocoder/swig/vocoder_swig.i index 30e36bfb4..cb89776ca 100644 --- a/gr-vocoder/swig/vocoder_swig.i +++ b/gr-vocoder/swig/vocoder_swig.i @@ -30,6 +30,8 @@ %include "vocoder_cvsd_encode_sb.i" %include "vocoder_g721_decode_bs.i" %include "vocoder_g721_encode_sb.i" +%include "vocoder_g723_24_decode_bs.i" +%include "vocoder_g723_24_encode_sb.i" %include "vocoder_gsm_fr_decode_ps.i" %include "vocoder_gsm_fr_encode_sp.i" %include "vocoder_ulaw_decode_bs.i" |