1
1
#pragma once
2
- #include " AMRWB.h" // https://github.com/pschatzmann/codec-amr
2
+ #include " AMRWB.h" // https://github.com/pschatzmann/codec-amr
3
3
#include " AudioTools/AudioCodecs/AudioCodecsBase.h"
4
4
5
5
namespace audio_tools {
@@ -15,6 +15,8 @@ namespace audio_tools {
15
15
16
16
class AMRWBDecoder : public AudioDecoder {
17
17
public:
18
+ // / valid mode values: MODE_6_60,MODE_8_85,MODE_12_65,MODE_14_25,
19
+ // / MODE_15_85,MODE_18_25,MODE_19_85,MODE_23_05,MODE_23_85 (e.g. AMRWB::Mode::MODE_6_60)
18
20
AMRWBDecoder (AMRWB::Mode mode) {
19
21
setMode (mode);
20
22
info.channels = 1 ;
@@ -47,8 +49,8 @@ class AMRWBDecoder : public AudioDecoder {
47
49
if (buffer.isFull ()) {
48
50
int result_samples = amr.getFrameSizeSamples ();
49
51
int16_t result[result_samples];
50
- int size = amr. decode (buffer. data (), buffer. size (), result,
51
- result_samples);
52
+ int size =
53
+ amr. decode (buffer. data (), buffer. size (), result, result_samples);
52
54
if (size > 0 ) {
53
55
if (getOutput () != nullptr ) {
54
56
getOutput ()->write ((uint8_t *)result, size * sizeof (int16_t ));
@@ -61,20 +63,18 @@ class AMRWBDecoder : public AudioDecoder {
61
63
}
62
64
63
65
// / Provides the block size (size of encoded frame)
64
- int blickSize () {
65
- return amr.getEncodedFrameSizeBytes ();
66
- }
66
+ int blickSize () { return amr.getEncodedFrameSizeBytes (); }
67
67
68
68
// / Provides the frame size (size of decoded frame)
69
- int frameSize () {
70
- return amr.getFrameSizeSamples () * sizeof (int16_t );
71
- }
69
+ int frameSize () { return amr.getFrameSizeSamples () * sizeof (int16_t ); }
72
70
73
71
void setMode (AMRWB::Mode mode) {
74
72
this ->mode = mode;
75
73
amr.setMode (mode);
76
74
}
77
75
76
+ operator bool () override { return getOutput () != nullptr ; }
77
+
78
78
protected:
79
79
AMRWB amr;
80
80
AMRWB::Mode mode;
@@ -92,6 +92,8 @@ class AMRWBDecoder : public AudioDecoder {
92
92
93
93
class AMRWBEncoder : public AudioEncoder {
94
94
public:
95
+ // / valid mode values: MODE_6_60,MODE_8_85,MODE_12_65,MODE_14_25,
96
+ // / MODE_15_85,MODE_18_25,MODE_19_85,MODE_23_05,MODE_23_85 (e.g. AMRWB::Mode::MODE_6_60)
95
97
AMRWBEncoder (AMRWB::Mode mode) {
96
98
setMode (mode);
97
99
info.channels = 1 ;
@@ -100,11 +102,11 @@ class AMRWBEncoder : public AudioEncoder {
100
102
101
103
~AMRWBEncoder () override = default ;
102
104
103
- void setMode (AMRWB::Mode mode) {
105
+ void setMode (AMRWB::Mode mode) {
104
106
this ->mode = mode;
105
107
amr.setMode (mode);
106
108
}
107
-
109
+
108
110
bool begin () {
109
111
buffer.resize (frameSize ());
110
112
return getOutput () != nullptr ;
@@ -128,9 +130,9 @@ class AMRWBEncoder : public AudioEncoder {
128
130
if (buffer.isFull ()) {
129
131
int result_bytes = blockSize ();
130
132
uint8_t result[result_bytes];
131
- int size = amr. encode (( int16_t *)buffer. data (),
132
- buffer. size () / sizeof (int16_t ), result ,
133
- result_bytes);
133
+ int size =
134
+ amr. encode ( (int16_t *)buffer. data () ,
135
+ buffer. size () / sizeof ( int16_t ), result, result_bytes);
134
136
if (size > 0 ) {
135
137
if (getOutput () != nullptr ) {
136
138
getOutput ()->write (result, size);
@@ -149,21 +151,19 @@ class AMRWBEncoder : public AudioEncoder {
149
151
}
150
152
151
153
// / Provides the frame size (size of decoded frame)
152
- int frameSize () {
153
- return amr.getFrameSizeSamples () * sizeof (int16_t );
154
- }
154
+ int frameSize () { return amr.getFrameSizeSamples () * sizeof (int16_t ); }
155
155
156
156
const char *mime () { return " audio/amr" ; }
157
157
158
158
void setOutput (Print &out_stream) override { p_print = &out_stream; }
159
159
160
160
Print *getOutput () { return p_print; }
161
-
161
+
162
162
protected:
163
163
AMRWB amr;
164
164
AMRWB::Mode mode;
165
165
SingleBuffer<uint8_t > buffer{0 };
166
166
Print *p_print = nullptr ;
167
167
};
168
168
169
- } // namespace audio_tools
169
+ } // namespace audio_tools
0 commit comments