arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
MetaData.h
1#pragma once
2#include <stdlib.h>
3#include "AudioToolsConfig.h"
4#include "AudioTools/CoreAudio/AudioTypes.h"
5#include "AudioTools/CoreAudio/AudioStreams.h"
6#include "AudioTools/CoreAudio/AudioHttp/HttpRequest.h"
7#include "AudioTools/CoreAudio/AudioMetaData/MetaDataFilter.h"
8#include "MetaDataICY.h"
9#include "MetaDataID3.h"
10
17namespace audio_tools {
18
28 public:
29
30 MetaDataOutput() = default;
31 MetaDataOutput(MetaDataOutput const&) = delete;
32 MetaDataOutput& operator=(MetaDataOutput const&) = delete;
33
35 end();
36 if (meta!=nullptr) delete meta;
37 }
38
40 virtual void setCallback(void (*fn)(MetaDataType info, const char* str, int len)) {
41 TRACED();
42 callback = fn;
43 }
44
45#ifdef USE_URL_ARDUINO
46
48 virtual void begin(AbstractURLStream &url) {
49 TRACED();
50 ICYUrlSetup icySetup;
51 int metaInt = icySetup.setup(url);
52 icySetup.executeCallback(callback);
53 begin(metaInt);
54 }
55#endif
56
58 virtual void begin(int iceMetaint=0) {
59 LOGD("%s: %d", LOG_METHOD, iceMetaint);
60 if (callback!=nullptr){
61 if (meta == nullptr) {
62#if defined(USE_URL_ARDUINO)
63 meta = (iceMetaint > 0) ? new MetaDataICY() : (AbstractMetaData *) new MetaDataID3();
64#else
65 meta = new MetaDataID3();
66#endif
67 }
68 meta->setCallback(callback);
69 meta->setIcyMetaInt(iceMetaint);
70 meta->begin();
71 } else {
72 LOGI("callback not defined -> not Metadata processing")
73 }
74 }
75
76 virtual void end() {
77 if (callback!=nullptr && meta != nullptr) {
78 TRACED();
79 meta->end();
80 }
81 }
82
84 virtual size_t write(const uint8_t *data, size_t len){
85 LOGD("%s: %d", LOG_METHOD, (int)len);
86
87 if (callback!=nullptr){
88 if (meta!=nullptr){
89 //CHECK_MEMORY();
90 if (meta->write(data, len)!=len){
91 LOGE("Did not write all data");
92 }
93 //CHECK_MEMORY();
94 } else {
95 LOGW("meta is null");
96 }
97 }
98 return len;
99 }
100
101 virtual size_t write(uint8_t c) {
102 LOGE("Not Supported");
103 return 0;
104 }
105
106 protected:
107 AbstractMetaData *meta=nullptr;
108 void (*callback)(MetaDataType info, const char* str, int len)=nullptr;
109
110};
111
112
113}
Common Metadata methods.
Definition AbstractMetaData.h:34
Abstract Base class for all URLStream implementations.
Definition AbstractURLStream.h:17
Abstract Audio Ouptut class.
Definition AudioOutput.h:22
Resolve icy-metaint from HttpRequest and execute metadata callbacks.
Definition MetaDataICY.h:235
int setup(AbstractURLStream &url)
Definition MetaDataICY.h:239
void executeCallback(void(*callback)(MetaDataType info, const char *str, int len))
Definition MetaDataICY.h:255
Icecast/Shoutcast Metadata Handling. Metadata class which splits the data into audio and metadata....
Definition MetaDataICY.h:25
Simple ID3 Meta Data Parser which supports ID3 V1 and V2 and implements the Stream interface....
Definition MetaDataID3.h:559
ID3 and Icecast/Shoutcast metadata output support. Just write the audio data to an object of this cla...
Definition MetaData.h:27
virtual void begin(AbstractURLStream &url)
Starts the processing - iceMetaint is determined from the HttpRequest.
Definition MetaData.h:48
virtual size_t write(const uint8_t *data, size_t len)
Provide tha audio data to the API to parse for Meta Data.
Definition MetaData.h:84
virtual void begin(int iceMetaint=0)
Starts the processing - if iceMetaint is defined we use icecast.
Definition MetaData.h:58
virtual void setCallback(void(*fn)(MetaDataType info, const char *str, int len))
Defines the callback.
Definition MetaData.h:40
MetaDataType
Type of meta info.
Definition AbstractMetaData.h:11
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10