arduino-audio-tools
Loading...
Searching...
No Matches
CodecMP3LAME.h
Go to the documentation of this file.
1#pragma once
2
4#include "MP3EncoderLAME.h"
5
6namespace audio_tools {
7
13struct AudioInfoLAME : public liblame::AudioInfo {
15 sample_rate = 44100;
16 channels = 2;
17 bits_per_sample = 16;
18 };
19 AudioInfoLAME (const AudioInfoLAME &) = default;
20
21 int quality = 7; // 0..9. 0=best (very slow). 9=worst.
22};
23
33
34public:
36 TRACED();
37 }
38
43
45 TRACED();
46 end();
47 }
48
51 TRACED();
53 if (enc!=nullptr){
54 enc->setOutput(out_stream);
55 }
56 }
57
60 TRACED();
62 lame_info.channels = from.channels;
63 lame_info.sample_rate = from.sample_rate;
64 lame_info.bits_per_sample = from.bits_per_sample;
65 }
66
69 TRACED();
70 lame_info = from;
71 }
72
73 bool begin(AudioInfoLAME from) {
74 setAudioInfo(from);
75 return begin();
76 }
77
78 // starts the processing
79 bool begin() {
80 createEnc();
81 if (enc==nullptr) return false;
82 enc->begin();
83 return true;
84 }
85
86
90
95
96 // convert PCM data to convert into MP3
97 size_t write(const uint8_t *data, size_t len){
98 if (enc==nullptr) return 0;
99 LOGD("write %d bytes", (int) len);
100 return enc->write((uint8_t*)data, len);
101 }
102
103 // release resources
104 void end(){
105 TRACED();
106 if (enc!=nullptr){
107 enc->end();
108 delete enc;
109 enc = nullptr;
110 }
111 }
112
113 liblame::MP3EncoderLAME *driver() {
114 return enc;
115 }
116
117 const char *mime() {
118 return "audio/mp3";
119 }
120
121 virtual operator bool() {
122 return enc!=nullptr && (bool)(*enc);
123 }
124
125protected:
126 liblame::MP3EncoderLAME *enc=nullptr;
128 Print *p_print=nullptr;
129
130 // Create enc only at begin so that we can use psram
131 void createEnc(){
132 TRACED();
133 if (enc==nullptr){
134 enc = new liblame::MP3EncoderLAME();
135 if (p_print!=nullptr){
137 } else {
138 LOGE("Output undefined");
139 }
140 LOGI("LibLAME channels: %d", lame_info.channels);
141 LOGI("LibLAME sample_rate: %d", lame_info.sample_rate);
142 LOGI("LibLAME bits_per_sample: %d", lame_info.bits_per_sample);
143 LOGI("LibLAME quality: %d", lame_info.quality);
144 enc->setAudioInfo(lame_info);
145 }
146 }
147
148};
149
150}
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Encoding of PCM data.
Definition AudioCodecsBase.h:97
void setAudioInfo(AudioInfo from) override
Defines the sample rate, number of channels and bits per sample.
Definition AudioCodecsBase.h:106
Encodes PCM data to the MP3 format and writes the result to a stream This is basically just a wrapper...
Definition CodecMP3LAME.h:32
bool begin(AudioInfoLAME from)
Definition CodecMP3LAME.h:73
~MP3EncoderLAME()
Definition CodecMP3LAME.h:44
MP3EncoderLAME(Print &out_stream)
Definition CodecMP3LAME.h:39
liblame::MP3EncoderLAME * driver()
Definition CodecMP3LAME.h:113
bool begin()
Definition CodecMP3LAME.h:79
AudioInfoLAME & audioInfoExt()
Definition CodecMP3LAME.h:87
const char * mime()
Provides the mime type of the encoded result.
Definition CodecMP3LAME.h:117
void setAudioInfo(AudioInfoLAME from)
Defines the Audio Info.
Definition CodecMP3LAME.h:68
void createEnc()
Definition CodecMP3LAME.h:131
liblame::MP3EncoderLAME * enc
Definition CodecMP3LAME.h:126
void setAudioInfo(AudioInfo from)
Defines the Audio Info.
Definition CodecMP3LAME.h:59
MP3EncoderLAME()
Definition CodecMP3LAME.h:35
AudioInfoLAME defaultConfig()
Definition CodecMP3LAME.h:91
void setOutput(Print &out_stream)
Defines the output stream.
Definition CodecMP3LAME.h:50
void end()
Definition CodecMP3LAME.h:104
AudioInfoLAME lame_info
Definition CodecMP3LAME.h:127
Print * p_print
Definition CodecMP3LAME.h:128
size_t write(const uint8_t *data, size_t len)
Definition CodecMP3LAME.h:97
Definition NoArduino.h:62
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
LAME parameters.
Definition CodecMP3LAME.h:13
AudioInfoLAME(const AudioInfoLAME &)=default
AudioInfoLAME()
Definition CodecMP3LAME.h:14
int quality
Definition CodecMP3LAME.h:21