arduino-audio-tools
Loading...
Searching...
No Matches
CodecOpusOgg.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace audio_tools {
7
10 char signature[8] = {'O', 'p', 'u', 's', 'H', 'e', 'a', 'd'};
11 uint8_t version = 1;
12 uint8_t channelCount = 0;
13 uint16_t preSkip = 3840;
14 uint32_t sampleRate = 0;
17};
18
21 char signature[8] = {'O', 'p', 'u', 's', 'T', 'a', 'g', 's'};
23 char vendor[8] = "Arduino";
25};
26
39 public:
41 p_codec = &dec; // OpusAudioDecoder
43 };
44
46 OpusSettings &config() { return dec.config(); }
47
48 bool begin(OpusSettings settings) {
50 return dec.begin(settings);
51 }
52
53 bool begin() override {
54 TRACED();
56 return dec.begin();
57 }
58
59 void end() override {
60 TRACED();
62 dec.end();
63 }
64
65 protected:
68
69 virtual void beginOfSegment(ogg_packet *op) override {
70 LOGD("bos");
71 if (op->packet == nullptr) return;
72 if (strncmp("OpusHead", (char *)op->packet, 8) == 0) {
73 memmove(&header, (char *)op->packet, sizeof(header));
75 info.sample_rate = header.sampleRate;
76 info.channels = header.channelCount;
78 info.logInfo();
80 } else if (strncmp("OpusTags", (char *)op->packet, 8) == 0) {
81 // not processed
82 }
83 }
84};
85
87 protected:
91
92 bool writeHeader() override {
93 LOGI("writeHeader");
94 bool result = true;
95 header.sampleRate = cfg.sample_rate;
96 header.channelCount = cfg.channels;
97 // write header
98 oh.packet = (uint8_t *)&header;
99 oh.bytes = sizeof(header);
100 oh.granulepos = 0;
101 oh.packetno = packetno++;
102 oh.b_o_s = true;
103 oh.e_o_s = false;
104 if (!writePacket(oh)) {
105 result = false;
106 LOGE("writePacket-header");
107 }
108
109 // write comment header
110 oh1.packet = (uint8_t *)&comment;
111 oh1.bytes = sizeof(comment);
112 oh1.granulepos = 0;
113 oh1.packetno = packetno++;
114 oh1.b_o_s = true;
115 oh1.e_o_s = false;
117 result = false;
118 LOGE("writePacket-header1");
119 }
120 TRACED();
121 return result;
122 }
123};
124
135 public:
140
142 const char *mime() override { return "audio/ogg;codecs=opus"; }
143
146
149 // Get frame duration from encoder settings
152 switch (frameDurationMs) {
154 frameDurationUs = 2500;
155 break;
157 frameDurationUs = 5000;
158 break;
160 frameDurationUs = 10000;
161 break;
163 frameDurationUs = 20000;
164 break;
165 }
166 return frameDurationUs;
167 }
168
169 protected:
170 // use custom writer
172 // use opus encoder
174};
175
177
178} // namespace audio_tools
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
AudioInfo info
Definition AudioCodecsBase.h:76
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition AudioCodecsBase.h:28
AudioInfo cfg
Definition AudioOutput.h:88
void setDecoder(AudioDecoder *decoder)
Definition AudioEncoded.h:141
Decoder for Ogg Container. Decodes a packet from an Ogg container. The Ogg begin segment contains the...
Definition ContainerOgg.h:26
void end() override
Definition ContainerOgg.h:88
EncodedAudioOutput out
Definition ContainerOgg.h:124
AudioDecoder * p_codec
Definition ContainerOgg.h:126
bool begin() override
Definition ContainerOgg.h:62
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition ContainerOgg.h:54
Encoder for Ogg Container. Encodes a packet for an Ogg container. The Ogg begin segment contains the ...
Definition ContainerOgg.h:350
void setEncoder(AudioEncoder *enc)
Definition ContainerOgg.h:415
void setOggOutput(OggContainerOutput *out)
Replace the ogg output class.
Definition ContainerOgg.h:418
Output class for the OggContainerEncoder. Each write is ending up as container entry.
Definition ContainerOgg.h:209
ogg_packet oh
Definition ContainerOgg.h:283
virtual bool writePacket(ogg_packet &op, int flag=0)
Definition ContainerOgg.h:289
size_t packetno
Definition ContainerOgg.h:285
Decoder for the Opus audio format. Each Opus frame must be provided with one write() call....
Definition CodecOpus.h:121
bool begin(OpusSettings settings)
Definition CodecOpus.h:147
void end() override
Definition CodecOpus.h:180
OpusSettings & config()
Provides access to the configuration.
Definition CodecOpus.h:144
Encode for Opus audio.
Definition CodecOpus.h:260
OpusEncoderSettings & config()
Provides access to the configuration.
Definition CodecOpus.h:300
Opus Decoder which uses the Ogg Container. See https://datatracker.ietf.org/doc/html/rfc7845....
Definition CodecOpusOgg.h:38
OpusOggHeader header
Definition CodecOpusOgg.h:66
bool begin(OpusSettings settings)
Definition CodecOpusOgg.h:48
OpusOggDecoder()
Definition CodecOpusOgg.h:40
OpusAudioDecoder dec
Definition CodecOpusOgg.h:67
void end() override
Definition CodecOpusOgg.h:59
OpusSettings & config()
Provides access to the Opus configuration.
Definition CodecOpusOgg.h:46
bool begin() override
Definition CodecOpusOgg.h:53
virtual void beginOfSegment(ogg_packet *op) override
Definition CodecOpusOgg.h:69
Opus Encoder which uses the Ogg Container: see https://datatracker.ietf.org/doc/html/rfc7845 Dependen...
Definition CodecOpusOgg.h:134
OpusOggEncoder()
Definition CodecOpusOgg.h:136
OpusEncoderSettings & config()
Provides access to the Opus config.
Definition CodecOpusOgg.h:145
OpusAudioEncoder enc
Definition CodecOpusOgg.h:173
const char * mime() override
Provides "audio/opus".
Definition CodecOpusOgg.h:142
OpusOggWriter ogg_writer
Definition CodecOpusOgg.h:171
uint32_t frameDurationUs() override
provides the frame duration in us (e.g. for RTSP)
Definition CodecOpusOgg.h:148
Definition CodecOpusOgg.h:86
bool writeHeader() override
Definition CodecOpusOgg.h:92
OpusOggHeader header
Definition CodecOpusOgg.h:88
ogg_packet oh1
Definition CodecOpusOgg.h:90
OpusOggCommentHeader comment
Definition CodecOpusOgg.h:89
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:55
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:57
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:59
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:61
virtual void logInfo(const char *source="")
Definition AudioTypes.h:125
Setting for Opus Encoder where the following values are valid: -1 indicates that the default value sh...
Definition CodecOpus.h:68
int frame_sizes_ms_x2
OPUS_FRAMESIZE_2_5_MS,OPUS_FRAMESIZE_5_MS,OPUS_FRAMESIZE_10_MS,OPUS_FRAMESIZE_20_MS,...
Definition CodecOpus.h:105
Setting for Opus Decoder.
Definition CodecOpus.h:22
enum VBanDataTypeList __attribute__