@@ -15,72 +15,73 @@ namespace audio_tools {
15
15
16
16
class AMRNBDecoder : public AudioDecoder {
17
17
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 );
30
42
}
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 );
36
45
}
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 );
48
48
}
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 ));
62
62
}
63
- buffer.clear ();
64
63
}
64
+ buffer.clear ();
65
65
}
66
- return len;
67
66
}
67
+ return len;
68
+ }
68
69
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
+ }
74
75
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 ); }
77
78
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 };
84
85
};
85
86
86
87
/* *
@@ -94,7 +95,8 @@ class AMRNBDecoder : public AudioDecoder {
94
95
95
96
class AMRNBEncoder : public AudioEncoder {
96
97
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)
98
100
AMRNBEncoder (AMRNB::Mode mode) {
99
101
setMode (mode);
100
102
info.channels = 1 ;
0 commit comments