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 : Papy.G, fneck, Carl

Avatar du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 26 oct. 2015 13:33

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 : 5178
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ » 26 oct. 2015 14:04

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),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Daniel
Messages : 12648
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel » 26 oct. 2015 17:43

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 du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 26 oct. 2015 21:34

pour les 16MHz va falloir overclocker Hector...

pour le reste, j'ai essayé vite fait...pas concluant...faut encore creuser...

Avatar du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 27 oct. 2015 20:06

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) Vu 910 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 : 567
Enregistré le : 09 août 2015 20:13
Localisation : Lyon

Re: HectorDuino

Message par Notator » 27 oct. 2015 21:00

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 du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 27 oct. 2015 21:24

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 : 323
Enregistré le : 12 sept. 2007 21:32

Re: HectorDuino

Message par yves » 27 oct. 2015 21:47


__sam__
Messages : 5178
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ » 28 oct. 2015 00:27

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),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Avatar du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 28 oct. 2015 16:15

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 : 12648
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel » 28 oct. 2015 18:45

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 du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 28 oct. 2015 20:05

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 : 5178
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ » 28 oct. 2015 21:26

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),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Avatar du membre
yo_fr
Messages : 1329
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr » 29 oct. 2015 08:30

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 : 5178
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ » 29 oct. 2015 10:14

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),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Répondre