arduino-audio-tools
Loading...
Searching...
No Matches
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/Communication/HTTP/AbstractURLStream.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
46 virtual void begin(AbstractURLStream &url) {
47 TRACED();
48 ICYUrlSetup icySetup;
49 int metaInt = icySetup.setup(url);
50 icySetup.executeCallback(callback);
51 begin(metaInt);
52 }
53
55 virtual void begin(int iceMetaint=0) {
56 LOGD("%s: %d", LOG_METHOD, iceMetaint);
57 if (callback!=nullptr){
58 if (meta == nullptr) {
59#if defined(USE_URL_ARDUINO)
60 meta = (iceMetaint > 0) ? new MetaDataICY() : (AbstractMetaData *) new MetaDataID3();
61#else
62 meta = new MetaDataID3();
63#endif
64 }
65 meta->setCallback(callback);
66 meta->setIcyMetaInt(iceMetaint);
67 meta->begin();
68 } else {
69 LOGI("callback not defined -> not Metadata processing")
70 }
71 }
72
73 virtual void end() {
74 if (callback!=nullptr && meta != nullptr) {
75 TRACED();
76 meta->end();
77 }
78 }
79
81 virtual size_t write(const uint8_t *data, size_t len){
82 LOGD("%s: %d", LOG_METHOD, (int)len);
83
84 if (callback!=nullptr){
85 if (meta!=nullptr){
86 //CHECK_MEMORY();
87 if (meta->write(data, len)!=len){
88 LOGE("Did not write all data");
89 }
90 //CHECK_MEMORY();
91 } else {
92 LOGW("meta is null");
93 }
94 }
95 return len;
96 }
97
98 virtual size_t write(uint8_t c) {
99 LOGE("Not Supported");
100 return 0;
101 }
102
103 protected:
104 AbstractMetaData *meta=nullptr;
105 void (*callback)(MetaDataType info, const char* str, int len)=nullptr;
106
107};
108
109
110}
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:25
Resolve icy-metaint from HttpRequest and execute metadata callbacks.
Definition MetaDataICY.h:236
int setup(AbstractURLStream &url)
Definition MetaDataICY.h:240
void executeCallback(void(*callback)(MetaDataType info, const char *str, int len))
Definition MetaDataICY.h:256
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:569
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:46
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:81
virtual void begin(int iceMetaint=0)
Starts the processing - if iceMetaint is defined we use icecast.
Definition MetaData.h:55
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