22
22
#include " flashloader.h"
23
23
24
24
namespace newdigate {
25
- /*
25
+
26
26
audiosample * flashloader::loadSample (const char *filename ) {
27
27
Serial.printf (" Reading %s\n " , filename);
28
28
// unsigned s = ((-_lastPointer) % 512)-4;
29
29
// Serial.printf("Align size: %x\n", s);
30
30
// auto* align = (unsigned*)extmem_malloc (s);
31
31
32
+ File f = SD.open (filename, O_READ);
33
+ if (f) {
34
+ uint64_t size = f.size ();
35
+ // uint mod = size % 1024;
36
+ // size = size + mod;
37
+ if (f.size () < _bytes_available) {
38
+ noInterrupts ();
39
+ uint32_t total_read = 0 ;
40
+ auto *data = (uint32_t *)extmem_malloc ( size );
41
+ memset (data, 0 , size);
42
+
43
+ int8_t *index = (int8_t *)data + 4 ;
44
+ while (f.available ()) {
45
+ size_t bytesRead = f.read (index , flashloader_default_sd_buffer_size);
46
+ if (bytesRead == -1 )
47
+ break ;
48
+ total_read += bytesRead;
49
+ index += bytesRead;
50
+ }
51
+ interrupts ();
52
+ _bytes_available -= total_read;
53
+
54
+ audiosample *sample = new audiosample ();
55
+ sample->sampledata = (int16_t *)data;
56
+ sample->samplesize = f.size ();
57
+
58
+ return sample;
59
+ }
60
+ }
61
+
62
+ Serial.printf (" not found %s\n " , filename);
63
+ return nullptr ;
64
+ }
65
+
66
+ audiosample * flashloader::loadSampleWav (const char *filename ) {
67
+ Serial.printf (" Reading %s\n " , filename);
68
+ // unsigned s = ((-_lastPointer) % 512)-4;
69
+ // Serial.printf("Align size: %x\n", s);
70
+ // auto* align = (unsigned*)extmem_malloc (s);
71
+
32
72
File f = SD.open (filename, O_READ);
33
73
if (f) {
34
74
uint64_t size = f.size ();
@@ -38,9 +78,9 @@ namespace newdigate {
38
78
noInterrupts ();
39
79
uint32_t total_read = 0 ;
40
80
auto *data = (uint32_t *)extmem_malloc ( size + 4 );
41
- //_lastPointer = (uint32_t)data;
42
81
memset (data, 0 , size + 4 );
43
- data[0] = (01 << 24) | size; // format == 01 PCM
82
+ // data[0] = (01 << 24) | size; // format == 01 PCM
83
+ data[0 ] = (0x81 << 24 ) | (size / 2 ); // format == 01 PCM
44
84
45
85
int8_t *index = (int8_t *)data + 4 ;
46
86
while (f.available ()) {
@@ -57,17 +97,16 @@ namespace newdigate {
57
97
audiosample *sample = new audiosample ();
58
98
sample->sampledata = (int16_t *)data;
59
99
sample->samplesize = f.size ();
60
-
100
+ /*
61
101
Serial.printf("\tsample start %x\n", (uint32_t)data);
62
102
Serial.printf("\tsample size %d\n", sample->samplesize);
63
103
Serial.printf("\tavailable: %d\n", _bytes_available);
64
-
104
+ */
65
105
return sample;
66
106
}
67
107
}
68
108
69
109
Serial.printf (" not found %s\n " , filename);
70
110
return nullptr ;
71
111
}
72
- */
73
112
}
0 commit comments