#include <Audio.h>
// GUItool: begin automatically generated code
AudioPlaySdWav playWav; //xy=154,422
AudioOutputI2S i2s1; //xy=334,89
AudioConnection patchCord3(playWav, 0, i2s1, 0);
AudioConnection patchCord4(playWav, 1, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=240,153
// GUItool: end automatically generated code
float volume = 0.7f;
char filename[256] = "2001/stop.wav";
#define Serial Serial
FS *myfs;
File dataFile, myFile; // Specifes that dataFile is of File type
//=============================================================================
// SD classes
//=============================================================================
#include <SD.h>
#define USE_BUILTIN_SDCARD
#if defined(USE_BUILTIN_SDCARD) && defined(BUILTIN_SDCARD)
#define CS_SD BUILTIN_SDCARD
#else
#define CS_SD 10
#endif
// SDClasses
// edit SPI to reflect your configuration (following is for T4.1)
#define SD_MOSI 11
#define SD_MISO 12
#define SD_SCK 13
#define SPI_SPEED SD_SCK_MHZ(16) // adjust to sd card
SDClass sd;
void storage_configure()
{
DateTimeFields date;
breakTime(Teensy3Clock.get(), date);
const char *monthname[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
Serial.printf("Date: %u %s %u %u:%u:%u\n",
date.mday, monthname[date.mon], date.year + 1900, date.hour, date.min, date.sec);
#if defined SD_SCK
SPI.setMOSI(SD_MOSI);
SPI.setMISO(SD_MISO);
SPI.setSCK(SD_SCK);
#endif
if (!sd.begin(CS_SD))
{
Serial.printf("SD Failed to start"); Serial.println();
pinMode(LED_BUILTIN, OUTPUT);
for (;;) {
digitalWriteFast(LED_BUILTIN, HIGH);
delay(100);
digitalWriteFast(LED_BUILTIN, LOW);
delay(100);
digitalWriteFast(LED_BUILTIN, HIGH);
delay(100);
digitalWriteFast(LED_BUILTIN, LOW);
delay(500);
}
}
}
void setup()
{
// Open serial communications and wait for port to open
while (!Serial && millis() < 5000) ;
if (CrashReport) Serial.print(CrashReport);
Serial.println("\n" __FILE__ " " __DATE__ " " __TIME__);
delay(3000);
//Setup Audio
// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(40);
sgtl5000_1.enable();
sgtl5000_1.volume(volume);
storage_configure();
Serial.println("\nSetup done");
}
void loop()
{
listFiles();
while (Serial.read() != -1) ;
Serial.println("Press any key to play a wave file\n");
int ch;
while ((ch = Serial.read()) == -1) ;
if (ch >= ' ') {
char *psz = filename;
while (ch >= ' ') {
*psz++ = ch;
ch = Serial.read();
}
*psz = '\0';
}
while (Serial.read() != -1) ;
Serial.printf("Playing %s\n", filename);
int errAudio = playWav.play(&sd, filename);
if (errAudio != 0) {
Serial.printf("Audio Error: %d\n", errAudio);
}
delay(5);
while (playWav.isPlaying()) {
if (Serial.available()) {
Serial.println("User Abort");
break;
}
delay(250);
}
playWav.stop();
Serial.println("Done.");
}
void listFiles()
{
/*
Serial.print("\n Space Used = ");
Serial.println(sd.usedSize());
Serial.print("Filesystem Size = ");
Serial.println(sd.totalSize());
*/
printDirectory(&sd);
}
void printDirectory(FS * pfs) {
Serial.println("Directory\n---------");
printDirectory(pfs->open("/"), 0);
Serial.println();
}
void printDirectory(File dir, int numSpaces) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
//Serial.println("** no more files **");
break;
}
printSpaces(numSpaces);
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numSpaces + 2);
} else {
// files have sizes, directories do not
printSpaces(36 - numSpaces - strlen(entry.name()));
Serial.print(" ");
Serial.println(entry.size(), DEC);
}
entry.close();
}
If I run it on TMod I see:
[CODE]
C:\Users\kurte\Documents\Arduino\Teensy Tests\audio_sd_wave_test\audio_sd_wave_test.ino Dec 4 2021 12:33:36
Date: 4 Dec 2021 12:34:15
<<<SdioCard::readSector(0, 20003c6c) NOT DMA
<<<SdioCard::readSector(8192, 20003c6c) NOT DMA
<<<SdioCard::readSector(0, 20003a84) NOT DMA
<<<SdioCard::readSector(8192, 20003a84) NOT DMA
Setup done
Directory
---------
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
System Volume Information/
<<<SdioCard::readSector(24640, 20003a84) NOT DMA
WPSettings.dat 12
IndexerVolumeGuid 76
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
odd1.mp3 46888
odd1.wav 553004
zarathustra.mp3 489461
2001/
<<<SdioCard::readSector(27008, 20003a84) NOT DMA
calculations.wav 426300
completed.wav 276460
dangerous_to_remain.wav 372892
enough_info.wav 513388
functional.wav 237356
<<<SdioCard::readSector(27009, 20003a84) NOT DMA
one_moment.wav 202236
operational.wav 772140
sorry_dave.wav 791164
stop.wav 200844
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
Audacity/
<<<SdioCard::readSector(34880, 20003a84) NOT DMA
Away_in_a_Manger.mp3 2014737
Dont_Rain_on_My_Parade.mp3 3944449
Take_My_Breathe_Away.mp3 5740819
Welcome_Christmas.mp3 2985790
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
FLAC/
<<<SdioCard::readSector(63808, 20003a84) NOT DMA
T1_1024.FLA 9802802
T1_128.FLA 11126659
T1_256.FLA 10415954
T1_512.FLA 10007370
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
Candyman.aac 3177823
<<<SdioCard::readSector(24577, 20003a84) NOT DMA
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
Dont Rain on My Parade.mp3 3944449
<<<SdioCard::readSector(24577, 20003a84) NOT DMA
mtpindex.dat 0
Press any key to play a wave file
Playing 2001/stop.wav
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
<<<SdioCard::readSector(27008, 20003a84) NOT DMA
<<<SdioCard::readSector(27009, 20003a84) NOT DMA
Audio Error: 1
<<<SdioCard::readSector(34432, 200037f2) NOT DMA
<<<SdioCard::readSector(34433, 200037f2) NOT DMA
<<<SdioCard::readSector(34434, 200037f2) NOT DMA
<<<SdioCard::readSector(34435, 200037f2) NOT DMA
<<<SdioCard::readSector(34436, 200037f2) NOT DMA
<<<SdioCard::readSector(34437, 200037f2) NOT DMA
<<<SdioCard::readSector(34438, 200037f2) NOT DMA
CrashReport:
A problem occurred at (system time) 12:34:23
Code was executing from address 0x28EA
CFSR: 82
(DACCVIOL) Data Access Violation
(MMARVALID) Accessed Address: 0x20003FE1 (Stack problem)
Check for stack overflows, array bounds, etc.
Temperature inside the chip was 57.20 °C
Startup CPU clock speed is 600MHz
Reboot was caused by auto reboot after fault or bad interrupt detected
C:\Users\kurte\Documents\Arduino\Teensy Tests\audio_sd_wave_test\audio_sd_wave_test.ino Dec 4 2021 12:33:36
Date: 4 Dec 2021 12:34:35
<<<SdioCard::readSector(0, 20003c6c) NOT DMA
<<<SdioCard::readSector(8192, 20003c6c) NOT DMA
<<<SdioCard::readSector(0, 20003a84) NOT DMA
<<<SdioCard::readSector(8192, 20003a84) NOT DMA
Setup done
Directory
---------
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
System Volume Information/
<<<SdioCard::readSector(24640, 20003a84) NOT DMA
WPSettings.dat 12
IndexerVolumeGuid 76
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
odd1.mp3 46888
odd1.wav 553004
zarathustra.mp3 489461
2001/
<<<SdioCard::readSector(27008, 20003a84) NOT DMA
calculations.wav 426300
completed.wav 276460
dangerous_to_remain.wav 372892
enough_info.wav 513388
functional.wav 237356
<<<SdioCard::readSector(27009, 20003a84) NOT DMA
one_moment.wav 202236
operational.wav 772140
sorry_dave.wav 791164
stop.wav 200844
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
Audacity/
<<<SdioCard::readSector(34880, 20003a84) NOT DMA
Away_in_a_Manger.mp3 2014737
Dont_Rain_on_My_Parade.mp3 3944449
Take_My_Breathe_Away.mp3 5740819
Welcome_Christmas.mp3 2985790
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
FLAC/
<<<SdioCard::readSector(63808, 20003a84) NOT DMA
T1_1024.FLA 9802802
T1_128.FLA 11126659
T1_256.FLA 10415954
T1_512.FLA 10007370
<<<SdioCard::readSector(24576, 20003a84) NOT DMA
Candyman.aac 3177823
<<<SdioCard::readSector(24577, 20003a84) NOT DMA
Press any key to play a wave file