arduino-audio-tools
Loading...
Searching...
No Matches
MP3Parser.h
1#pragma once
2#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
3#include "AudioTools/AudioCodecs/HeaderParserMP3.h"
4
5namespace audio_tools {
6
7/***
8 * @brief Parses MP3 frames, extracts audio info, and outputs complete frames.
9 * The frame duration is determined e.g. for RTSP streaming.
10 * @ingroup codecs
11 * @author Phil Schatzmann
12 * @copyright GPLv3
13 */
14
16 public:
17 MP3ParserEncoder(int bufferSize = 1024 * 2) { buffer_size = bufferSize; }
18 bool begin() override {
19 TRACEI();
20 mp3.resize(buffer_size); // 10KB buffer
21 mp3.reset();
22 return true;
23 }
24
25 void end() override {
26 TRACEI();
27 mp3.flush();
28 mp3.reset();
29 mp3.resize(0);
30 }
31
32 size_t write(const uint8_t* data, size_t len) override {
33 LOGI("write: %d", (int)len);
34 return mp3.write(data, len);
35 }
36
37 void setOutput(Print& out_stream) override {
38 TRACEI();
39 AudioEncoder::setOutput(out_stream);
40 mp3.setOutput(out_stream);
41 }
42
43 AudioInfo audioInfo() override {
44 AudioInfo info;
45 info.sample_rate = mp3.getSampleRate();
46 info.channels = mp3.getChannels();
47 info.bits_per_sample = 16;
48 return info;
49 }
50
51 uint32_t frameDurationUs() override { return mp3.getTimePerFrameMs() * 1000; }
52
53 uint16_t samplesPerFrame() override { return mp3.getSamplesPerFrame(); }
54
55 operator bool() override { return true; }
56
57 virtual const char* mime() override { return "audio/mpeg"; }
58
59 protected:
61 int buffer_size = 0;
62};
63
64} // namespace audio_tools
Encoding of PCM data.
Definition AudioCodecsBase.h:97
virtual void setOutput(Print &out_stream) override
Default output assignment (encoders may override to store Print reference)
Definition AudioCodecsBase.h:109
MP3 header parser that processes MP3 data incrementally and extracts complete MP3 frames....
Definition HeaderParserMP3.h:25
int getChannels() const
Number of channels from mp3 header.
Definition HeaderParserMP3.h:416
uint16_t getSampleRate() const
Sample rate from mp3 header.
Definition HeaderParserMP3.h:406
size_t getTimePerFrameMs()
playing time per frame in ms
Definition HeaderParserMP3.h:460
void reset()
Clears internal buffer and resets state.
Definition HeaderParserMP3.h:484
int getSamplesPerFrame()
number of samples per mp3 frame
Definition HeaderParserMP3.h:453
size_t write(const uint8_t *data, size_t len)
split up the data into mp3 segements and write to output
Definition HeaderParserMP3.h:194
Definition MP3Parser.h:15
void setOutput(Print &out_stream) override
Default output assignment (encoders may override to store Print reference)
Definition MP3Parser.h:37
uint16_t samplesPerFrame() override
Optioinal rtsp function: provide samples per the frame.
Definition MP3Parser.h:53
virtual const char * mime() override
Provides the mime type of the encoded result.
Definition MP3Parser.h:57
uint32_t frameDurationUs() override
Optioinal rtsp function: provide the frame duration in microseconds.
Definition MP3Parser.h:51
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition MP3Parser.h:43
Definition NoArduino.h:62
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:53
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:55
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:57
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:59