arduino-audio-tools
Loading...
Searching...
No Matches
AudioSourceIdxSDMMC.h
1#pragma once
2
3#include <FS.h>
4#include <SD_MMC.h>
5#include "AudioLogger.h"
6#include "AudioTools/Disk/AudioSource.h"
7#include "AudioTools/Disk/SDIndex.h"
8
9namespace audio_tools {
10
34public:
36 AudioSourceIdxSDMMC(const char *startFilePath = "/", const char *ext = ".mp3", bool setupIndex=true) {
37 start_path = startFilePath;
38 exension = ext;
39 setup_index = setupIndex;
40 }
41
42 virtual void begin() override {
43 TRACED();
44 if (!is_sd_setup) {
45 if (!SD_MMC.begin("/sdcard", true)) {
46 LOGE("SD_MMC.begin failed");
47 return;
48 }
49 is_sd_setup = true;
50 }
51 idx.begin(start_path, exension, file_name_pattern, setup_index);
52 idx_pos = 0;
53 }
54
55 void end() {
56 SD_MMC.end();
57 is_sd_setup = false;
58 }
59
60 virtual Stream *nextStream(int offset = 1) override {
61 LOGI("nextStream: %d", offset);
62 return selectStream(idx_pos + offset);
63 }
64
65 virtual Stream *selectStream(int index) override {
66 LOGI("selectStream: %d", index);
67 idx_pos = index;
68 file_name = idx[index];
69 if (file_name==nullptr) return nullptr;
70 LOGI("Using file %s", file_name);
71 file = SD_MMC.open(file_name);
72 return file ? &file : nullptr;
73 }
74
75 virtual Stream *selectStream(const char *path) override {
76 file.close();
77 file = SD_MMC.open(path);
78 file_name = file.name();
79 LOGI("-> selectStream: %s", path);
80 return file ? &file : nullptr;
81 }
82
85 void setFileFilter(const char *filter) { file_name_pattern = filter; }
86
88 int index() { return idx_pos; }
89
91 const char *toStr() { return file_name; }
92
93 // provides default setting go to the next
94 virtual bool isAutoNext() { return true; }
95
97 virtual void setPath(const char *p) { start_path = p; }
98
100 long size() { return idx.size();}
101
103 int indexOf(const char* filename) {
104 return idx.indexOf(filename);
105 }
106
108 const char* name(int pos) {
109 return idx[pos];
110 }
111
112protected:
114 File file;
115 size_t idx_pos = 0;
116 const char *file_name;
117 const char *exension = nullptr;
118 const char *start_path = nullptr;
119 const char *file_name_pattern = "*";
120 bool setup_index = true;
121 bool is_sd_setup = false;
122};
123
124} // namespace audio_tools
Abstract Audio Data Source for the AudioPlayer which is used by the Audio Players.
Definition AudioSource.h:16
ESP32 AudioSource for AudioPlayer using an SD card as data source. An index file is used to speed up ...
Definition AudioSourceIdxSDMMC.h:33
int index()
Provides the current index position.
Definition AudioSourceIdxSDMMC.h:88
long size()
Provides the number of files (The max index is size()-1)
Definition AudioSourceIdxSDMMC.h:100
virtual Stream * selectStream(int index) override
Definition AudioSourceIdxSDMMC.h:65
virtual void begin() override
Reset actual stream and move to root.
Definition AudioSourceIdxSDMMC.h:42
const char * toStr()
provides the actual file name
Definition AudioSourceIdxSDMMC.h:91
virtual void setPath(const char *p)
Allows to "correct" the start path if not defined in the constructor.
Definition AudioSourceIdxSDMMC.h:97
virtual bool isAutoNext()
Returns default setting go to the next.
Definition AudioSourceIdxSDMMC.h:94
int indexOf(const char *filename)
Provides the index of the file with the given name.
Definition AudioSourceIdxSDMMC.h:103
virtual Stream * nextStream(int offset=1) override
Returns next audio stream.
Definition AudioSourceIdxSDMMC.h:60
void setFileFilter(const char *filter)
Definition AudioSourceIdxSDMMC.h:85
AudioSourceIdxSDMMC(const char *startFilePath="/", const char *ext=".mp3", bool setupIndex=true)
Default constructor.
Definition AudioSourceIdxSDMMC.h:36
const char * name(int pos)
Provides the file name for the indicated index.
Definition AudioSourceIdxSDMMC.h:108
virtual Stream * selectStream(const char *path) override
Returns audio stream by path: The index is not changed!
Definition AudioSourceIdxSDMMC.h:75
We store all the relevant file names in an sequential index file. Form there we can access them via a...
Definition SDIndex.h:20
int indexOf(const char *filename)
Find the index of a filename.
Definition SDIndex.h:99
Definition NoArduino.h:142
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10