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 ? |
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 ' |
Zeph (./0) :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 (./0) :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. « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Zerosquare (./2) :(Faut pas faire ça pour de la musique, çay mal) |
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 « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Cool, merci pour toutes vos réponses Prochaine étape, essayer de générer autre chose qu'un "bip" |
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 et la le mec il le pécho par le bras et il lui dit ' |
ah cool, dans ton code (./1) 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 |
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 Nspire wiki CONDUCTEUR Va-et-vient Des QUATRE MANCHE AVEC DES DIODES |
j'en profite pour passer un petit truc que j'ai envoyé à Zerosquare: http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html http://pouet.net/topic.php?which=8357 et comme d'hab y'a des taré qui font des truc impossible |
ah ouais, en effet |
Zerosquare (./4) :Sur 440 ? 12, rue des Brumeries disponible Nous sommes de bons jardiniers et yaronet est un merveilleux jardin. (Hippopotame) |
Nan, les initiales c'est "AF" ^^ « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Boah, c'est un peu pareil, mais avec beaucoup plus d'amateurs (perso, je n'y vais que pour les avis de matos) 12, rue des Brumeries disponible Nous sommes de bons jardiniers et yaronet est un merveilleux jardin. (Hippopotame) |
Zerosquare (./4) :hélas Zerosquare (./4) :genre "off" r043v (./6) :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. |
- post en double, dsl - |
Pen^2 (./14) :Ce qui est sûr, c'est que tous les programmes sont normalisés avant diffusion. 12, rue des Brumeries disponible Nous sommes de bons jardiniers et yaronet est un merveilleux jardin. (Hippopotame) |
vu le coût énergétique de l'émission radio, c'est sage Nspire wiki CONDUCTEUR Va-et-vient Des QUATRE MANCHE AVEC DES DIODES |
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 « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
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/ 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 |
Comment est généré l'instrument ? « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Wow, classe ! 12, rue des Brumeries disponible Nous sommes de bons jardiniers et yaronet est un merveilleux jardin. (Hippopotame) |
Attends, t'as écrit la mélodie à plusieurs voix etc... ??? oO "MSVC, le soft qui arrive à générer des problèmes à partir de solutions" © |
./23 : 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 ./21 : probablement très mal 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 ^^ |
Boh, moi je le trouve sympa, ce son « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Aaaah, bon, ok, j'ai vraiment cru que t'étais devenu bon un moment "MSVC, le soft qui arrive à générer des problèmes à partir de solutions" © |
Wah, chapeau… Vraiment pas mal pour quelqu'un « qui n'y connait rien » en audio Pour avoir des instruments moins pourraves (tu as trouvé une tonalité qui n'est pas désagréable malgré tout 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à Tu trouveras des paramètres (je parles en connaissance de cause 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. Folco > Si il lit les MIDI, il n'a pas écrit les mélodies, il ne fait que les interpréter… T'as un problème ? Tu veux un bonbon ? [CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes |
GoldenCrystal (./27) :Ç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...) « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
chapo! Zeph (./25) : 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? Nspire wiki CONDUCTEUR Va-et-vient Des QUATRE MANCHE AVEC DES DIODES |