Als ik een wav file afspeel met de Arduino Giga, hoor ik bij de start en aan het einde van het afspelen een harde klik. Iemand een oplossing voor dit probleem?
Hoi martinvisscher,
Je geeft in deze vraag erg weinig informatie.
Ik vermoed dat de klik die je hoort, wordt veroorzaakt door het aan en uitzetten van poorten D85 en D86 (voor respectievelijk links en rechts).
Ik zie dat er in het originele ontwerp condensatoren waren voorzien, maar dat die niet worden toegepast op het board.
Dat komt dan waarschijnlijk doordat zo'n condensator de audio eigenschappen beïnvloedt, wat je niet wil.
Maar zo'n condensator kan wel helpen om dergelijke klikken te voorkomen.
Ik ken het board verder niet (heb m moeten opzoeken).
Mogelijk kun je iets in je sketch aanpassen zodat het in en uitschakelen eerder en / of later gebeurt maar ik heb geen idee hoe een en ander echt werkt op het board.
De klik is hoorbaar als de wav gestart wordt en stopt.
Wat moet ik dan vertragen? Dat van die condensator wist ik niet. Ik neem aan dat het een ontkoppel condensator naar aarde is, weet je ook de waarde? Een condensator in serie haalt in ieder geval de gelijkspanning component uit het signaal.
void soundLoop(){
if (dac0.available() && !feof(file)) {
/* Read data from file. */
uint16_t sample_data[256] = { 0 }; fread(sample_data, sample_size, 256, file);
/* Get a free buffer for writing. */
SampleBuffer buf = dac0.dequeue();
/* Write data to buffer. */
for (size_t i = 0; i < buf.size(); i++) {
/* Scale down to 12 bit. */
uint16_t const dac_val = ((static_cast<unsigned int>(sample_data[i]) + 32768) >> 4) & 0x0fff; buf[i] = dac_val; }
/* Write the buffer to DAC. */
dac0.write(buf); if(feof(file)){ fclose(file); soundStat = false;} //soundConfig(); } //soundStat = false geen wav geluid na endoffile
} //end Write data
int buttonState = digitalRead(PC_13); if (buttonState == 1) { swapFile = swapFile + 1;
if (swapFile == 4) { swapFile = 0; }
//delay(500);
soundConfig(); }//einde buttonstate
}//Einde soundloop
//configureren sound systeem
void soundConfig() {
//plotMelding("Openen audio file");
/* 16-bit PCM Mono 16kHz realigned noise reduction */
if ((swapFile == 0) && (soundFilecount == 0)) { file = fopen("/SOUND/Leeg.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 1)) { file = fopen("/SOUND/Wassenaan.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 2)) { file = fopen("/SOUND/Techlampaan.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 3)) { file = fopen("/SOUND/Techsysaan.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 4)) { file = fopen("/SOUND/Contsysaan.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 5)) { file = fopen("/SOUND/Allesuit.wav", "rb"); }
if ((swapFile == 0) && (soundFilecount == 6)) { file = fopen("/SOUND/Start.wav", "rb"); }
if (swapFile == 0) { file = fopen("/SOUND/Start.wav", "rb"); }
//print error naar scherm "Error opening audio file:"
if (file == nullptr) { plotMelding("Error openen audio file" + errno);
return; }
//Lees waarde Audio Header
struct wav_header_t {
char chunkID[4]; //"RIFF" = 0x46464952
unsigned long chunkSize; //28 [+ sizeof(wExtraFormatBytes) + wExtraFormatBytes] + sum(sizeof(chunk.id) + sizeof(chunk.size) + chunk.size)
char format[4]; //"WAVE" = 0x45564157
char subchunk1ID[4]; //"fmt " = 0x20746D66
unsigned long subchunk1Size; //16 [+ sizeof(wExtraFormatBytes) + wExtraFormatBytes]
unsigned short audioFormat; unsigned short numChannels; unsigned long sampleRate; unsigned long byteRate;
unsigned short blockAlign; unsigned short bitsPerSample;
};
//Lees WAV file header
wav_header_t header;
fread(&header, sizeof(header), 1, file);
char msg[64] = { 0 }; struct chunk_t { char ID[4]; unsigned long size; };
chunk_t chunk;
/*stoppen data plaatsen in buffer */
while (true) { fread(&chunk, sizeof(chunk), 1, file);
if (*(unsigned int *)&chunk.ID == 0x61746164) break;
/* Skip chunk data bytes. */
fseek(file, chunk.size, SEEK_CUR);
} //Einde stoppen data while
/* Determine number of samples. */
sample_size = header.bitsPerSample / 8; samples_count = chunk.size * 8 / header.bitsPerSample;
/* Configure the advanced DAC. */
if (!dac0.begin(AN_RESOLUTION_12, header.sampleRate, 256, 16)) { //plotMelding("Error start DAC1.") ;
return; }
}//einde soundConfig