Skip to content

Commit 2284121

Browse files
committed
CodecAMR
1 parent 36d31a4 commit 2284121

File tree

2 files changed

+60
-58
lines changed

2 files changed

+60
-58
lines changed

src/AudioTools/AudioCodecs/CodecAMRNB.h

Lines changed: 58 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,71 +17,72 @@ class AMRNBDecoder : public AudioDecoder {
1717
public:
1818
/// Default Constructor with valid mode values:
1919
/// 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);
20+
/// AMRNB::Mode::NB_475)
21+
AMRNBDecoder(AMRNB::Mode mode) {
22+
setMode(mode);
23+
info.channels = 1;
24+
info.sample_rate = 8000;
4225
}
43-
if (from.sample_rate != 8000) {
44-
LOGE("Invalid sample rate: %d", from.sample_rate);
26+
27+
~AMRNBDecoder() override = default;
28+
29+
void setMode(AMRNB::Mode mode) {
30+
this->mode = mode;
31+
amr.setMode(mode);
4532
}
46-
if (from.channels != 1) {
47-
LOGE("Invalid channels: %d", from.channels);
33+
34+
bool begin() {
35+
notifyAudioChange(audioInfo());
36+
buffer.resize(amr.getEncodedFrameSizeBytes());
37+
return getOutput() != nullptr;
4838
}
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));
39+
40+
void setAudioInfo(AudioInfo from) {
41+
if (from.bits_per_sample != 16) {
42+
LOGE("Invalid bits per sample: %d", from.bits_per_sample);
43+
}
44+
if (from.sample_rate != 8000) {
45+
LOGE("Invalid sample rate: %d", from.sample_rate);
46+
}
47+
if (from.channels != 1) {
48+
LOGE("Invalid channels: %d", from.channels);
49+
}
50+
}
51+
52+
size_t write(const uint8_t *data, size_t len) override {
53+
for (size_t j = 0; j < len; j++) {
54+
buffer.write(data[j]);
55+
if (buffer.isFull()) {
56+
int result_samples = amr.getFrameSizeSamples();
57+
int16_t result[result_samples];
58+
int size =
59+
amr.decode(buffer.data(), buffer.size(), result, result_samples);
60+
if (size > 0) {
61+
if (getOutput() != nullptr) {
62+
getOutput()->write((uint8_t *)result, size * sizeof(int16_t));
63+
}
6264
}
65+
buffer.clear();
6366
}
64-
buffer.clear();
6567
}
68+
return len;
6669
}
67-
return len;
68-
}
6970

70-
/// Provides the block size (size of encoded frame)
71-
int blockSize() {
72-
amr.setMode(mode);
73-
return amr.getEncodedFrameSizeBytes();
74-
}
71+
/// Provides the block size (size of encoded frame)
72+
int blockSize() {
73+
amr.setMode(mode);
74+
return amr.getEncodedFrameSizeBytes();
75+
}
7576

76-
/// Provides the frame size (size of decoded frame)
77-
int frameSize() { return amr.getFrameSizeSamples() * sizeof(int16_t); }
77+
/// Provides the frame size (size of decoded frame)
78+
int frameSize() { return amr.getFrameSizeSamples() * sizeof(int16_t); }
7879

79-
operator bool() override { return getOutput() != nullptr; }
80+
operator bool() override { return getOutput() != nullptr; }
8081

81-
protected:
82-
AMRNB amr;
83-
AMRNB::Mode mode;
84-
SingleBuffer<uint8_t> buffer{0};
82+
protected:
83+
AMRNB amr;
84+
AMRNB::Mode mode;
85+
SingleBuffer<uint8_t> buffer{0};
8586
};
8687

8788
/**
@@ -95,8 +96,9 @@ SingleBuffer<uint8_t> buffer{0};
9596

9697
class AMRNBEncoder : public AudioEncoder {
9798
public:
98-
/// valid mode values: MR475,MR515,MR59,MR67,MR74,MR795,MR102,MR122 (e.g.
99-
/// AMRNB::Mode::MR475)
99+
/// Default Constructor with valid mode values:
100+
/// NB_475,NB_515,NB_59,NB_67,NB_74,NB_795,NB_102,NB_122 (e.g.
101+
/// AMRNB::Mode::NB_475) AMRNBDecoder(AMRNB::Mode mode) {
100102
AMRNBEncoder(AMRNB::Mode mode) {
101103
setMode(mode);
102104
info.channels = 1;

src/AudioTools/AudioCodecs/CodecAMRWB.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ class AMRWBDecoder : public AudioDecoder {
9292

9393
class AMRWBEncoder : public AudioEncoder {
9494
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+
/// Default constructor with valid mode values: WB_6_60,WB_8_85,WB_12_65,WB_14_25,
96+
/// WB_15_85,WB_18_25,WB_19_85,WB_23_05,WB_23_85 (e.g. AMRWB::Mode::WB_6_60)
9797
AMRWBEncoder(AMRWB::Mode mode) {
9898
setMode(mode);
9999
info.channels = 1;

0 commit comments

Comments
 (0)