HectorDuino

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Carl, Papy.G, fneck

Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Tout à fait, ma 1ere version travaillait en SByte. J'ai vite abandonné pour passer en integer (32 bits signés :wink: )


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 ?
__sam__
Messages : 5602
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

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:

Code : Tout sélectionner

  v = echantillon_audio_signé (-128..127)
  o = v>=e ? 127 : -128
  e = e + (o - v);
  sortir(o>0 ? $FF : $00)
(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:

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
Daniel
Messages : 13415
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel »

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.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

pour les 16MHz va falloir overclocker Hector...

pour le reste, j'ai essayé vite fait...pas concluant...faut encore creuser...
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Petite question dès fois que...

Sommes nous bien d'accord que la sauvegarde d'un fichier WAV sous GoldWave en 8bits, PCM 16Khz :
GoldWave.JPG
GoldWave.JPG (76.23 Kio) Consulté 1530 fois
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) :?:
Notator
Messages : 713
Inscription : 09 août 2015 20:13
Localisation : Lyon

Re: HectorDuino

Message par Notator »

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... :wink:
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 ! :wink:
yves
Messages : 355
Inscription : 12 sept. 2007 21:32

Re: HectorDuino

Message par yves »

__sam__
Messages : 5602
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

Oui, j'ai l'impression que c'est bien ca. 16khz, unsigned 8 bits.

Ca ne marche toujours pas alors ? :cry:
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
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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... :cry:
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. :cry: :cry: :evil:

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 !)
Daniel
Messages : 13415
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel »

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.
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Bien, je comprends que j'aurais rien de bon mais là c'est zéro... :x

[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 !
__sam__
Messages : 5602
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

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.
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
Avatar de l’utilisateur
yo_fr
Messages : 1329
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 8) ) 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)
__sam__
Messages : 5602
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

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
Répondre