arduino-audio-tools
Loading...
Searching...
No Matches
CodecMP3MAD.h
Go to the documentation of this file.
1#pragma once
2
3#define MINIMP3_IMPLEMENTATION
4#define MINIMP3_NO_STDIO
5#define LOGGING_ACTIVE true
6
7#include "Stream.h"
9#include "MP3DecoderMAD.h"
10
11
12namespace audio_tools {
13
14// forward audio changes
16
25 public:
26
28 TRACED();
29 mad = new libmad::MP3DecoderMAD();
30 }
31
32 MP3DecoderMAD(libmad::MP3DataCallback dataCallback, libmad::MP3InfoCallback infoCB=nullptr){
33 TRACED();
34 mad = new libmad::MP3DecoderMAD(dataCallback, infoCB);
35 }
36
37 MP3DecoderMAD(Print &mad_output_streamput, libmad::MP3InfoCallback infoCB = nullptr){
38 TRACED();
39 mad = new libmad::MP3DecoderMAD(mad_output_streamput, infoCB);
40 }
41
43 TRACED();
44 delete mad;
45 }
46
47 const char *mime() override { return "audio/mpeg"; }
48
49 void setOutput(Print &out) override {
50 TRACED();
51 mad->setOutput(out);
52 }
53
55 void setAudioDataCallback(libmad::MP3DataCallback cb){
56 TRACED();
57 mad->setDataCallback(cb);
58 }
59
61 void setInfoCallback(libmad::MP3InfoCallback cb){
62 TRACED();
63 mad->setInfoCallback(cb);
64 }
65
67 bool begin() override {
68 TRACED();
69 mad->begin();
70 return true;
71 }
72
74 void end() override{
75 TRACED();
76 mad->end();
77 }
78
80 libmad::MadAudioInfo audioInfoEx(){
81 TRACED();
82 return mad->audioInfo();
83 }
84
85 AudioInfo audioInfo() override {
86 TRACED();
87 libmad::MadAudioInfo info = audioInfoEx();
88 AudioInfo base;
89 base.channels = info.channels;
92 return base;
93 }
94
96 size_t write(const uint8_t *data, size_t len) override {
97 TRACED();
98 return mad->write(data,len);
99 }
100
102 size_t write(void *data, size_t len){
103 TRACED();
104 return mad->write(data,len);
105 }
106
108 operator bool() override{
109 return (bool)*mad;
110 }
111
112 libmad::MP3DecoderMAD *driver() {
113 return mad;
114 }
115
116 static void audioChangeCallback(libmad::MadAudioInfo &info){
117 if (audioChangeMAD!=nullptr){
118 TRACED();
119 AudioInfo base;
120 base.channels = info.channels;
123 // notify audio change
125 }
126 }
127
128 virtual void addNotifyAudioChange(AudioInfoSupport &bi) override {
129 TRACED();
130 audioChangeMAD = &bi;
131 // register audio change handler
132 mad->setInfoCallback(audioChangeCallback);
133 }
134
135 protected:
136 libmad::MP3DecoderMAD *mad;
137
138};
139
140} // namespace
141
142
#define TRACED()
Definition AudioLoggerIDF.h:31
Definition Arduino.h:56
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:19
AudioInfo info
Definition AudioCodecsBase.h:80
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:132
virtual void setAudioInfo(AudioInfo info)=0
Defines the input AudioInfo.
MP3 Decoder using https://github.com/pschatzmann/arduino-libmad.
Definition CodecMP3MAD.h:24
void setOutput(Print &out) override
Defines where the decoded result is written to.
Definition CodecMP3MAD.h:49
virtual void addNotifyAudioChange(AudioInfoSupport &bi) override
Adds target to be notified about audio changes.
Definition CodecMP3MAD.h:128
static void audioChangeCallback(libmad::MadAudioInfo &info)
Definition CodecMP3MAD.h:116
void setInfoCallback(libmad::MP3InfoCallback cb)
Defines the callback which receives the Info changes.
Definition CodecMP3MAD.h:61
void end() override
Releases the reserved memory.
Definition CodecMP3MAD.h:74
size_t write(void *data, size_t len)
Makes the mp3 data available for decoding: however we recommend to provide the data via a callback or...
Definition CodecMP3MAD.h:102
size_t write(const uint8_t *data, size_t len) override
Makes the mp3 data available for decoding: however we recommend to provide the data via a callback or...
Definition CodecMP3MAD.h:96
libmad::MP3DecoderMAD * mad
Definition CodecMP3MAD.h:136
~MP3DecoderMAD()
Definition CodecMP3MAD.h:42
const char * mime() override
Provides the mime type of the data that is expected by this decoder.
Definition CodecMP3MAD.h:47
void setAudioDataCallback(libmad::MP3DataCallback cb)
Defines the callback which receives the decoded data.
Definition CodecMP3MAD.h:55
libmad::MP3DecoderMAD * driver()
Definition CodecMP3MAD.h:112
bool begin() override
Starts the processing.
Definition CodecMP3MAD.h:67
MP3DecoderMAD(libmad::MP3DataCallback dataCallback, libmad::MP3InfoCallback infoCB=nullptr)
Definition CodecMP3MAD.h:32
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition CodecMP3MAD.h:85
libmad::MadAudioInfo audioInfoEx()
Provides the last valid audio information.
Definition CodecMP3MAD.h:80
MP3DecoderMAD()
Definition CodecMP3MAD.h:27
MP3DecoderMAD(Print &mad_output_streamput, libmad::MP3InfoCallback infoCB=nullptr)
Definition CodecMP3MAD.h:37
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
static AudioInfoSupport * audioChangeMAD
Definition CodecMP3MAD.h:15
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:51
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:53
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:55
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:57