Skip to content

Commit 36d31a4

Browse files
committed
CodecAMR
1 parent f6161bd commit 36d31a4

File tree

2 files changed

+61
-59
lines changed

2 files changed

+61
-59
lines changed

src/AudioTools/AudioCodecs/CodecAMRNB.h

Lines changed: 59 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -15,72 +15,73 @@ namespace audio_tools {
1515

1616
class 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

9596
class 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;

src/AudioTools/AudioCodecs/CodecAMRWB.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ namespace audio_tools {
1515

1616
class AMRWBDecoder : public AudioDecoder {
1717
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+
/// Default constructor with valid mode values: WB_6_60,WB_8_85,WB_12_65,WB_14_25,
19+
/// WB_15_85,WB_18_25,WB_19_85,WB_23_05,WB_23_85 (e.g. AMRWB::Mode::WB_6_60)
2020
AMRWBDecoder(AMRWB::Mode mode) {
2121
setMode(mode);
2222
info.channels = 1;

0 commit comments

Comments
 (0)