HectorDuino
Modérateurs : Papy.G, fneck, Carl
Re: HectorDuino
Tout à fait, ma 1ere version travaillait en SByte. J'ai vite abandonné pour passer en integer (32 bits signés )
Daniel, le 1er essai de son 1 bit que tu avais fait c'est avec un simple ?v>0 0:1 que tu avais généré le son ou tu avais déjà mis un filtre num ? De mémoire c'était pas terrible, certes, mais on reconnaissait Elvis...moi on reconnais rien du tout
De plus tu parlais de "sur 2 bits à 17857 Hz" c'est à dire que tu avais 2*17857 bits/ secondes ?
Daniel, le 1er essai de son 1 bit que tu avais fait c'est avec un simple ?v>0 0:1 que tu avais généré le son ou tu avais déjà mis un filtre num ? De mémoire c'était pas terrible, certes, mais on reconnaissait Elvis...moi on reconnais rien du tout
De plus tu parlais de "sur 2 bits à 17857 Hz" c'est à dire que tu avais 2*17857 bits/ secondes ?
-
- Messages : 7923
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
Le 2 bit à 17khz c'est 4 niveaux PWM à 17khz si j'ai bonne mémoire: on passe d'une amplitude de 0-255 à 0-3. Il n'y a pas de dither. Pour reproduire les 4 niveaux, il vaut générer des créneaux de rapport cyclique variable.
Un dither plus simple que le filtre d'ordre 2 (avec d1 et d2) est celui-ci:(une seule variable d'état: e qui représente l'erreur et qui est réutilisée et propagée d'échantillon en échantillon. Les autres variables sont locales.).
Je pense qu'il peut être adapté à de l'unsigned très facilement:
Un dither plus simple que le filtre d'ordre 2 (avec d1 et d2) est celui-ci:
Code : Tout sélectionner
v = echantillon_audio_signé (-128..127)
o = v>=e ? 127 : -128
e = e + (o - v);
sortir(o>0 ? $FF : $00)
Je pense qu'il peut être adapté à de l'unsigned très facilement:
Code : Tout sélectionner
v = echantillon_audio_unsigned() // (0..255)
o = v>=e ? 255: 0
e = e + (o - v);
sortir(o)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: HectorDuino
Mes premiers essais étaient en PWM classique : le rapport cyclique entre les créneaux haut et bas pouvait prendre des valeurs fixes. En particulier, avec 2 bits, il y avait 4 rapports cycliques différents. J'ai très vite abandonné, car avec une si mauvaise définition le résultat était mauvais, avec un souffle beaucoup trop fort.
Les meilleurs résultats ont été obtenus avec la diffusion d'erreur : à chaque échantillon le bit est positionné à 0 ou à 1, selon que l'échantillon est au-dessus ou au-dessous de la moyenne. Par exemple, avec un échantillon sur 8 bits, la sortie est à zéro pour [0-127] et à un pour [128-255]. L'erreur d'arrondi est par exemple -12 pour un échantillon à 12, ou +20 pour un échantillon à 235. Cet arrondi est retranché à l'échantillon suivant, et on recommence le même calcul.
Avec cette deuxième technique, la qualité commence à devenir acceptable (mais pas encore très bonne)
Exemple dans cet essai à 47kHz : http://dcmoto.free.fr/tmp/elvis_dither2.mp3
Ensuite j'ai pu faire un peu mieux avec l'Arduino, à 67kHz, avec des filtres pour réduire le souffle donnés par __sam__ dans ce fil de discussion : http://forum.system-cfg.com/viewtopic.p ... 3&start=30
Je n'ai pas fait d'enregistrement, mais à l'oreille c'était un peu mieux que la version précédente.
Avec 67kHz on arrive pas loin de la fréquence la plus haute possible pour le processeur 6809. A moins de 40kHz on ne peut rien faire de bon sur 1 bit. Les professionnels utilisent en général des fréquences de 16MHZ.
Les meilleurs résultats ont été obtenus avec la diffusion d'erreur : à chaque échantillon le bit est positionné à 0 ou à 1, selon que l'échantillon est au-dessus ou au-dessous de la moyenne. Par exemple, avec un échantillon sur 8 bits, la sortie est à zéro pour [0-127] et à un pour [128-255]. L'erreur d'arrondi est par exemple -12 pour un échantillon à 12, ou +20 pour un échantillon à 235. Cet arrondi est retranché à l'échantillon suivant, et on recommence le même calcul.
Avec cette deuxième technique, la qualité commence à devenir acceptable (mais pas encore très bonne)
Exemple dans cet essai à 47kHz : http://dcmoto.free.fr/tmp/elvis_dither2.mp3
Ensuite j'ai pu faire un peu mieux avec l'Arduino, à 67kHz, avec des filtres pour réduire le souffle donnés par __sam__ dans ce fil de discussion : http://forum.system-cfg.com/viewtopic.p ... 3&start=30
Je n'ai pas fait d'enregistrement, mais à l'oreille c'était un peu mieux que la version précédente.
Avec 67kHz on arrive pas loin de la fréquence la plus haute possible pour le processeur 6809. A moins de 40kHz on ne peut rien faire de bon sur 1 bit. Les professionnels utilisent en général des fréquences de 16MHZ.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: HectorDuino
pour les 16MHz va falloir overclocker Hector...
pour le reste, j'ai essayé vite fait...pas concluant...faut encore creuser...
pour le reste, j'ai essayé vite fait...pas concluant...faut encore creuser...
Re: HectorDuino
Petite question dès fois que...
Sommes nous bien d'accord que la sauvegarde d'un fichier WAV sous GoldWave en 8bits, PCM 16Khz :
nous donnera (après le header wav) les octets son à la queue leu leu en 8bit non signé ? (entre 0 et 255 avec un signal neutre 0 à 128 points)
Sommes nous bien d'accord que la sauvegarde d'un fichier WAV sous GoldWave en 8bits, PCM 16Khz :
nous donnera (après le header wav) les octets son à la queue leu leu en 8bit non signé ? (entre 0 et 255 avec un signal neutre 0 à 128 points)
Re: HectorDuino
Bon, je n'ai pas suivi tout le sujet, et je sais bien que le wav est un protocole audio d'encapsulation, mais habituellement le wav est censé transporter du PCM stéréo 44,1 kHz à 16 bits linéaires (c'est le format du CD audio)...
Après, il y a toujours moyen de prendre une Ferrari et d'en faire une cage à lapins, mais ce n'est pas l'usage le plus courant...
Après, il y a toujours moyen de prendre une Ferrari et d'en faire une cage à lapins, mais ce n'est pas l'usage le plus courant...
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Re: HectorDuino
Non le wav est un format passe-partout qui permet justement de ne pas figer les débits, nombre de voies et autres encodage (µlaw par exemple)...
maintenant pour nos bouzes on a besoin de moutons à 5 pattes...ça tombe bien !
maintenant pour nos bouzes on a besoin de moutons à 5 pattes...ça tombe bien !
-
- Messages : 7923
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
Oui, j'ai l'impression que c'est bien ca. 16khz, unsigned 8 bits.
Ca ne marche toujours pas alors ?
Ca ne marche toujours pas alors ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: HectorDuino
Nan, c'est vraiment mauvais et on arrive à suivre le rythme de la musique en suivant le rythme des crachoullis... pas plus.
J'ai essayé avec une simple voie (Brel Amstredam) et une musique soutenue (Bad Apple) mais c'est pareil : une bouillie infame inaudible...
C'est fou, au départ j'aurai plus misé sur le son que sur l'image... Je crois que je vais abandonner l'idée.
Merci Yves ! Donc ceux qui veulent voir ce que cela peu donner sans toutefois se fabriquer l'HectorDuino il y a mon émulateur VBHector qui intègre l'émulation (simulation pour être précis) de ce montage !
A vous les belles vidéo sur VBHector ! (Avec la question de ma femme : mais à quoi ça sert ??? - A rien !)
J'ai essayé avec une simple voie (Brel Amstredam) et une musique soutenue (Bad Apple) mais c'est pareil : une bouillie infame inaudible...
C'est fou, au départ j'aurai plus misé sur le son que sur l'image... Je crois que je vais abandonner l'idée.
Merci Yves ! Donc ceux qui veulent voir ce que cela peu donner sans toutefois se fabriquer l'HectorDuino il y a mon émulateur VBHector qui intègre l'émulation (simulation pour être précis) de ce montage !
A vous les belles vidéo sur VBHector ! (Avec la question de ma femme : mais à quoi ça sert ??? - A rien !)
Re: HectorDuino
Juste un petit rappel :
Daniel a écrit :A moins de 40kHz on ne peut rien faire de bon sur 1 bit.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: HectorDuino
Bien, je comprends que j'aurais rien de bon mais là c'est zéro...
[EDIT] YYYEEESSS !!! Alors en ré-ouvrant le fichier et en comptant les octets, confirmer par une petite info dans le soft, GoldWave me fait des bonnes blagues : comme dans l'image ci dessus je demande bien un signal à 16000hz et .... il me créé un signal à .... 44100HZ !!!!
J'ai donc dans mon encodeur divisé et là ... là là lére Hector me chante du Brel !!!
Bon, ok Daniel c'est pas vraiment beau mais on reconnait bien Brel !!
(saleté de GoldWave... ou de JJ qui ne sais pas l'utiliser !)
J'ai même les mêmes plop plop de changement de secteur !
[EDIT] YYYEEESSS !!! Alors en ré-ouvrant le fichier et en comptant les octets, confirmer par une petite info dans le soft, GoldWave me fait des bonnes blagues : comme dans l'image ci dessus je demande bien un signal à 16000hz et .... il me créé un signal à .... 44100HZ !!!!
J'ai donc dans mon encodeur divisé et là ... là là lére Hector me chante du Brel !!!
Bon, ok Daniel c'est pas vraiment beau mais on reconnait bien Brel !!
(saleté de GoldWave... ou de JJ qui ne sais pas l'utiliser !)
J'ai même les mêmes plop plop de changement de secteur !
-
- Messages : 7923
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
Ah ben voilà! Je suis content.
Pour l'encodeur tu as utilsié quel algo ? On peut gagner en qualité avec un filtre plus évolué. Nota: Même si 40Mhz c'est mieux, à 17Mhz c'est déjà un début. Si tu arrives par une astuce à pouvoir récupérer un bit supplémentaire dans le format, tu passe à 34Mhz, et là c'est encore mieux.
Pour l'encodeur tu as utilsié quel algo ? On peut gagner en qualité avec un filtre plus évolué. Nota: Même si 40Mhz c'est mieux, à 17Mhz c'est déjà un début. Si tu arrives par une astuce à pouvoir récupérer un bit supplémentaire dans le format, tu passe à 34Mhz, et là c'est encore mieux.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: HectorDuino
Le but pour moi n'est pas de faire du son seulement mais plutot de sonoriser les videos.
Elles passent actuellement à 60KHz et je réserve 1 bit sur 4 octets pour le son. plus serait pénalisant...J'espère pouvoir monter encore un peu plus la fréquence (target à 70Khz ) de façon à ce que les sonorisation se fassent au mieux.
L'algo utilisé est :
Elles passent actuellement à 60KHz et je réserve 1 bit sur 4 octets pour le son. plus serait pénalisant...J'espère pouvoir monter encore un peu plus la fréquence (target à 70Khz ) de façon à ce que les sonorisation se fassent au mieux.
L'algo utilisé est :
Code : Tout sélectionner
v = echantillon_audio_unsigned() // (0..255)
o = v>=e ? 255: 0
e = e + (o - v);
sortir(o)
-
- Messages : 7923
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
Ok, c'est l'algo initial. Il y a plus de souffle que pour celui avec d2, mais il faut faire attention avec les signés/non signés (en entrée: conversion unsigned->signed. En sortie conversion inverse. Au milieu tout est signed (+/- 128)).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos