Test dac pcm5102a erreur audio.h

cedric13300

New member
Bonjour à la communauté,

Je rencontre un problème de compilation extrêmement persistant et frustrant avec ma carte Teensy 4.1 et la bibliothèque Audio, et j'ai épuisé toutes les solutions de dépannage que j'ai pu trouver ou que l'on m'a suggérées. J'espère que vous pourrez m'aider à comprendre ce qui se passe.

Description du problème : Je tente de compiler un sketch très simple qui utilise la bibliothèque Audio pour générer un son (onde sinusoïdale ou lecture WAV) via un DAC PCM5102A (connecté en I2S). Cependant, la compilation échoue systématiquement avec des erreurs liées à la bibliothèque Audio.

L'erreur principale et récurrente est :'Audio' n'a pas été déclaré dans ce périmètre

Mais en activant la sortie verbeuse de l'IDE Arduino, j'ai identifié la cause profonde de ce problème. Le journal de compilation indique que la bibliothèque Audio est utilisée à partir d'un chemin incorrect pour ma carte Teensy 4.1. Voici la ligne cruciale du journal :

Utilisation de la bibliothèque Audio version 1.3 dans le dossier : C:\Users\orteg\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.59.0\libraries\Audio

Le problème est la présence de \hardware\avr\ dans le chemin. Ma carte est une Teensy 4.1 (architecture ARM/iMXRT), et non une carte AVR. Cela signifie que le compilateur tente d'utiliser des fichiers de bibliothèque Audio conçu pour une architecture différente, ce qui provoque toutes les erreurs de déclaration et d'accès aux membres.

Les erreurs détaillées que j'obtiens lors de la compilation de Audio.cpp sont les suivantes, toutes pointant vers le chemin \hardware\avr\1.59.0\libraries\Audio\Audio.cpp :

  • 'AUDIO_BLOCK_BYTES' n'a pas été déclaré dans cette portée
  • 'audio_block_t' {aka 'struct audio_block_struct'} n'a aucun membre nommé 'next_free'
  • 'detachInterruptVector' n'a pas été déclaré dans cette portée
  • 'AUDIO_UPDATE_RATE' n'a pas été déclaré dans cette portée
  • La classe « AudioClass » n'a aucun membre nommé « audio_block_list_count »
  • La classe « AudioClass » n'a aucun membre nommé « audio_block_list »
  • La classe « AudioClass » n'a pas de membre nommé « audio_block_bytes_allocated »
  • La classe « AudioClass » n'a pas de membre nommé « audio_block_bytes_alloc_max »
  • aucune déclaration ne correspond à 'void AudioConnection::connect()' (et d'autres pour déconnecter, addConnection, removeConnection)
  • impossible de déclarer la variable 'Audio' comme étant de type abstrait 'AudioClass' (avec la note sur virtual void AudioStream::update(void) = 0;)
Étapes de dépannage déjà tentées (très détaillées) :

  1. Réinstallations multiples de l'IDE Arduino (version 2.x, puis 1.8.19) :
    • J'ai effectué des désinstallations complètes de l'IDE, y compris la suppression manuelle des dossiers de cache (AppData\Local\Arduino15) et des dossiers d'installation.
    • J'ai utilisé la version ZIP de l'IDE pour des installations "portables" dans des chemins simples et non synchronisés (hors OneDrive).
    • J'ai tenté d'installer différentes versions du support Teensy via le Gestionnaire de cartes de l'IDE.
    • J'ai également tenté une installation de l'Arduino IDE 1.8.19 avec l'installateur autonome Teensyduino (td_download.html), en pointant l'installateur vers le dossier de l'IDE et en m'assurant que la bibliothèque Audio était cochée.
    • Malgré toutes ces tentatives, le problème du chemin \hardware\avr\ persiste, et les erreurs de compilation sont les mêmes.
  2. Interférence Antivirus / Pare-feu :
    • J'ai désactivé temporairement mon antivirus (Windows Defender) et mon pare-feu pendant toutes les installations et les premiers lancements de l'IDE pour éviter tout blocage. Cela n'a pas résolu le problème de compilation.
  3. Vérification des fichiers de la bibliothèque Audio :
    • J'ai vérifié le contenu des fichiers Audio.h et Audio.cpp dans le dossier C:\Users\orteg\AppData\Local\Arduino15\packages\teensy\hardware\avr\1.59.0\libraries\Audio\.
    • J'ai constaté que Audio.h était incomplet et Audio.cpp était parfois manquant ou incorrect. J'ai tenté de les remplacer manuellement par des versions complètes et correctes (issues d'exemples fonctionnels ou de dépôts en ligne).
    • Ces manuels de remplacement n'ont pas résolu les erreurs de compilation, car le problème semble être plus profond, lié à la manière dont le compilateur interprète l'ensemble de la structure du cœur Teensy via ce chemin avr incorrect.
  4. Tests avec des exemples officiels :
    • L'exemple PlaySynthMusic de la bibliothèque Audio (Fichier > Exemples > Audio > Synthesis > PlaySynthMusic) compile sans aucune erreur dans mon IDE Arduino. Cela indique que l'IDE est capable de compiler la bibliothèque Audio et que des versions fonctionnelles de ses composants existants sur mon système.
    • Cependant, mon propre code (très similaire aux exemples) ne compile pas, ce qui renforce l'idée d'une configuration d'environnement spécifique à mon sketch ou d'un problème de lien avec les bons fichiers.
Mon hypothèse : Il semble y avoir une corruption très tenace dans la manière dont le support Teensy est installé ou référencé par l'Arduino IDE sur mon système Windows. Malgré la sélection de la Teensy 4.1, l'IDE insiste à utiliser les fichiers de bibliothèque Audio et du cœur Teensy qui sont destinés à l'architecture AVR, ce qui est incompatible avec la Teensy 4.1.

Matériel et logiciel :

  • Carte : Teensy 4.1
  • DAC : PCM5102A (connecté en I2S aux broches par défaut du Teensy 4.1 : BCLK GPIO 20, LRCK GPIO 21, TX GPIO 7)
  • Système d'exploitation : Windows 10/11 (version exacte si nécessaire, mais le problème est constant sur plusieurs installations)
  • Version Arduino IDE : Actuellement 1.8.19 (mais le problème était identique avec la version 2.x)
  • Version Teensyduino : 1.59.0 (installée via le gestionnaire de cartes ou l'installateur autonome)
Code Arduino Sketch (qui ne compile pas) :

// ===========================================================================
// Code de Test Bip pour DAC PCM5102A (Teensy 4.1)
// ==========================================================================

#include <Audio.h>
#include <SD.h> // Nécessaire pour la carte SD
#include <SPI.h> // Nécessaire pour la communication SPI avec la carte SD

AudioPlaySdWav playWav;
Sortie audioI2S i2s1 ;
PatchCord1 de connexion audio (playWav, 0, i2s1, 0);
PatchCord2 de connexion audio (playWav, 1, i2s1, 1);

#define SDCARD_CS_PIN 10
const char *filename = "test.wav";

void setup() {
Serial.begin(9600);
while (!Serial && millis() < 5000);

Serial.println("--- Démarrage du Lecteur WAV depuis Carte SD ---");
Mémoire audio (20);
Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
Serial.println("Initialisation du système audio.");

Serial.print("Initialisation de la carte SD...");
if (!(SD.begin(SDCARD_CS_PIN))) {
Serial.println("Erreur d'initialisation de la carte SD !");
tandis que (1);
}
Serial.println("Carte SD initialisée.");

Serial.print("Lecture du fichier: ");
Serial.println(nom de fichier);
if (!playWav.play(filename)) {
Serial.print("Erreur: Impossible de lire le fichier ");
Serial.println(nom de fichier);
tandis que (1);
}
Serial.println("Lecture du fichier WAV en cours...");
Serial.println("Veuillez brancher votre enceinte Bluetooth via l'entrée AUX.");
}

void loop() {
if (!playWav.isPlaying()) {
Serial.println("Lecture du fichier WAV terminée. Redemarrage de la lecture.");
playWav.play(nom de fichier);
}
délai(10);
}

Toute aide ou piste de diagnostic serait grandement appréciée. Je suis vraiment bloqué et je ne sais plus quoi tenter.

Merci d'avance pour votre temps et votre expertise.
 
I am no expert when it comes to audio stuff but I do see a couple of obvious errors in your sketch
First:
Code:
Audio Memory(20);
Should be:
Code:
AudioMemory(20);
Kill the space between Audio and Memory().

Second:
Code:
Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
is wrong in two ways. 'Audio' should be 'playWav'. and 'Begin()' takes no arguments. The following changes to the sketch allow it to compile:
Code:
//Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
playWav.begin();
Also, use the "</>" button in the upper left. It will bring up a text window that you can paste your code into. It preserves the formatting making it easier to read and understand like this:
Code:
// ==============================================================================
// Beep Test Code for PCM5102A DAC (Teensy 4.1)
// =======================================================================================

#include <Audio.h>
#include <SD.h> // Needed for SD card
#include <SPI.h> // Needed for SPI communication with SD card

AudioPlaySdWav playWav;
AudioOutputI2S i2s1;
AudioConnection PatchCord1(playWav, 0, i2s1, 0);
AudioConnection PatchCord2(playWav, 1, i2s1, 1);

#define SDCARD_CS_PIN 10
const char *filename = "test.wav";

void setup() {
  Serial.begin(9600);
  while (!Serial && millis() < 5000);

  Serial.println("--- Starting WAV Player from SD Card ---");
  AudioMemory(20);
  //Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
  playWav.begin();
  Serial.println("Initializing audio system.");

  Serial.print("Initializing SD card...");
  if (!(SD.begin(SDCARD_CS_PIN))) {
    Serial.println("Error initializing SD card!");
    while (1);
  }
  Serial.println("SD card initialized.");

  Serial.print("Playing file: ");
  Serial.println(filename);
  if (!playWav.play(filename)) {
    Serial.print("Error: Unable to play file ");
    Serial.println(filename);
   while (1);
  }
  Serial.println("Now playing WAV file...");
  Serial.println("Please connect your Bluetooth speaker via AUX input.");
}

void loop() {
  if (!playWav.isPlaying()) {
    Serial.println("WAV file finished playing. Restarting playback.");
  playWav.play(filename);
  }
  delay(10);
}
Next, does the PCM5102A have an SD card slot that you are using that is using SPI with pin 10 as a chip select? If not then you are probably using the T4.1 builtin sdcard slot in which case you need to change:
Code:
#define SDCARD_CS_PIN 10
to:
Code:
#define SDCARD_CS_PIN BUILTIN_SDCARD
Finally I noticed that you do not have a "AudioController" section in your code. This or something similar might be needed:
Code:
AudioControlSGTL5000 sgtl5000_1; //xy=302,184

Finally, You will find a lot of info for your audio controller by searching the forum for "PCM5102A".
Good luck...
 
Last edited:
As a native french speaking, I agree with Paul. The text is too perfect for a programmer :ROFLMAO:
And his code was translated, wwatson re-translated it.
 
Étant francophone de naissance, je suis d'accord avec Paul. Le texte est trop parfait pour un programmeur. :ROFLMAO:
Et son code a été traduit, Watson l'a retraduit.
Je vois pas pourquoi s'en priver et non je ne suis absolument pas programmeur. Je suis sur un projet et j'y comprends que dalle dans les code c'est pour çà que je poste Ici
 
Je ne suis pas un expert en matière d'audio, mais je vois quelques erreurs évidentes dans votre croquis.
D'abord:
Code:
Mémoire audio(20);
Devrait être :
Code:
AudioMemory(20);
Supprimez l'espace entre Audio et Memory().

Deuxième:
Code:
Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
est erroné à deux égards. « Audio » devrait être « playWav » et « Begin() » ne prend aucun argument. Les modifications suivantes proposées au croquis permettent sa compilation :
Code:
//Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
playWav.begin();
Utilisez également le bouton « </> » en haut à gauche. Une fenêtre de texte s'ouvrira pour coller votre code. La mise en forme est ainsi préservée, ce qui facilite la lecture et la compréhension.
Code:
// ==============================================================================
// Code de test sonore pour DAC PCM5102A (Teensy 4.1)
// =======================================================================================

#include <Audio.h>
#include <SD.h> // Nécessaire pour la carte SD
#include <SPI.h> // Nécessaire pour la communication SPI avec la carte SD

AudioPlaySdWav playWav;
Sortie audio I2S i2s1 ;
AudioConnection PatchCord1(playWav, 0, i2s1, 0);
AudioConnection PatchCord2(playWav, 1, i2s1, 1);

#define SDCARD_CS_PIN 10
const char *filename = "test.wav";

void setup() {
  Serial.begin(9600);
  tant que (!Série && millis() < 5000);

  Serial.println("--- Démarrage du lecteur WAV à partir de la carte SD ---");
  Mémoire audio(20);
  //Audio.begin(AUDIO_SAMPLE_RATE_EXACT, 500);
  playWav.begin();
  Serial.println("Initialisation du système audio.");

  Serial.print("Initialisation de la carte SD...");
  si (!(SD.begin(SDCARD_CS_PIN))) {
    Serial.println("Erreur lors de l'initialisation de la carte SD !");
    tandis que (1);
  }
  Serial.println("Carte SD initialisée.");

  Serial.print("Fichier en cours de lecture : ");
  Serial.println(nom de fichier);
  si (!playWav.play(nom de fichier)) {
    Serial.print("Erreur : impossible de lire le fichier ");
    Serial.println(nom de fichier);
   tandis que (1);
  }
  Serial.println("Lecture du fichier WAV en cours...");
  Serial.println("Veuillez connecter votre enceinte Bluetooth via l'entrée AUX.");
}

boucle vide() {
  si (!playWav.isPlaying()) {
    Serial.println("La lecture du fichier WAV est terminée. Redémarrage de la lecture.");
  playWav.play(nom de fichier);
  }
  délai(10);
}
Ensuite, le PCM5102A possède-t-il un emplacement pour carte SD utilisant le protocole SPI avec la broche 10 comme sélection de puce ? Sinon, vous utilisez probablement l'emplacement pour carte SD intégrée au T4.1, auquel cas vous devrez modifier :
Code:
#define SDCARD_CS_PIN 10
ONU:
Code:
#define SDCARD_CS_PIN BUILTIN_SDCARD
J'ai finalement remarqué que votre code ne comportait pas de section « AudioController ». Ceci ou une section similaire pourrait être nécessaire :
Code:
AudioControlSGTL5000 sgtl5000_1; //xy=302,184

Enfin, vous trouverez de nombreuses informations sur votre contrôleur audio en recherchant sur le forum "PCM5102A".
Bonne chance...
Merci je vais tester mais mon but était de tester mon DAC pcm5102a avec un tennsy 4.1 en créant une onde pour un projet audio je testeur les composants module reçus pour et étant nul en programmation je me suis aidé de Gimini IA
 

Don't use chatbot code! Teensy Audio library has many known-good examples. Use the good examples!

In Arduino IDE, first select Teensy from either the drop-down boards list (requires Teensy connected to your computer) or using Tools > Ports (can be done without any Teensy connected). Selecting a Teensy board first is important because the Arduino IDE menus automatically update for the specific board.

Once Teensy is selected, click File > Examples > Audio > WavFilePlayer. This is a working example program which plays 4 WAV files. You can download the 4 example files at this page. Copy the 4 files onto a SD card and plug the SD card into the audio shield SD socket.

This program is designed to use the Audio Shield, rev D. If you have only little experience with programming or electronics, your best path may be to simply buy the compatible hardware. Even if you later switch to other hardware like PCM5102, using the compatible hardware can help you to gain knowledge and experience.

However, switching to PCM5102 should be possible using the code meant for Audio Shield rev D. The Audio Shield uses I2S protocol for audio data and I2C protocol for configuration. I used PCM5102 a couple years ago, so my memory may be old, but I believe it uses voltages on certain pins for configuration. One of the possible configurations is to use I2S for audio data. So to replace Audio Shield rev D with PCM5102, you will need to study the PCM5102 datasheet and find the way to configure it to accept the same I2S data format.

But if you have little experience with code and electronics, please do yourself a huge favor to first get the project working with the Audio Shield rev D using the confirmed working example programs. After you have gained some experience using compatible hardware, then attempt the more challenging task to experiment with connecting other hardware. This path requires more time and costs more money, but using known compatible hardware to get started and build knowledge and experience is a much better road to follow than attempting to connect new hardware before you have any experience with the software!

Any please, if you show us chatbot code, please clearly explain it from a chatbot and not code you or any other human wrote. I and everyone else here are real humans who want to help you. Unlike bots, our time is valuable. Please do not waste everyone's time by showing code from bots without clearly saying it is not real human created code!
 
Back
Top