Hallo! Ich versuche momentan mit dem Due Sounds (Turrican-II-Soundtrack) von einer SD abzuspielen. Dabei habe ich eine SD mit CS an Pin 9 und einen Stecker, der hinten beim AUX-Input von meinem CD-Player reinkommt als Hardware. (OK, ein TFT ist auch noch dran, aber nur für die SD) Ich habe das Beispiel dieser Audio-Library ausprobiert und es hat geklappt. Darum habe ich sie etwas verändert, um über ein + und - im seriellen Monitor spulen zu können:
/*
Simple Audio Player
Demonstrates ...
*/
#include <SD.h>
#include <SPI.h>
#include <Audio.h>
void setup() {
// debug output at 9600 baud
Serial.begin(9600);
// setup SD-card
Serial.print("Initializing SD card...");
if (!SD.begin(9)) {
Serial.println(" failed!");
while(true);
}
Serial.println(" done.");
// hi-speed SPI transfers
// 44100kHz stereo => 88200 sample rate
// 100 mSec of prebuffering.
Audio.begin(88200, 100);
}
void loop() {
int count = 0;
// open wave file from sdcard
File myFile = SD.open("test.wav");
if (!myFile) {
// if the file didn't open, print an error and stop
Serial.println("error opening test.wav");
while (true);
}
const int S = 1024; // Number of samples to read in block
short buffer[S];
Serial.print("Playing");
// until the file is not finished
while (myFile.available()) {
// read from the file into buffer
myFile.read(buffer, sizeof(buffer));
// Prepare samples
int volume = 1024;
Audio.prepare(buffer, S, volume);
// Feed samples to audio
Audio.write(buffer, S);
// Every 100 block print a '.'
count++;
if (count == 100) {
Serial.print(".");
count = 0;
}
//ab hier anders:
while(Serial.available()){
char ch = Serial.read();
Serial.write(ch);
delay(50);
int i = ch == '+' ? 1000000 : (ch == '-' ? -1000000 : 0);
myFile.seek(max(0, myFile.position() + i));
if(!Serial.available()){
Serial.println();
}
}
}
myFile.close();
Serial.println("End of file. Thank you for listening!");
while (true) ;
}
Wenn ich einfach nur ein + oder - eingebe, klappt es. Aber wenn ich so um die 10 oder mehr + eingebe, stückelt der Due irgendwie die Musik. Dann ist es so, als würde 20 Mal oder so die Musik pausiert und wieder abgespielt wird. Dadurch hat dann die Musik halbe Geschwindigkeit. Da ich selber ein gutes Ohr für Musik habe, halte ich das maximal 30 Sekunden ohne ausrasten aus. Kann mir jemand helfen? Ich kann, bei Bedarf, auch eine Audio-Datei von dem, was die Boxen ausspucken, schicken.