Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Lecture audio numérique



  1. #1
    thomasalbert1993

    Lecture audio numérique


    ------

    Bonjour à tous !

    Me revoilà ici, après une longue période de ... sommeil

    J'ai un projet personnel en cours, dans lequel je dois réaliser un lecteur audio numérique le plus professionnel possible.

    Je dois lire des fichiers de 44.1, 48, 96, et 192 kHz, en 16 et 24bits.
    Pour le convertisseur N-A, pas de souci, y'en a "plein" sur le marché.

    (Je dois également sortir en parallèle un signal AES-EBU sur XLR et S/PDIF sur RCA et optique, mais je peux utiliser un simple CS8406 an // au convertisseur NA)

    Le souci étant que ces composants ont une entrée audio numérique en Série et non en Parallèle, il faut un gros débit pour lire les fichiers audio.

    Les échantillons sont stockés sur une flash de 2Go (accès parallèle sur 16bits).

    J'ai calculé, pour lire un fichier stéréo échantilloné sur 24bits en 192kHz, il faut un débit d'horloge pour le transfert de :

    24 bits x 2 canaux x 192 000 ech/s = 9 216 000 bits/s

    Dans ce cas, est-ce que je peux me permettre d'utiliser un simple microprocesseur 8bits ATxMEGA (les nouveaux proc 8bits d'Atmel) cadencé à 32MHz (j'ai pas tout compris, apparemment on peut acttiver la PLL interne et monter jusqu'à 200MHz, mais ils disent que le CPU doit tourner au max à 32MHz, et les péripheriques à 128MHz ????!!) ?

    Sinon y-a-t-il des processeurs 8bits plus rapides ? Je ne veux pas utiliser de processeurs 32bits car c'est beaucoup plus complexe.

    Merci beaucoup
    Thomas A.

    -----

  2. Publicité
  3. #2
    thomasalbert1993

    Re : Lecture audio numérique

    Pour le passage des échantillons au convertisseur N-A, je peux n'utiliser que des registres à décallage peut-être, non ?
    Après, pour le pilotage et le réglage du convertisseur, ca se fait tjs avec un microcontroleur, en i²c..

  4. #3
    vincent66

    Re : Lecture audio numérique

    Bonjour Thomas
    En effet un micro sera nécessaire comme "chef d'orchestre".
    Ton cna 24 bits a-t-il en entrée série un unique registre à décalage 24 bits ? Si c'est le cas il doit être possible de le charger par trois octets successifs avec le port série spi du micro... si tu dois ajouter des registres à décalage au micro ça pourrait vite devenir lourd et un peu trop lent... là j'utiliserais un fpga qui gère l'adressage de la mémoire et l'interface série, chapeauté par un petit PIC...
    Amicaux encouragements !
    Vincent

  5. #4
    thomasalbert1993

    Re : Lecture audio numérique

    Je ne comprend pas ta question "Ton cna 24 bits a-t-il en entrée série un unique registre à décalage 24 bits ?"

    En fait, on envoie le signal audio en continu sur le CNA.
    Donc si c'est un signal 16bits, on envoie 2 octets pour le premier sample gauche, deux octets pour le premier sample droit, deux octets pour le deuxieme sample gauche, deux octets pour le deuxieme sample droit, et ainsi de suite.

    Si c'est un signal 24bits, on envoie 3 octets et non 2.

    Et en 24bits 192kHz on monte à 9Mb/s, ce qui risque d'être chaud pour un micro cadencé à 32MHz (ça lui laisse a peine 3 instructions par bit) ! (et le port SPI du micro montera jamais à 9Mbits/s !!! ^^)

    Donc je sais pas trop comment faire pour le coup...

    Ce que je pensais faire, avec le registre, c'est ça :

    Le microcontroleur pilote la mémoire Flash NAND de 2Go pour qu'elle débite en continu ce qu'elle a dans le ventre. Ses sorties paralleles (8bits) sont reliées a un registre à décallage 8 bits, "clocké" par une horloge, le fameux 9Mbps (ça dépend du bitrate du fichier audio, et du nb de bits par sample). Cette mm fréquence est divisée par 8 (compteur, bascules D.......) et vient piloter l'horloge de la mémoire, pour passer à l'octet suivant, et ainsi de suite....

    Qu'en penses-tu ?

  6. A voir en vidéo sur Futura
  7. #5
    thomasalbert1993

    Re : Lecture audio numérique

    Bon, il faut que je me renseigne sur les durées en instructions des diverses étapes, mais apparemment, le signal de données n'est pas obligé d'être régulier ! C'est à dire, une période Gauche + Droit dure toujours le meme temps, mais à l'intérieur de cette période on peut envoyer bcp plus rapidement les bits de donénes, suivis d'un temps mort jsuqu'au prochain échantillon..

    Ca donnerait donc :

    BOUCLE (tant qu'il y a des données dans la flash)
    {

    SignalGaucheDroite = 1; // Envoi signal gauche

    POUR n = 1 à 3 // (24bits = 3octets)
    {
    data = Récupérer8bitsDeDonnéesDeLaFla sh (); // data = valeur du port B par exemple

    POUR i = 0 à 7; i++
    {
    SignalClock = 0;
    SignalData = data[i]
    SignalClock = 1; // Ca donne donc une demie-période du signal d'horloge de la durée d'une instruction ?
    }

    FlashOctetSuivant = 1;
    FlashOctetSuivant = 0; // Impulsion pour lire octet suivant de la flash
    }

    SignalGaucheDroite = 0; // Envoie signal de droite

    POUR n = 1 à 3 {}.... // meme boucle que précédent

    AttendreProchainEchantillon (); // en gros, une boucle sans fin tant qu'une entrée est à 0

    }

    Quelqu'un connait-il le nb d'instructions nécessaire pour chaque étape ?
    Le principal est que une itération de BOUCLE (de SignalGaucheDroite = 1 à //mm boucle que précédent) dure moins de la durée d'un échantillon, c'est à dire 1/192000 = 5,21µs , sachant que le microcontroleur tourne au maximum à 32MHz... Est-ce envisageable ?

    Merci beaucoup

  8. #6
    vincent66

    Re : Lecture audio numérique

    Bonsoir
    Je suis étonné que le spi interne au micro ne tourne pas à la vitesse requise... sinon ta solution vaut la peine d'être essayée. Avec des timings aussi exigeants il vaudrait mieux programmer en assembleur...
    Amitiés !
    Vincent

  9. Publicité
  10. #7
    thomasalbert1993

    Re : Lecture audio numérique

    j'y ai pensé pour l'assembleur, mais le pb, c'est que j'y connais rien !! Et que ce morceau de programme n'est pas mon programme complet, ça n'est que la partie "lecture de la musique" !

    Si qqn peut m'aider à retranscrire mon programme ci-dessus en assembleur, optimisé pour tourner rapidement sur un ATxMega, je l'en remercie d'avance !!

  11. #8
    thomasalbert1993

    Re : Lecture audio numérique

    Bon j'ai essayé de regarder ce que donnerait le petit bout de programme en assembleur si le microcontroleur se contente de créer le signal d'horloge qui fait avancer un registre à décallage 8bits externe, ça donne environ un total de 112 instructions par echantillons, soit 116 cycles d'horloge CPU par sample. Ca fait environ 3µs, et c'est bien inférieur à 5,21µs, donc ça devrait fonctionner... A vérifier !

  12. #9
    vincent66

    Re : Lecture audio numérique

    Visiblement valable, et à essayer..!
    Courage !
    Vincent

  13. #10
    RISC

    Re : Lecture audio numérique

    Salut,

    Tu peux continuer de réver à faire cela avec un 8 bits (quelque soit la marque) mais tes calculs t'ont déjà fait que le débit de données est incompatible avec un 8bits qui de plus devra faire plusieurs accès par échantillon lorsque ceux-ci seront par exemple sur 24 bits.

    Sans hésitation, il faut choisir au minimum un 16 voire un 32 bits pour ton cahier des charges et qui intègre des canaux de DMA car cela sera crucial pour pouvoir faire plusieurs choses en // (lecture SD, échange CODEC, fetch instruction,...).

    En 16 bits, un dsPIC avec périphérique DCI (I2S ou AC97) permet le dialogue avec le CODEC. Chaque instruction dure 25ns. Coté SD, tu prends un canal SPI et tu l'accroches à un canal de DMA qui dépasse les 10Mbits et effectue les transferts en parallèle de l'exécution du programme car les dsPIC ont de la mémoire double port.
    Il existe un starter kit AUDIO qualité CD fait à base d'un dsPIC33 dont tu peux trouver tous les détails ici

    Dans la famille dsPIC33 il existe plusieurs produits ayant un CODEC audio 16 bits intégré.

    a+

  14. #11
    thomasalbert1993

    Re : Lecture audio numérique

    les ATxMEGA 8bits intègrent 4 canaux de DMA ! J'ai pas trop compris comment ils fonctionnaient, mais ils en ont.. Si tu pouvais m'expliquer le fonctionnement de ces canaux, ça m'aiderait bien Merci !

    Puis mon microcontroleur n'accède pas directement aux échantillons, il génère simplement le signal Clock d'entrée des données sur le convertisseur N-A (et par extension le signal d'horloge du registre externe) (soit un signal compris entre 1,4MHz pour du 44,1kHz 16bits et 9,2MHz pour du 192kHz 24bits).

  15. #12
    RISC

    Re : Lecture audio numérique

    Salut,

    Pour les micros ATMEL faudra demander à quelqu'un d'autre...

    a+

  16. Publicité

Discussions similaires

  1. [Brun] Lecture impossible de cd audio sur Harman Kardon FL8400
    Par souris48 dans le forum Dépannage
    Réponses: 8
    Dernier message: 06/07/2009, 18h35
  2. [Brun] problème de lecture sur CD audio
    Par marcot dans le forum Dépannage
    Réponses: 0
    Dernier message: 01/10/2007, 18h53
  3. Soucis de lecture de CD ROm et CD audio
    Par tania100 dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 26/01/2006, 17h24
  4. Pbl: Lecture CD Audio sous Linux
    Par antwan dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 23/01/2005, 13h24
  5. lecture audio impossible!!
    Par Alexandra dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 05/10/2004, 16h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.