arduino-audio-tools
Loading...
Searching...
No Matches
AudioSourceIdxSDMMC.h
Go to the documentation of this file.
1#pragma once
2
3#include <FS.h>
4#include <SD_MMC.h>
5#include "AudioLogger.h"
8
9namespace audio_tools {
10
37public:
39 AudioSourceIdxSDMMC(const char *startFilePath = "/", const char *ext = ".mp3", bool setupIndex=true) {
41 exension = ext;
43 }
44
45 virtual bool begin() override {
46 TRACED();
47 if (!is_sd_setup) {
48 if (!SD_MMC.begin("/sdcard", true)) {
49 LOGE("SD_MMC.begin failed");
50 return false;
51 }
52 is_sd_setup = true;
53 }
55 idx_pos = 0;
56 return is_sd_setup;
57 }
58
59 void end() {
60 file.close();
61 SD_MMC.end();
62 is_sd_setup = false;
63 }
64
65 virtual Stream *nextStream(int offset = 1) override {
66 LOGI("nextStream: %d", offset);
67 return selectStream(idx_pos + offset);
68 }
69
70 virtual Stream *selectStream(int index) override {
71 LOGI("selectStream: %d", index);
72 idx_pos = index;
74 if (file_name==nullptr) return nullptr;
75 LOGI("Using file %s", file_name);
76 file.close();
78 return file ? &file : nullptr;
79 }
80
81 virtual Stream *selectStream(const char *path) override {
82 file.close();
83 file = SD_MMC.open(path);
85 LOGI("-> selectStream: %s", path);
86 return file ? &file : nullptr;
87 }
88
91 void setFileFilter(const char *filter) { file_name_pattern = filter; }
92
94 int index() { return idx_pos; }
95
97 const char *toStr() { return file_name; }
98
99 // provides default setting go to the next
100 virtual bool isAutoNext() { return true; }
101
103 virtual void setPath(const char *p) { start_path = p; }
104
106 long size() { return idx.size();}
107
109 int indexOf(const char* filename) {
110 return idx.indexOf(filename);
111 }
112
114 const char* name(int pos) {
115 return idx[pos];
116 }
117
121 }
122
123protected:
126 size_t idx_pos = 0;
127 const char *file_name;
128 const char *exension = nullptr;
129 const char *start_path = nullptr;
130 const char *file_name_pattern = "*";
131 bool setup_index = true;
132 bool is_sd_setup = false;
133};
134
135} // namespace audio_tools
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Definition Arduino.h:136
Abstract Audio Data Source for the AudioPlayer which is used by the Audio Players.
Definition AudioSource.h:17
ESP32 AudioSource for AudioPlayer using an SD card as data source. An index file is used to speed up ...
Definition AudioSourceIdxSDMMC.h:36
int index()
Provides the current index position.
Definition AudioSourceIdxSDMMC.h:94
const char * exension
Definition AudioSourceIdxSDMMC.h:128
long size()
Provides the number of files (The max index is size()-1)
Definition AudioSourceIdxSDMMC.h:106
bool is_sd_setup
Definition AudioSourceIdxSDMMC.h:132
SDIndex< fs::SDMMCFS, fs::File > idx
Definition AudioSourceIdxSDMMC.h:124
virtual Stream * selectStream(int index) override
Definition AudioSourceIdxSDMMC.h:70
virtual bool begin() override
Reset actual stream and move to root.
Definition AudioSourceIdxSDMMC.h:45
File file
Definition AudioSourceIdxSDMMC.h:125
size_t idx_pos
Definition AudioSourceIdxSDMMC.h:126
const char * start_path
Definition AudioSourceIdxSDMMC.h:129
const char * toStr()
provides the actual file name
Definition AudioSourceIdxSDMMC.h:97
const char * file_name
Definition AudioSourceIdxSDMMC.h:127
virtual void setPath(const char *p)
Allows to "correct" the start path if not defined in the constructor.
Definition AudioSourceIdxSDMMC.h:103
virtual bool isAutoNext()
Returns default setting go to the next.
Definition AudioSourceIdxSDMMC.h:100
int indexOf(const char *filename)
Provides the index of the file with the given name.
Definition AudioSourceIdxSDMMC.h:109
virtual Stream * nextStream(int offset=1) override
Returns next audio stream.
Definition AudioSourceIdxSDMMC.h:65
void end()
Definition AudioSourceIdxSDMMC.h:59
bool setup_index
Definition AudioSourceIdxSDMMC.h:131
void setFileFilter(const char *filter)
Definition AudioSourceIdxSDMMC.h:91
AudioSourceIdxSDMMC(const char *startFilePath="/", const char *ext=".mp3", bool setupIndex=true)
Default constructor.
Definition AudioSourceIdxSDMMC.h:39
const char * file_name_pattern
Definition AudioSourceIdxSDMMC.h:130
void setCreateIndex(bool rebuild)
Defines whether the index should be rebuild on begin.
Definition AudioSourceIdxSDMMC.h:119
const char * name(int pos)
Provides the file name for the indicated index.
Definition AudioSourceIdxSDMMC.h:114
virtual Stream * selectStream(const char *path) override
Returns audio stream by path: The index is not changed!
Definition AudioSourceIdxSDMMC.h:81
We store all the relevant file names in an sequential index file. Form there we can access them via a...
Definition SDIndex.h:20
void begin(const char *startDir, const char *extension, const char *file_name_pattern, bool setupIndex=true)
Definition SDIndex.h:23
long size()
Definition SDIndex.h:167
int indexOf(const char *filename)
Find the index of a filename.
Definition SDIndex.h:115
Arduino File API for Zephyr.
Definition ZephyrFile.h:23
void close()
Definition ZephyrFile.h:67
const char * name() const
Definition ZephyrFile.h:200
bool open(const char *file_path, fs_mode_t mode=FS_O_READ)
Definition ZephyrFile.h:44
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:508