10 char signature[8] = {
'O',
'p',
'u',
's',
'H',
'e',
'a',
'd'};
12 uint8_t channelCount = 0;
13 uint16_t preSkip = 3840;
14 uint32_t sampleRate = 0;
15 int16_t outputGain = 0;
16 uint8_t channelMappingFamily = 0;
21 char signature[8] = {
'O',
'p',
'u',
's',
'T',
'a',
'g',
's'};
22 uint32_t vendorStringLength = 8;
23 char vendor[8] =
"Arduino";
24 uint32_t userCommentListLength = 0;
71 if (op->packet ==
nullptr)
return;
72 if (strncmp(
"OpusHead", (
char *)op->packet, 8) == 0) {
80 }
else if (strncmp(
"OpusTags", (
char *)op->packet, 8) == 0) {
114 LOGE(
"writePacket-header");
126 LOGE(
"writePacket-header1");
137 op.granulepos = granulePosition;
139 op.e_o_s = endOfStream;
146 while ((oggz_write(
p_oggz,
op.bytes)) > 0)
156 header.preSkip = preSkipSamples;
160 ogg_int64_t opusSamples =
161 (ogg_int64_t)(((uint64_t)frameDurationUs * 48000ULL) / 1000000ULL);
169 size_t write(
const uint8_t *data,
size_t len)
override {
170 if (data ==
nullptr)
return 0;
171 LOGD(
"OpusOggWriter::write: %d", (
int)len);
191 ogg_int64_t keptSamples =
223 const char *
mime()
override {
return "audio/ogg;codecs=opus"; }
233 switch (frameDurationMs) {
234 case OPUS_FRAMESIZE_2_5_MS:
237 case OPUS_FRAMESIZE_5_MS:
240 case OPUS_FRAMESIZE_10_MS:
243 case OPUS_FRAMESIZE_20_MS:
246 case OPUS_FRAMESIZE_40_MS:
249 case OPUS_FRAMESIZE_60_MS:
252 case OPUS_FRAMESIZE_80_MS:
255 case OPUS_FRAMESIZE_100_MS:
258 case OPUS_FRAMESIZE_120_MS:
271 if (
p_codec ==
nullptr)
return false;
280 if (lookaheadSamples > 0) {
281 uint32_t preSkipSamples =
282 (uint32_t)(((uint64_t)lookaheadSamples * 48000U) /
297 if (finalSamples <= 0) {
301 ogg_int64_t finalGranuleSamples =
302 (ogg_int64_t)(((uint64_t)finalSamples * 48000ULL) /
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
enum VBanDataTypeList __attribute__