@@ -15,72 +15,73 @@ namespace audio_tools {
1515
1616class AMRNBDecoder : public AudioDecoder {
1717 public:
18- // / valid mode values: MR475,MR515,MR59,MR67,MR74,MR795,MR102,MR122 (e.g. AMRNB::Mode::MR475)
19- AMRNBDecoder (AMRNB::Mode mode) {
20- setMode (mode);
21- info.channels = 1 ;
22- info.sample_rate = 8000 ;
23- }
24-
25- ~AMRNBDecoder () override = default ;
26-
27- void setMode (AMRNB::Mode mode) {
28- this ->mode = mode;
29- amr.setMode (mode);
18+ // / Default Constructor with valid mode values:
19+ // / NB_475,NB_515,NB_59,NB_67,NB_74,NB_795,NB_102,NB_122 (e.g.
20+ // / AMRNB::Mode::NB_475) AMRNBDecoder(AMRNB::Mode mode) {
21+ setMode (mode);
22+ info.channels = 1 ;
23+ info.sample_rate = 8000 ;
24+ }
25+
26+ ~AMRNBDecoder () override = default ;
27+
28+ void setMode (AMRNB::Mode mode) {
29+ this ->mode = mode;
30+ amr.setMode (mode);
31+ }
32+
33+ bool begin () {
34+ notifyAudioChange (audioInfo ());
35+ buffer.resize (amr.getEncodedFrameSizeBytes ());
36+ return getOutput () != nullptr ;
37+ }
38+
39+ void setAudioInfo (AudioInfo from) {
40+ if (from.bits_per_sample != 16 ) {
41+ LOGE (" Invalid bits per sample: %d" , from.bits_per_sample );
3042 }
31-
32- bool begin () {
33- notifyAudioChange (audioInfo ());
34- buffer.resize (amr.getEncodedFrameSizeBytes ());
35- return getOutput () != nullptr ;
43+ if (from.sample_rate != 8000 ) {
44+ LOGE (" Invalid sample rate: %d" , from.sample_rate );
3645 }
37-
38- void setAudioInfo (AudioInfo from) {
39- if (from.bits_per_sample != 16 ) {
40- LOGE (" Invalid bits per sample: %d" , from.bits_per_sample );
41- }
42- if (from.sample_rate != 8000 ) {
43- LOGE (" Invalid sample rate: %d" , from.sample_rate );
44- }
45- if (from.channels != 1 ) {
46- LOGE (" Invalid channels: %d" , from.channels );
47- }
46+ if (from.channels != 1 ) {
47+ LOGE (" Invalid channels: %d" , from.channels );
4848 }
49-
50- size_t write ( const uint8_t *data, size_t len) override {
51- for ( size_t j = 0 ; j < len; j++) {
52- buffer. write (data[j]);
53- if ( buffer.isFull ()) {
54- int result_samples = amr. getFrameSizeSamples ();
55- int16_t result[result_samples] ;
56- int size =
57- amr. decode (buffer. data (), buffer. size (), result, result_samples);
58- if ( size > 0 ) {
59- if (getOutput () != nullptr ) {
60- getOutput ()-> write (( uint8_t *)result, size * sizeof ( int16_t ));
61- }
49+ }
50+
51+ size_t write ( const uint8_t *data, size_t len) override {
52+ for ( size_t j = 0 ; j < len; j++) {
53+ buffer.write (data[j]);
54+ if (buffer. isFull ()) {
55+ int result_samples = amr. getFrameSizeSamples () ;
56+ int16_t result[result_samples];
57+ int size =
58+ amr. decode (buffer. data (), buffer. size (), result, result_samples);
59+ if (size > 0 ) {
60+ if ( getOutput () != nullptr ) {
61+ getOutput ()-> write (( uint8_t *)result, size * sizeof ( int16_t ));
6262 }
63- buffer.clear ();
6463 }
64+ buffer.clear ();
6565 }
66- return len;
6766 }
67+ return len;
68+ }
6869
69- // / Provides the block size (size of encoded frame)
70- int blockSize () {
71- amr.setMode (mode);
72- return amr.getEncodedFrameSizeBytes ();
73- }
70+ // / Provides the block size (size of encoded frame)
71+ int blockSize () {
72+ amr.setMode (mode);
73+ return amr.getEncodedFrameSizeBytes ();
74+ }
7475
75- // / Provides the frame size (size of decoded frame)
76- int frameSize () { return amr.getFrameSizeSamples () * sizeof (int16_t ); }
76+ // / Provides the frame size (size of decoded frame)
77+ int frameSize () { return amr.getFrameSizeSamples () * sizeof (int16_t ); }
7778
78- operator bool () override { return getOutput () != nullptr ; }
79-
80- protected:
81- AMRNB amr;
82- AMRNB::Mode mode;
83- SingleBuffer<uint8_t > buffer{0 };
79+ operator bool () override { return getOutput () != nullptr ; }
80+
81+ protected:
82+ AMRNB amr;
83+ AMRNB::Mode mode;
84+ SingleBuffer<uint8_t > buffer{0 };
8485};
8586
8687/* *
@@ -94,7 +95,8 @@ class AMRNBDecoder : public AudioDecoder {
9495
9596class AMRNBEncoder : public AudioEncoder {
9697 public:
97- // / valid mode values: MR475,MR515,MR59,MR67,MR74,MR795,MR102,MR122 (e.g. AMRNB::Mode::MR475)
98+ // / valid mode values: MR475,MR515,MR59,MR67,MR74,MR795,MR102,MR122 (e.g.
99+ // / AMRNB::Mode::MR475)
98100 AMRNBEncoder (AMRNB::Mode mode) {
99101 setMode (mode);
100102 info.channels = 1 ;
0 commit comments