1

Hello,

En relisant la dernière news de Zerosquare et en réalisant une fois de plus mon ignorance totale dans tout ce qui touche de près ou de loin au son, j'ai voulu faire quelques tests et écrire un fichier WAVE tout con qui joue quelques notes.

Ça marchouille à peu près, mais il y a quand même des trucs qui m'échappent. Si je ne me trompe pas, quand on code son fichier en PCM, mettons sur 16 bits et un seul canal, la T-ième valeur représente une approximation sur 16 bits de la position de la membrane à l'instant T (soit à la T/11025-ième seconde si je suis en 11025Hz). Je lis un peu partout que cette valeur peut aller de -32768 à 32767, ok, mais j'ai du mal à voir ce que ça représente. Si je veux jouer une note, il vaut mieux que j'oscille entre -1000 et 1000 ? -10000 et 10000 ? -32768 et 32767 ? Comment choisir une "bonne" valeur, sans qu'elle soit trop faible mais sans non plus qu'elle soit trop proche des limites et m'empêche d'y superposer une seconde note ? Sinon je peux aussi tout normaliser de façon à ce que le max de mon signal soit codé par 32767 et adapter l'échelle à partir de ça, mais je ne sais pas si c'est une bonne idée.

Je suis encore plus perdu pour les WAVE codés directement avec des floats sur 32 bits, je pensais naïvement que les valeurs devaient être entre -1 et 1 mais visiblement c'est pas du tout ça, du coup je ne sais même pas quelles valeurs minimale/maximale peuvent être utilisées, et j'ai un peu de mal à trouver des spécifications là-dessus.

Quelqu'un pour m'éclairer ? grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

ton oreille va entendre les variations pas juste les hauteurs à un instant T, bref une plage, un bip standard est une sinusoïde

tu doit également interpoler tes samples pour accorder leur format avec celui de travail, et à la fin ré-interpoler celui ci avec la vrai sortie si tu veut conserver au mieux la qualité.

chaque sample va pouvoir prendre l'intégralité de la plage, si tu veut mixer deux samples tu va devoir simplement faire la moyenne des deux

tu devrais aller faire un tour du coté des .mod et supérieurs, ouvrir leurs samples et mater un peu ce qui se passe

tu peu regarder ca si tu est intéressé, un parseur de s3m qui va ouvrir le premier sample et le lire : http://procvor.free.fr/download/src/s3lib.Src.rar
et la le mec il le pécho par le bras et il lui dit '

3

Zeph (./1) :
Si je veux jouer une note, il vaut mieux que j'oscille entre -1000 et 1000 ? -10000 et 10000 ? -32768 et 32767 ? Comment choisir une "bonne" valeur, sans qu'elle soit trop faible mais sans non plus qu'elle soit trop proche des limites et m'empêche d'y superposer une seconde note ?
Si tu additionnes des signaux qui ne sont pas corrélés entre eux (ce qui est le cas de notes de musique en général), il te faut une plage de représentation qui va de la somme des minima à la somme des maxima. C'est une borne supérieure, en général le signal global n'atteint pas ces limites, mais tu ne peux pas le savoir à priori. Par conséquent, si tu as n notes simultanées qui ont toute le même volume, chacune ne doit pas dépasser la plage [-32767/n ; +32767/n].

Attention, le n est constant (c'est le maximum de notes simultanées que tu te fixes à l'avance), et non pas égal au nombre de notes qui tu joues à l'instant t. Sinon le volume de chaque note va varier en fonction des autres, et ça ne sonne pas naturel.

Si tu veux maximiser le volume, tu as deux solutions :

- celle que tu as évoquée, mais qui a pour inconvénient que tu dois générer d'abord tout le morceau pour trouver les maxima, et aussi que le volume de sortie dépendra du morceau joué

- un compresseur de dynamique, qui va faire varier le volume global en permanence pour se rapprocher du maximum possible. Là c'est plus complexe, je te conseille de ne pas commencer par là.
Zeph (./1) :
Je suis encore plus perdu pour les WAVE codés directement avec des floats sur 32 bits, je pensais naïvement que les valeurs devaient être entre -1 et 1 mais visiblement c'est pas du tout ça, du coup je ne sais même pas quelles valeurs minimale/maximale peuvent être utilisées, et j'ai un peu de mal à trouver des spécifications là-dessus.
J'ai jamais creusé la question, mais je me rappelle vaguement que c'est pas standardisé et qu'il y a au moins 2 façons d'interpréter les valeurs. Au niveau compatibilité c'est pareil, pas sûr que tous les softs acceptent de relire des WAVE avec des flottants.

Je peux me renseigner si tu veux.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

Zerosquare (./3) :
- un compresseur de dynamique, qui va faire varier le volume global en permanence pour se rapprocher du maximum possible. Là c'est plus complexe, je te conseille de ne pas commencer par là.
(Faut pas faire ça pour de la musique, çay mal)

5

Dans l'absolu oui, mais en même temps c'est vraiment très utilisé, même sur des morceaux calmes; le tout est de choisir des paramètres pas trop "agressifs" .
(et je pense qu'il vaut mieux pas qu'on démarre là-dessus, vu que dans un forum de musiciens que je fréquente, ça a tourné au topicàtroll de plus de 100 pages tongue)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

Cool, merci pour toutes vos réponses smile

Prochaine étape, essayer de générer autre chose qu'un "bip" grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

je m'en servais tout le temps, c'est surtout utile pour réguler le niveau sonore entre les morceaux

en tout cas ca manque vraiment sur les tv, ca calmerais les ardeurs des pubs embarrassed
et la le mec il le pécho par le bras et il lui dit '

8

ah cool, dans ton code (./2) il y a un bout de code pour utiliser l'api WaveOut, ça m'évitera de générer un wav que j'ouvre avec winamp ensuite grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

pour générer autre chose qu'un bip, il faut prévoir une enveloppe (attaque maintien et le 3e bout, la fin, dont je sais plus le nom)

et puis faut prévoir des harmoniques (ajouts de multiples de la fréquence)

ça parait évident mais on sait jamais smile

10

Edited_3677

11

ah ouais, en effet grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

12

Zerosquare (./5) :

(et je pense qu'il vaut mieux pas qu'on démarre là-dessus, vu que dans un forum de musiciens que je fréquente, ça a tourné au topicàtroll de plus de 100 pages tongue.gif )
Sur 440 ? grin Une des raisons pour lesquelles je refuse d'y mettre les pieds : c'est pire qu'ici grin
avatar

13

Nan, les initiales c'est "AF" ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

14

Boah, c'est un peu pareil, mais avec beaucoup plus d'amateurs (perso, je n'y vais que pour les avis de matos)
avatar

15

Zerosquare (./5) :
c'est vraiment très utilisé
hélas tsss
Zerosquare (./5) :
le tout est de choisir des paramètres pas trop "agressifs" .
genre "off" #modui#
r043v (./7) :
en tout cas ca manque vraiment sur les tv, ca calmerais les ardeurs des pubs redface.gif
Au contraite, il me semble que c'est justement ce qui est utilisé pour tout ramener à fond. Pareil pour les radios moisies. C'est pour ça qu'on a l'impression que le présentateur et les gens dans les pubs hurlent.

16

- post en double, dsl -

17

Pen^2 (./15) :
Au contraite, il me semble que c'est justement ce qui est utilisé pour tout ramener à fond.
Ce qui est sûr, c'est que tous les programmes sont normalisés avant diffusion.
avatar

18

vu le coût énergétique de l'émission radio, c'est sage grin

19

Oh le coût il s'en tapent, c'est pour maximiser le rapport signal/bruit dans les zones où la réception est difficile, et aussi pour "sonner plus fort" que le voisin.

Ceci dit on va peut être éviter de dévier le topic de Zeph hehe
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

20

21

Ayé, j'ai mon convertisseur midi -> wave qui ne connait qu'un seul instrument "fait main" tout moisi, n'a aucune connaissance du tempo, du volume ou de quoi que ce soit d'autre, mais youhou, je suis quand même content du résultat \o/

[flash=200,20]http://www.mirari.fr/module/file/player/dewplayer.swf?mp3=http%3A%2F%2Fwww.mirari.fr%2FuUFS[/flash]
[flash=200,20]http://www.mirari.fr/module/file/player/dewplayer.swf?mp3=http%3A%2F%2Fwww.mirari.fr%2FzWdi[/flash]
[flash=200,20]http://www.mirari.fr/module/file/player/dewplayer.swf?mp3=http%3A%2F%2Fwww.mirari.fr%2FUcRz[/flash]

Prochaines étapes, comprendre comment faire des instruments moins nazes et gérer autre chose qu'un unique évènement "note" dans les midis ^^

• Zeph à la conquête du monde 8 bits
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

22

top

Comment est généré l'instrument ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

23

Wow, classe !
avatar

24

Attends, t'as écrit la mélodie à plusieurs voix etc... ??? oO

25

./24 : non non, la mélodie vient d'un fichier midi, je n'ai fait que le lire et créer un fichier wave reproduisant certaines de ses pistes smile

./22 : probablement très mal grin

Je suis parti d'une note de piano trouvée sur internet, FFT dessus pour récupérer les coefficients des harmoniques, et je n'ai gardé que les 8 premiers. Ensuite pour chaque note que je veux générer, je multiplie ma fréquence de base et ses harmoniques (associées à leurs facteurs respectifs) un signal sinusoïdal, qui vient s'ajouter au signal final. Je déphase chaque harmonique pour éviter d'avoir des pics trop hauts, mais c'est un déphasage bidon donc ça ne sert surement à rien (il faudrait que je trace visuellement le signal pour vérifier). J'applique une enveloppe croissante linéaire jusqu'à 10ms et exponentielle décroissante sur la fin de la note. Tout ça me donne cette merveilleuse sonorité "piano Bontempi", je ne sais pas faire beaucoup mieux pour le moment ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

26

Boh, moi je le trouve sympa, ce son cheeky
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

27

Aaaah, bon, ok, j'ai vraiment cru que t'étais devenu bon un moment embarrassed </enfoiray>

28

Wah, chapeau… Vraiment pas mal pour quelqu'un « qui n'y connait rien » en audio top
Pour avoir des instruments moins pourraves (tu as trouvé une tonalité qui n'est pas désagréable malgré tout oui) après faut soit expérimenter, soit faire (ou se procurer, je sais pas si ça se trouve plus facilement aujourd'hui) une étude physique d'un instrument cheeky (Ne garder que la partie qui concerne la tonalité générée, et jeter tout le reste trioui)

Cela dit, un bon point de départ (peut être plus simple, peut-être pas !) à ce sujet peut être de regarder comment étaient programmés les instruments faits pour jouer du MIDI sur les cartes type AdLib/SoundBlaster, même si cela demandera un peu d'interprétation (Souvenirs… Dommage que je ne pigeais pas grand chose au sujet quand j'ai bidouillé ces trucs là sad)
Tu trouveras des paramètres (je parles en connaissance de cause grin) d'instruments dans les données de certains jeux genre Duke Nukem. (Je n'avais pas parfaitement compris le format exact à l'époque, mais en balançant directement les valeurs dans les registres audio j'avais réussi à obtenir des choses qui sonnaient comme des instruments MIDI (genre piano)… En fait ça marchait à moitié car il manquait certaines tonalités cheeky)

Perso j'ai en projet un truc de ce genre (je vise plutôt un synthétiseur totalement reconfigurable qu'un lecteur de MIDI ^^) depuis que j'ai commencé à implémenter le son (une abominable fréquence pure) dans mon émulateur. Ton topic m'a redonné envie de me plonger un peu là dedans. smile

Folco > Si il lit les MIDI, il n'a pas écrit les mélodies, il ne fait que les interpréter… smile
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

29

GoldenCrystal (./28) :
Pour avoir des instruments moins pourraves (tu as trouvé une tonalité qui n'est pas désagréable malgré tout oui.gif ) après faut soit expérimenter, soit faire (ou se procurer, je sais pas si ça se trouve plus facilement aujourd'hui) une étude physique d'un instrument mod.gif (Ne garder que la partie qui concerne la tonalité générée, et jeter tout le reste trioui.gif )
Ça c'est la modélisation physique ; c'est une bonne idée sur le papier, mais c'est pas évident en pratique. Y'a quelques instruments (l'orgue, ou la guitare) pour lesquels il existe des algos simples qui donnent des résultats corrects, mais pour d'autres c'est même pas la peine d'y penser (le piano par exemple).

Si tu veux des sonorités réalistes, y'a pas vraiment d'autres solutions que les banques de sons ; en cherchant "soundfonts" sur Google tu en trouveras pas mal, et il y a aussi les fichiers prévus pour Timidity sous Linux (qui est un synthé MIDI software basé sur ce principe).

Par contre si tu cherches pas vraiment à reproduire des instruments existants, y'a plein de techniques de synthèse audio qui existent (additive, soustractive, modulation de fréquence/de phase, formants, granulaire...)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

30

chapo!
Zeph (./26) :
Je déphase chaque harmonique pour éviter d'avoir des pics trop hauts, mais c'est un déphasage bidon donc ça ne sert surement à rien (il faudrait que je trace visuellement le signal pour vérifier)

les déphasages sont potentiellement utiles non? je sais pas trop.
Regarde ce que donne la fft, normalement tu obtiens un résultat complexe x(f)+iy(f), l'amplitude c'est sqrt(x^2+y^2) et la phase arctan2(y,x). Normal.

pour info c'est quoi les amplitudes relatives de chaque harmonique par rapport au fondamental? grin