IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Synthèse, acquisition et traitement des signaux sonores, création d'un synthé virtuel


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    producer
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : producer

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Synthèse, acquisition et traitement des signaux sonores, création d'un synthé virtuel
    Quelque notions pour avancé dans cette thématique...

    Le son, qui est une onde vibratoire, est représenté graphiquement par une oscillation mettant en rapport le temps et l'amplitude acoustique (dans un cadre naturel dbA) ou électrique (dans un cadre artificiel dbU).
    par exemple un son aigu a une périodicité plus courte qu'un son grave.
    Nom : 440hz.JPG
Affichages : 2099
Taille : 18,2 Ko Nom : 1200hz.JPG
Affichages : 1964
Taille : 15,1 Ko
    un son grave
    un son aigu
    Nom : freqnote.JPG
Affichages : 2300
Taille : 93,6 Ko
    Un oscillateur génère des signaux périodique tel qu'une fréquence ou un ensemble de fréquence voir même un bruit (ensemble contenant toute les fréquence sonore perceptible a une même amplitude)
    Il existe plusieurs forme d'oscillation (onde carré, onde a dent de scie, ect...)
    Un filtre atténue ou exacerbe une partie du spectre sonore.

    bon, alors je lance le sujet mais en réalité je comprend pas encore vraiment comment tout cela se caractérise dans un code source, mais je compte bien le découvrir avec vous dans ce topo...


    Comment l'ordinateur génère et interprète des signaux sonore?
    -allocation de la mémoire
    -bit/ms
    architecture d'un oscillateur en c?
    - synthèse additive
    - synthèse soustractive
    - synthèse fm
    architecture d'un filtre en c?
    -passe bas
    -passe haut
    -filtre formantique
    -filtre rejecteur de bande (ou cloche)
    -Filtre en peigne
    architecture d'une enveloppe en c?
    -l'attaque
    -le déclin
    -le maintien
    -le relâchement
    le midi?

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Je ne suis pas expert dans le sujet, mais je m'y suis déjà un peu intéressé d'un point de vue de physicien.

    En premier point d'entrée pour l'informatique, tu peux regarder dans les codes sources d'audacity, pour la manipulation de son arbitraire.

    Il existe aussi LMMS (Linux MultiMedia Studio), qui est un outil de composition audio.
    LMMS fonctionne grâce à des synthétiseurs (notamment un tri-corde). C'est dans les sources de ces synthétiseurs que tu auras des précisions.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Citation Envoyé par jmmk07 Voir le message
    bon, alors je lance le sujet mais en réalité je comprend pas encore vraiment comment tout cela se caractérise dans un code source, mais je compte bien le découvrir avec vous dans ce topo...

    Comment l'ordinateur génère et interprète des signaux sonore?
    Soit il pilote des périphériques de synthèse dédiés à cette tâche (aujourd'hui assez rare sauf dans les milieux spécialisés), soit il fonctionne tout simplement par échantillonnage : la tension électrique est mesurée n fois par seconde avec une résolution suffisante pour la restituer proprement. L'oreille humaine peut percevoir des sons jusqu'à 20.000 à 22.000 Hertz, et les théorèmes de Shannon nous indiquent qu'il faut au moins échantillonner au double d'une fréquence pour faire une restitution correcte. Donc 44100 Hz sur CD par exemple. Par ailleurs, 1 octet (8 bits) permet de représenter 256 niveaux de tension entre le minimum et le maximum, ce qui est acceptable pour un public address ou des petits systèmes de transmission, mais pas pour une qualité audiophile. 2 octets (16 bits) permettent en revanche de représenter 65536 niveaux différents, ce qui est bien en dessous du bruit naturel observé même dans un système de bonne qualité. Si tu veux en plus enregistrer en stéréo, il faut multiplier le tout par deux (une voix par oreille).

    Ce qui nous donne donc : 1 seconde de son qualité CD = 44100 × 2 × 2 = 172 Kio de données. Et une heure de son au même rythme : 605 Mio, soit exactement la capacité d'un CD-Rom.

    En fait, quand le CD est sorti au début des années 1980, la révolution se trouvait dans la capacité phénoménale (pour l'époque) du support, qui rendait possible un tel stockage. À titre de comparaison, au même moment sortaient l'IBM PC (premier du genre), le Minitel, le TO7 puis le MO5. Par contre, faire un système qui lisait linéairement le disque et envoyait tranquillement ses données vers un convertisseur numérique analogique était trivial.

    Il a fallu une bonne dizaine d'années pour que le CD Audio soit porté sur les ordinateurs (le temps que l'informatique grand public prenne également son envol et que les machines se mettent à niveau) et que l'on se serve de cet espace pour stocker des données, formant ainsi le CD-Rom. C'est à la même époque que l'académie française nous a pondu le néologisme ridicule « cédérom ». Il faut dire que c'est au moment de leur apparition que les applications multimédia ont commencé à éclore sur les PC domestiques. On a attribué ces possibilités au CD alors que c'est l'ordinateur lui-même qui les émulait. Le CD n'était qu'une grosse disquette… à ceci près que la disquette était vraiment très grosse ! L'équivalent de 430 disquettes de l'époque sur un seul disque ! Du coup, ce qui était techniquement possible pour l'ordinateur mais infaisable pour raisons de stockage et de temps d'accès l'est devenu subitement.

    Vu sous cet angle, les données audio exploitées par un ordinateur sont des données ordinaires. Elles sont stockées dans de gros fichiers qui sont manipulés comme les autres, et peuvent être soumis aux mêmes traitements, notamment à la compression. Pour être efficace, il faut utiliser des algorithmes adaptés aux données sonores, mais le MP3 par exemple, permet de diviser par 11 la taille initiale d'un fichier sonore (avec destruction tout de même).

    Pour restituer les sons échantillonnés, il suffit de les envoyer à la bonne cadence vers un convertisseur numérique analogique. Le plus simple d'entre eux consiste à aligner n résistances en série en doublant à chaque fois la valeur de la précédente, de tirer une ligne entre chacune d'entre elle, de relier chaque ligne à un bit de la donnée, et de récupérer la tension au bout du réseau ainsi formé. Ainsi, on peut se bricoler une carte son du pauvre pour quelques euros en utilisant le port parallèle, par exemple.

    -allocation de la mémoire
    malloc() er free().

    -bit/ms
    architecture d'un oscillateur en c?
    Il n'y a pas d'oscillateur en C, et le langage C n'est pas spécialement dédié au traitement du son plus qu'autre chose. C'est un langage qui permet de produire des exécutables autonomes en langage machine, très proches du matériel et ne reposant — a priori — sur aucune architecture sous-jacente. C'est pour cela qu'il est très utilisé pour le développement logiciel.

    Pour traiter du son en particulier, soit tu pilotes toi-même le matériel, soit tu réécris toi-même les fonctions mathématiques nécessaires à cette opération, soit encore (et c'est là la meilleure solution), tu utilises des bibliothèques écrites et proposées par des gens qui se sont déjà penchés sur le problème et y ont travaillé longtemps. Par exemple OpenAL : http://fr.wikipedia.org/wiki/OpenAL

    Sans aller jusque là, les différents systèmes d'exploitation proposent tous, aujourd'hui, des primitives rudimentaires permettant de jouer un son sans avoir à s'appuyer sur de grosses infrastructures. Leur tâche principale consiste en fait à communiquer avec les pilotes des différentes cartes son proposées sur le marché et à présenter cela de manière unifiée à l'utilisateur.

    Donc, la première chose que tu vas devoir faire est un tour d'horizon des solutions existantes en la matière, en choisir une et te l'approprier : toutes les opérations qui t'intéressent te seront proposées sous la forme d'une API, composées de différentes fonctions qu'il faudra appeler pour obtenir le résultat escompté.

    - synthèse additive
    - synthèse soustractive
    - synthèse fm
    architecture d'un filtre en c?
    -passe bas
    -passe haut
    -filtre formantique
    -filtre rejecteur de bande (ou cloche)
    -Filtre en peigne
    architecture d'une enveloppe en c?
    -l'attaque
    -le déclin
    -le maintien
    -le relâchement
    Toutes ces applications vont l'être sur des données échantillonnées, donc des valeurs entières, relevées ponctuellement et à intervalle fixe. Autrement dit, ce sont des valeurs discrètes. Il faut donc utiliser les méthodes mathématiques appliquées aux valeurs discrètes, comme en stats. Par exemple, la transformée de Fourrier discrète : http://fr.wikipedia.org/wiki/Transfo..._discr%C3%A8te

    À noter que ta machine n'aura pas spécialement conscience de traiter du son. Elle traiterait des séquences génétiques de la même façon, par exemple.

    le midi?
    MIDI signifie Musical Instrument Digital Interface ou « Interface Numérique des Instruments de Musique ». C'est une technologie qui est née en même temps que celles citées ci-dessus, c'est-à-dire au début des années 1980. En principe elle est applicable à n'importe quel instrument de musique. En pratique, elle va surtout être efficace avec les claviers. Il s'agit simplement d'une interface série considérée aujourd'hui comme lente et qui ne charrie que le code de la note jouée (comprendre surtout : celui de la touche enfoncée), et quelques paramètres permettant de lui donner de l'effet, comme sa durée, son amplitude éventuelle et durées respectives des fameux Attack Decay Sustain Release permettant en principe de décrire le comportement d'une note sur presque tous les instruments normaux.

    Présenté autrement, le MIDI ne transporte que la partition de la mélodie à jouer. À charge à l'instrument connecté de la reproduire correctement, instrument qui peut éventuellement être un ordinateur.

    Et justement, pour ce faire, si aujourd'hui l'échantillonnage est omniprésent, ça n'a pas toujours été le cas. Il a fallu beaucoup de temps pour que nous soyons tous équipés de mémoires phénoménales. Et il est de fait qu'un fichier MIDI qui contient simplement la liste des notes à jouer et pas l'information sonore elle-même est ridiculement faible par rapport à celle d'un fichier échantillonné. En 1992 par exemple, les PC n'étaient encore livrés qu'avec 4 Mo de mémoire et en 1986, entre 256 Kio et 512 Kio (16 fois moins). C'était donc parfaitement adapté aux logiciels de l'époque et c'était la façon normale de sonoriser un jeu par exemple.

    Les premières cartes son, si elles ont tout de suite été capables d'échantillonnage, étaient donc surtout équipées d'oscillateurs en cascade pour faire de la synthèse sonore. C'était le cas notamment des Sound Blaster, gros succès commercial de l'époque, et qui donnaient le son métallique caractéristique des fichiers MIDI que l'on jouait sur nos machines. Ceux qui avaient les moyens investissaient parfois dans un appareil externe type Korg qui donnaient une toute autre dimension (je me souviens de parties de Doom mémorables chez un ami), mais il en reste que reproduire par la synthèse un instrument à la perfection aurait nécessité une quantité invraissemblables d'oscillateurs et des équations qui auraient nécessité une vie humaine pour être mises au point.

    Parallèlement, avec l'augmentation de la mémoire disponible, il devenait plus facile et plus intéressant de numériser directement l'instrument à jouer. C'est ce que fait par exemple timidity avec freepats. Au départ, on ne numérisait qu'une seule touche et on la jouait à différentes fréquences. Aujourd'hui, on numérise individuellement chacune des notes. Autant que je sache, tous les synthétiseurs fonctionnent comme cela ajourd'hui.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Merci Obsidian, c'était très instructif.

    ce n'étais pas moi qui demandait, mais j'ai appris.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par jmmk07 Voir le message
    Comment l'ordinateur génère et interprète des signaux sonore?
    -allocation de la mémoire
    -bit/ms
    architecture d'un oscillateur en c?
    - synthèse additive
    - synthèse soustractive
    - synthèse fm
    architecture d'un filtre en c?
    -passe bas
    -passe haut
    -filtre formantique
    -filtre rejecteur de bande (ou cloche)
    -Filtre en peigne
    architecture d'une enveloppe en c?
    -l'attaque
    -le déclin
    -le maintien
    -le relâchement
    le midi?

    Bon, on commence par où?

    Je vais poser 3 questions:

    - Quel synthé tu veux faire?
    - Dans quel environnement?
    - A quel niveau de détail?

    Quel synthé? Il y a effectivement l'additif, pas bien facile à exploiter si tu n'as pas une base de données d'instruments avec l'évolution de leurs partiels. Question machinerie, c'est juste un banque massive d'oscillateurs sinosoïdaux.

    Il y a le soustractif, qui dérive du synthé modulaire dont le Moog est l'archétype. Les blocs de base sont le VCO (Voltage Controlled Oscillator), VCF (Voltage Controlled Filter), VCA (Voltage Controlled Amplifier) et enveloppe. Plus difficile qu'on le croirait à transposer en numérique (il faut s'y être frotté pour comprendre le débat son digital vs. son analogique).

    La FM permet de produire des spectres intéressants avec une économie de calcul, archétype YAMAHA DX7.

    Tu as oublié le modèle physique (on modélise la physique d'une corde ou d'une colonne d'air qui vibre); le sampling (on remplit des tables avec des sons captés ou synthétisés et on les lit pour produire un son). Il y en a d'autres mais on va s'arrêter là.


    Quel environnement? Tu veux en jouer comment? Comme un manchot avec une souris? Depuis un clavier ou des contrôleurs MIDI? Ca va dicter ton environnement de programmation. Si tu veux faire un synthé complet en C avec MIDI, rendez-vous dans 3 ans.


    Quel niveau de détail? Est-ce que tu veux apprendre dans le détail comment on fait un oscillateur, un filtre? Ou te contenter d'assembler des modules pré-programmés. La première approche est pédagogique mais aussi trés laborieuse. La seconde est productive mais l'inconvénient est que tu fais l'impasse sur le fonctionnement interne. Tu assembles des fonctions dont tu ne connais pas le fonctionnement interne. A un certain niveau, ça devient inévitable si on ne veut pas y passer 3 vies.

    La palette de langages que tu as a ta disposition est large.
    http://en.wikipedia.org/wiki/Audio_programming_language

    Dans le tas, je distingue deux familles:

    - Les langages graphiques : Max/MSP, PureData, Reaktor... Tu tires des ficelles entre des boîtes. Au plus haut niveau, tu as Nord Modular G2 qui permet de produire des Moogs à la pelle, et bien plus. La plupart sont commerciaux sauf PureData et OpenMusic. Tout est temps-réel et MIDI.

    - Les langages textuels : CMusic, Chuck, Faust, etc. On oublie le temps-réel et le MIDI, on revient à la musique calculé de MUSIC V en 10000 fois plus puissant. Jette un oeil sur Chuck, c'est libre et tu verras la puissance d'une langage audio. Tu t'économises des centaines d'heures de C mais, comme je l'ai dit, tu n'apprends pas les détails.

    Pour être complet, MATLAB/OCTAVE offre une bonne plate-forme d'étude, qui permet de mettre au point les algos avant de les implémenter dans la plate-forme cible (temps-réel, MIDI). Vu tes questions, je commencerais par prototyper en MATLAB puis implémenter en C.

    Pour la théorie, je ne connais pas de meilleure référence que celles-ci:
    https://ccrma.stanford.edu/~jos/
    https://ccrma.stanford.edu/realsimple/

    On peut maintenant passer aux détails

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par jmmk07 Voir le message
    architecture d'un oscillateur en c?
    - synthèse additive
    - synthèse soustractive
    - synthèse fm
    C'est le même. Le bloc de base de la synthèse est le VCO, Voltage Controlled Oscillator. Cette appelation est héritée de l'analogique. Bien sûr, il n'y a plus de voltage mais un paramètre numérique de contrôle. Dans toute architecture de synthé, on a deux flux de données : les données audio, et les données de contrôle (fréquences, niveaux, etc).

    Le VCO a une entrée de contrôle qui fixe sa fréquence, et une sortie audio. Il a un paramètres qui est la forme d'onde : sinus, carré, rampe, triangle (pour le soustractif; Pour l'additif et la FM, le sinus suffit).

    Trés souvent, on part d'une rampe (dent de scie) et on dérive les autres formes d'onde par wavetable : la valeur de la rampe est utilisé comme index d'une table qui contient la forme d'onde. La rampe n'est autre que la phase, repliée entre 0 et 1.

    Pour faire un sinus (par exemple), on va remplir une fois pour toutes une table avec une période d'un sinus (la fameuse wavetable) et l'indexer avec la rampe. On interpole pour minimiser les erreurs. Si tu ne cherches pas à économiser les ressources, tu peux tout simplement appeler sin(ramp).

    So far so good. Ca sonne horrible, mes oreilles saignent!

    Parce que la rampe numérique contient des fréquences infinies. C'est une erreur de croire que la conversion analogique va les supprimer. Elle va les replier à fe/2-f et le résultat sonore est épouvantable.

    Bienvenue dans le numérique.

    C'est là que ta wavetable va te sauver. Parce que tu vas "anti-aliaser" (ou "bande-limiter") son contenu de sorte qu'il ne contienne pas de fréquence au-dessus de fe/2. Ca peut se faire par synthèse de Fourier, par filtrage, par sur-échantillonnage. Ce n'est à faire qu'une fois et peut être préparé à l'avance et chargé en fichier.

    Petit exemple. ATTENTION!!! C'EST DE L'OCTAVE, IL PEUT Y AVOIR DES RETOUCHES A FAIRE POUR MATLAB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    clear all; fig=1;
     
    fsam = 44100;
     
    %
    % Controle de fréquence
    %
     
    notes = [60 62 64 60 65 62 67  64 69 65 71  67 72];
    duree = 0.2 * fsam;	% Durée de chaque notes, en samples
     
    freq = [];	% Ceci est notre contrôle frequence(t)
     
    for i=1:size(notes,2)
    	% Conversion MIDI -> Hz
    	f = 440 * exp(0.057762265 * (notes(i) - 69))
    	freq = [freq; f*ones(duree,1)];
    end
     
    figure(fig++, 'name', 'frequence'); 
    plot (freq);
     
    %
    % Calcul du phaser
    %
     
    phase = cumsum (freq);				% Intégration de la phase
    phaser = mod (phase/fsam, 1.0);		% Repliement sur [0,1]
     
    figure(fig++, 'name', 'phaser (debut seulement)'); 
    plot(phaser); axis ([0,1000,-1,2]);
     
    %
    % Wavetable non anti-aliasée
    %
     
    tsize = 512;
    wave_sans = zeros (tsize,1);
    wave_sans (1:tsize/2) = +1;
    wave_sans (tsize/2+1:tsize) = -1;
     
    figure(fig++, 'name', 'wavetable sans anti-alias');
    plot(wave_sans); ylim ([-2,+2]);
     
    %
    % Wavetable anti-aliasée (Fourier)
    %
     
    wave_avec = zeros (tsize,1);
    index = (0:tsize-1)';
    for n = 1:5
    	harmo = 2*n-1
    	ampl = 1/harmo;
    	wave_avec = wave_avec + ampl * sin(2*pi*harmo*index/tsize);
    end
     
    figure(fig++, 'name', 'wavetable avec anti-alias');
    plot(wave_avec); ylim ([-2,+2]);
     
     
    %
    % Passage du phaser dans les wavetables
    %
     
    index = floor(1 + phaser*(tsize-1)); % De [0..1] vers [1..tsize]
     
    out1 = wave_sans(index);		% Waveshaping
    out2 = wave_avec(index);		% Waveshaping
     
    figure(fig++, 'name', 'waveshaping sans anti-alias');
    plot(out1); ylim ([-2,+2]); axis ([0,1000,-2,+2]);
     
    figure(fig++, 'name', 'waveshaping avec anti-alias');
    plot(out2); ylim ([-2,+2]); axis ([0,1000,-2,+2]);
     
    wavwrite(0.9*phaser,fsam,'phaser.wav');
    wavwrite(0.9*out1,fsam,'sans.wav');
    wavwrite(0.9*out2,fsam,'avec.wav');
    On part de quelques notes exprimées en échelle MIDI. On construit la fonction de fréquence, c'est le "voltage" de VCO. Dans un vrai synthé, ce signal arriverait du clavier.

    On intègre la phase, ce qui nous donne la fréquence instantanée. On produit la dent de scie (phaser) par simple repliement sur [0..1]. Le phaser est sauvé en WAVE, c'est commode pour le contrôle. J'ai mis un 0.9 de sécurité (le format WAV est entier, il vaut mieux ne pas flirter avec -MaxInt +MaxInt).

    On va maintenant le conformer par "waveshaping", c.a.d. s'en servir comme d'un index dans une table d'onde. J'ai choisi une onde carré pour qu'on voie bien ce qui va se passer. C'est juste un exemple.

    La première table d'onde (wave_sans) est sans anti-alias. C'est +1 sur la première moitié et -1 sur la seconde moitié. C'est donc un signal carré parfait.

    Le seconde table d'onde (wave_avec) est obtenue par sommation des 5 premiers partiels d'un signal carré. C'est de la synthèse de Fourier. On a la garantie qu'il n'y a pas de contenu fréquentiel supérieur à la 9ème harmonique (les partiels d'un carré sont 1, 3, 5, 7, 9...). Les ondulations, c'est le "phénomène de Gibbs" et là c'est pas un défaut, c'est le but recherché: limiter le spectre.

    On transforme notre phaser [0..1] en index [1..tsize-1]. Finalement, on s'en sert pour indexer l'une ou l'autre des wavetables. ATTENTION, ici il faut rajouter l'interpolation.

    Voila pour un oscillateur destiné à la musique. Il est plus spécialement orienté synthèse soustractive. Pour l'additif ou la FM, on peut concevoir d'emblée un oscillateur sinus. C'est selon la plate-forme, les performances attendues, l'humeur du programmeur.
    Images attachées Images attachées   

  7. #7
    Futur Membre du Club
    Homme Profil pro
    producer
    Inscrit en
    Juillet 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : producer

    Informations forums :
    Inscription : Juillet 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    merci pour vos réponses, aussi claire que constructive.

    "- Quel synthé tu veux faire? - Dans quel environnement?"
    je suis plus attiré par la synthèse soustractive, je voit bien un module avec une section oscillateur une section filtre et une matrice de modulation ou je pourrais définir la destination des enveloppes.
    ce soft pourrais interagir avec l’extérieur via le midi, afin de recevoir des ordre depuis un séquenceur...

    - A quel niveau de détail?
    haut niveau de détail!
    si j'apprend la programmation c'est dans le but de relancer ma créativité et pour l'orienter j'ai deux projets:

    -réaliser un petit synthé virtuel dans le but d'aborder et de comprendre l'audio en programmation, c'est à but d’apprentissage... Donc oui, je veux apprendre a créer des vco, les filtres...
    utiliser des modules pré-programmé, je fait depuis dix ans (reason), maintenant je veux faire mes propre module ^^

    parallèlement,
    -réaliser un petit soft léger qui pourrais contrôler le séquenceur de reason, via le protocole rewire;
    j'y définirais des emplacement temporel que je pourrais appeler depuis mon clavier.

    Je vais lire dejas toute les info que vous m'avais donnés, merci encore, a demain.

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par jmmk07 Voir le message
    je veux apprendre a créer des vco, les filtres... je suis plus attiré par la synthèse soustractive, je voit bien un module avec une section oscillateur une section filtre et une matrice de modulation
    Parfait. On est sur les rails. Le soustractif est intuitif, chaque paramètre a un effet évident sur le son. Et puis c'est fun, on retrouve le son des seventies. Une fois absorbés les algos, on tombe sur un problème d'architecture logicielle intéressant. Comment on va séquencer tous ces modules? Il est rarissime qu'on travaille au niveau de l'échantillon, c'est-à-dire à 20 microsecondes. On préfère des blocs. Un module reçoit un bloc de données, produit un bloc de donnée, qui est transmis à un autre module. Si le bloc fait 256, la période du séquenceur ("scheduler", pas séquenceur audio) est de 5-6ms. C'est aussi à cette période qu'on met à jour les paramètres de contrôle tels que fréquences, amplitudes, etc... Si le synthé est modulaire (je veux brancher la sortie de telle module sur l'entrée de tel autre), on a en plus un joli problème de "patch" qui se traduit informatiquement par un graphe d'exécution qui reflète les dépendances entre modules. Y'a à boire et à manger, plus rab de dessert.

    Avec ces pré-requis, je doute qu'il y ait un autre choix que C. Pour le MIDI, voir l'API de ta plate-forme. Pour Rewire, Propeller Head est franchement pénible pour donner son SDK. C'est hiérarchique, il faut appartenir à une compagnie enregistrée.

    Edit: 'tain, j'ai oublié la polyphonie.

  9. #9
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    Bonjour à tous,

    c'est super comme projet.

    Pour info, tu peux trouver des codes source et t'en inspirer. Je ne sais pas si tu connais Mutable Instrument, mais ils construisent et vendent des synthés, des modules pour synthé modulaire, des modules MIDI etc dans l'esprit "open source" et "open hardware" : ils publient donc leur code, leurs schémas.

    Par contre, je pense que tu as mal interprété ce dont parle jyber : les modules pré-programmés. Je connais Reason, je l'utilise depuis un moment, et là ce sont plutôt des module de sons, que tu ne peux pas utiliser dans ton propre code de toute façon puisque c'est un logiciel propriétaire.
    A mon avis (corrigez-moi si je me trompe), Jyber parlait plutôt de modules de code. Au sens où, plutôt que de tout développer en partant de zéro, tu utiliserais par exemple un module de code qui gère un VCF, un module de code qui gère un VCO, et tu écris ton propre code pour faire communiquer ces deux modules ensemble.

    Edit : pour ce qui est du MIDI c'est de la communication série. Tu dois pouvoir faire des choses super intéressantes même en hardware, par exemple avec une carte Arduino.

  10. #10
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par antoinev2 Voir le message
    A mon avis (corrigez-moi si je me trompe), Jyber parlait plutôt de modules de code. Au sens où, plutôt que de tout développer en partant de zéro, tu utiliserais par exemple un module de code qui gère un VCF, un module de code qui gère un VCO, et tu écris ton propre code pour faire communiquer ces deux modules ensemble.
    Ce sont des modules mais fermés, au sens où on ne voit pas le code. Ils sont souvent assemblés graphiquement. C'est le cas de Reaktor, Max/MSP, PureData.

    Exemple de patch Reaktor: http://media.soundonsound.com/sos/ju...aktor06023.gif
    Exemple de patch Max/MSP: http://rhoadley.org/images/screenshots/max-msp/msp1.gif

    Il existe aussi des langages symboliques (du texte donc) qui manipulent des modules de même niveau. Je pense que notre ami jmmk07voulait apprendre à programmer ces modules en C. Il ira moins loin, mais c'est plus pédagogique. Il saura comment c'est fait "à l'intérieur". Grosso modo, il faut une après-midi pour faire un synthé soustractif polyphonique en Max/MSP (si on connaît ce dernier sur le bout des doigts) et ... beaucoup plus pour le faire en C.

    Petit détail: Max/MSP $319; Reaktor 399€.

    Le MIDI est série, historiquement oui. Mais aujourd'hui on le ballade sur USB, sur Ethernet, ainsi que sur UDP/OSC en réseau local. On ne voit pratiquement plus de câbles MIDI dans les studio, sauf pour intégrer les périphs vintage ou pré-USB. La synthèse logicielle est venue balayer tout ça, mais le code MIDI reste au coeur des DAW(*) modernes. Le séquenceur envoie du MIDI aux plugins de synthèse sur un bus logiciel.

    Bon, on le fait ce synthé?


    (*) Digital Audio Workstation

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Vous me donnez envie avec ce projet... Ce n'est pas gentil, j'ai déjà un jeu à coder, moi...
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2015, 14h46
  2. traitement des signaux acoustiques
    Par socrate88 dans le forum Traitement du signal
    Réponses: 2
    Dernier message: 20/08/2010, 09h55
  3. Création des signaux
    Par jena dans le forum Signal
    Réponses: 7
    Dernier message: 11/08/2010, 13h38
  4. Questions sur Traitement des signaux
    Par nadjibnet dans le forum POSIX
    Réponses: 4
    Dernier message: 19/05/2010, 20h32
  5. traitements des signaux en Java
    Par Zorgz dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 11/10/2006, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo