arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
AudioSource.h
1#pragma once
2#include "AudioTools/CoreAudio/AudioBasic/Str.h"
3#include "AudioTools/CoreAudio/AudioMetaData/AbstractMetaData.h"
4
5namespace audio_tools {
6
16 public:
18 virtual void begin() = 0;
19
21 virtual Stream* nextStream(int offset) = 0;
22
24 virtual Stream* previousStream(int offset) { return nextStream(-offset); };
25
28 virtual Stream* selectStream(int index) {
29 LOGE("Not Supported!");
30 return nullptr;
31 }
32
34 virtual Stream* setIndex(int index) { return selectStream(index); }
35
37 virtual int index() { return -1; }
38
40 virtual Stream* selectStream(const char* path) = 0;
41
44 virtual void setTimeoutAutoNext(int millisec) {
45 timeout_auto_next_value = millisec;
46 }
47
49 virtual int timeoutAutoNext() { return timeout_auto_next_value; }
50
51 // only the ICYStream supports this
52 virtual bool setMetadataCallback(void (*fn)(MetaDataType info,
53 const char* str, int len),
54 ID3TypeSelection sel = SELECT_ICY) {
55 return false;
56 }
57
59 virtual void setTimeout(int millisec) {};
60
62 virtual bool isAutoNext() { return true; }
63
65 Stream* operator[](int idx) { return setIndex(idx); }
66
68 virtual const char* toStr() { return nullptr; }
69
70 protected:
71 int timeout_auto_next_value = 500;
72};
73
81 public:
83
84 AudioSourceCallback(Stream* (*nextStreamCallback)(int offset),
85 void (*onStartCallback)() = nullptr) {
86 TRACED();
87 this->onStartCallback = onStartCallback;
88 this->nextStreamCallback = nextStreamCallback;
89 }
90
92 virtual void begin() override {
93 TRACED();
94 if (onStartCallback != nullptr) onStartCallback();
95 };
96
99 virtual Stream* nextStream(int offset) override {
100 TRACED();
101 return nextStreamCallback == nullptr ? nullptr : nextStreamCallback(offset);
102 }
103
105 virtual Stream* selectStream(int index) override {
106 LOGI("selectStream: %d", index);
107 if (indexStreamCallback == nullptr) {
108 LOGI("setCallbackSelectStream not provided");
109 if (index > 0) {
110 begin();
111 return nextStream(index);
112 } else {
113 // nextStream(0) will return the directory but we need a file
114 return nextStream(1);
115 }
116 }
117 return indexStreamCallback(index);
118 }
120 virtual Stream* selectStream(const char* path) override {
121 this->path = path;
122 return indexStreamCallback == nullptr ? nullptr : indexStreamCallback(-1);
123 };
124
125 void setCallbackOnStart(void (*callback)()) { onStartCallback = callback; }
126
127 void setCallbackNextStream(Stream* (*callback)(int offset)) {
128 nextStreamCallback = callback;
129 }
130
131 void setCallbackSelectStream(Stream* (*callback)(int idx)) {
132 indexStreamCallback = callback;
133 }
134
135 virtual bool isAutoNext() override { return auto_next; }
136
137 virtual void setAutoNext(bool a) { auto_next = a; }
138
140 virtual const char* getPath() { return path; }
141
142 protected:
143 void (*onStartCallback)() = nullptr;
144 bool auto_next = true;
145 Stream* (*nextStreamCallback)(int offset) = nullptr;
146 Stream* (*indexStreamCallback)(int index) = nullptr;
147 const char* path = nullptr;
148};
149
150} // namespace audio_tools
Callback Audio Data Source which is used by the Audio Players.
Definition AudioSource.h:80
virtual Stream * selectStream(int index) override
Returns selected audio stream.
Definition AudioSource.h:105
virtual void begin() override
Reset actual stream and move to root.
Definition AudioSource.h:92
virtual Stream * nextStream(int offset) override
Definition AudioSource.h:99
virtual const char * getPath()
Returns the requested path: relevant when provided idx in callback is -1.
Definition AudioSource.h:140
virtual bool isAutoNext() override
Returns default setting go to the next.
Definition AudioSource.h:135
virtual Stream * selectStream(const char *path) override
Returns audio stream by path.
Definition AudioSource.h:120
Abstract Audio Data Source for the AudioPlayer which is used by the Audio Players.
Definition AudioSource.h:15
virtual int index()
Returns the actual index of the stream.
Definition AudioSource.h:37
virtual Stream * selectStream(const char *path)=0
Returns audio stream by path.
virtual void setTimeoutAutoNext(int millisec)
Definition AudioSource.h:44
virtual void setTimeout(int millisec)
Sets the timeout of Stream in milliseconds.
Definition AudioSource.h:59
virtual Stream * selectStream(int index)
Definition AudioSource.h:28
virtual Stream * previousStream(int offset)
Returns previous audio stream.
Definition AudioSource.h:24
virtual Stream * setIndex(int index)
same as selectStream - I just prefer this name
Definition AudioSource.h:34
virtual bool isAutoNext()
Returns default setting go to the next.
Definition AudioSource.h:62
virtual void begin()=0
Reset actual stream and move to root.
virtual Stream * nextStream(int offset)=0
Returns next audio stream.
virtual const char * toStr()
provides the actual file name or url
Definition AudioSource.h:68
virtual int timeoutAutoNext()
Provides the timeout which is triggering to move to the next stream.
Definition AudioSource.h:49
Stream * operator[](int idx)
access with array syntax
Definition AudioSource.h:65
Definition NoArduino.h:142
ID3TypeSelection
Enum to filter by type of metadata.
Definition AbstractMetaData.h:8
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