Skip to content

Commit f6161bd

Browse files
committed
CodecAMR
1 parent c1fee43 commit f6161bd

File tree

2 files changed

+23
-19
lines changed

2 files changed

+23
-19
lines changed

src/AudioTools/AudioCodecs/CodecAMRNB.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ 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)
1819
AMRNBDecoder(AMRNB::Mode mode) {
1920
setMode(mode);
2021
info.channels = 1;
@@ -74,6 +75,8 @@ class AMRNBDecoder : public AudioDecoder {
7475
/// Provides the frame size (size of decoded frame)
7576
int frameSize() { return amr.getFrameSizeSamples() * sizeof(int16_t); }
7677

78+
operator bool() override { return getOutput() != nullptr; }
79+
7780
protected:
7881
AMRNB amr;
7982
AMRNB::Mode mode;
@@ -91,6 +94,7 @@ class AMRNBDecoder : public AudioDecoder {
9194

9295
class AMRNBEncoder : public AudioEncoder {
9396
public:
97+
/// valid mode values: MR475,MR515,MR59,MR67,MR74,MR795,MR102,MR122 (e.g. AMRNB::Mode::MR475)
9498
AMRNBEncoder(AMRNB::Mode mode) {
9599
setMode(mode);
96100
info.channels = 1;

src/AudioTools/AudioCodecs/CodecAMRWB.h

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#pragma once
2-
#include "AMRWB.h" // https://github.com/pschatzmann/codec-amr
2+
#include "AMRWB.h" // https://github.com/pschatzmann/codec-amr
33
#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
44

55
namespace audio_tools {
@@ -15,6 +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)
1820
AMRWBDecoder(AMRWB::Mode mode) {
1921
setMode(mode);
2022
info.channels = 1;
@@ -47,8 +49,8 @@ class AMRWBDecoder : public AudioDecoder {
4749
if (buffer.isFull()) {
4850
int result_samples = amr.getFrameSizeSamples();
4951
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);
5254
if (size > 0) {
5355
if (getOutput() != nullptr) {
5456
getOutput()->write((uint8_t *)result, size * sizeof(int16_t));
@@ -61,20 +63,18 @@ class AMRWBDecoder : public AudioDecoder {
6163
}
6264

6365
/// Provides the block size (size of encoded frame)
64-
int blickSize() {
65-
return amr.getEncodedFrameSizeBytes();
66-
}
66+
int blickSize() { return amr.getEncodedFrameSizeBytes(); }
6767

6868
/// 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); }
7270

7371
void setMode(AMRWB::Mode mode) {
7472
this->mode = mode;
7573
amr.setMode(mode);
7674
}
7775

76+
operator bool() override { return getOutput() != nullptr; }
77+
7878
protected:
7979
AMRWB amr;
8080
AMRWB::Mode mode;
@@ -92,6 +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)
9597
AMRWBEncoder(AMRWB::Mode mode) {
9698
setMode(mode);
9799
info.channels = 1;
@@ -100,11 +102,11 @@ class AMRWBEncoder : public AudioEncoder {
100102

101103
~AMRWBEncoder() override = default;
102104

103-
void setMode(AMRWB::Mode mode) {
105+
void setMode(AMRWB::Mode mode) {
104106
this->mode = mode;
105107
amr.setMode(mode);
106108
}
107-
109+
108110
bool begin() {
109111
buffer.resize(frameSize());
110112
return getOutput() != nullptr;
@@ -128,9 +130,9 @@ class AMRWBEncoder : public AudioEncoder {
128130
if (buffer.isFull()) {
129131
int result_bytes = blockSize();
130132
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);
134136
if (size > 0) {
135137
if (getOutput() != nullptr) {
136138
getOutput()->write(result, size);
@@ -149,21 +151,19 @@ class AMRWBEncoder : public AudioEncoder {
149151
}
150152

151153
/// 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); }
155155

156156
const char *mime() { return "audio/amr"; }
157157

158158
void setOutput(Print &out_stream) override { p_print = &out_stream; }
159159

160160
Print *getOutput() { return p_print; }
161-
161+
162162
protected:
163163
AMRWB amr;
164164
AMRWB::Mode mode;
165165
SingleBuffer<uint8_t> buffer{0};
166166
Print *p_print = nullptr;
167167
};
168168

169-
} // namespace audio_tools
169+
} // namespace audio_tools

0 commit comments

Comments
 (0)