Chargement...
 
Skip to main content

Historique: SoundFont specification SF2

Aperçu de cette version: 45

 attention
Page en cours d'écriture
ardoisebleue - 28 11 2013



Préambule


Ce tutoriel a été crée à partir de tests et de la traduction de la spécification soundfont SF2.
(ici trouver le nouveau lien pour afficher la norme SF2 connect.creativelabs n'est plus disponible)
La norme SoundFont2 est destinée à fournir un format d'échange universel, portable et extensible pour synthétiseur à échantillon et leurs données d'articulations; Elle est portable et universelle grace à l'utilisation d'une définition précise des paramètres indépendants du matériel, ainsi que par des pratiques spécifiques conçues pour être supportées par un large éventail de technologies.
Dans ce mémo, c'est le langage de programmation C++ ( QT4 ) qui est utilisé pour illustrer les exemples.
Le fichier soundfont SF2 que j'utilise a été créé avec Swami sur un seul échantillon stéréo (un signal LA de 1 seconde), un seul intrument, et un seul preset.
 info

le terme énumérateur peut-être compris dans le sens désignation.
les termes générateur et modulateur peuvent être compris comme terme de paramètrage.

Voir terminologie en annexe A.

Le format du fichier SF2


Un fichier SF2 est stocké en format RIFF (Resource Interchange File Format) qui est une structure de fichier balisé, développée pour les fichiers de ressources multimédia, il est décrit en détail dans les Référence Microsoft Windows SDK multimédia programmer.
La structure fichier balisé est intéressante car elle permet d'éviter les problèmes de compatibilité qui peuvent se produire dans les changements de définition de fichier au fil du temps, du fait que chaque élément de données dans ce fichier est identifié par une tête standard, une application qui ne reconnaît pas un de ces éléments de données peut éluder cette information inconnue.
Un fichier RIFF est construit à partir de blocs et sous-blocs stratifiés en niveaux, la lecture doit se faire séquentiellement, bloc par bloc, afin de récupérer la taille de ces blocs et de pouvoir lire les données "en paquet" d'octets ou par une structure de donnée (struct).

Principe des blocs


Les blocs sont "balisés" par des chaines de 4 octets ( ex: snbk, INAM, ifil, LIST ... ), la spécification n'impose pas si ces caractères doivent être majuscules, minuscules ou le deux.
La valeur "taille" du bloc est écrite sur 4 octets le premier est celui de poids faible, le quatrième de poids fort, ce qui implique que le calcul de cette valeur s'effectuera après la lecture des octets de la façon suivante :
octet1 + octet2*256 + octet3*(256²) + octet4*(256³) etc...
ex : 44 F1 02 00 => 192836

Les informations concernant d'autres données techniques sont en annexe A.

Le premier bloc


Dans ce bloc, nous récupérons le type de structure et la taille du bloc de données. Il a une taille invariable de 8 octets
Copy to clipboard
struct entete{ DWORD typestructure;// RIFF = #52494646 DWORD taillefichier; DWORD typefichier;//sfbk = #7366626b };

Ce premier bloc est commun à tous les fichier RIFF, il fournit les informations sur le fichier traiter, dans notre cas, nous avons à faire avec un fichier RIFF de type banque son. Quant à la donnée taillefichier, elle renseigne sur la taille du bloc de donnée, c'est à dire que sa valeur = (taille réelle du fichier) - 8 octets (RIFF et taillefichier).

les blocs suivants


Ces blocs peuvent être organisés dans le RIFF dans n'importe quel ordre, puisqu'il commence toujours par des balises pour les décrire. De plus, ces blocs ne sont pas obligatoirement prèsents, ainsi que certaines de leurs données peuvent être absentes. Il est aussi possible que des blocs écrits dans le fichier ou des données ne soient pas utilisable dans le logiciel. C'est ce qui fait la souplesse et fiabilité dans le temps des fichier RIFF (sous réserve que le logiciel qui les utilise soit dotés des contrôles nécessaires).
Mais, il est plus judicieux de se conformer à une organisation "standard" lors de la création d'un fichier RIFF.
Le bloc de description commence toujours par la balise LIST suivie de la taille du bloc et son type ce qui permet (si le type n'est pas utilisé par le logiciel) d'aller immédiatement au bloc suivant par l'utilisation de la valeur taille_du_bloc_qui_suit.
Copy to clipboard
struct baliseLIST{ DWORD balise;// LIST DWORD taille_du_bloc_qui_suit; DWORD balise_bloc;//INFO };

Chaque donnée contenue dans une balise_bloc à une structure simple elle est composée d'un nom, d'une taille et de la valeur de la donnée.
Copy to clipboard
struct balise_donnee{ DWORD nom_de_balise;// ex: ifil -> N° de version de la norme SF2 utilisée DWORD taille_de_la_donnee;// ex: 04 00 00 00 };

ensuite la valeur de la donnée suit ces valeurs. Pour récupérer la valeur de la donnée il suffit d'utiliser "taille_de_la_donnee".
On procéde de cette façon jusqu'à la limite finale du bloc donnée par "taille_du_bloc_qui_suit". Après quoi, un nouveau bloc, commençant par une balise LIST commence.

Description des blocs et de leurs données


Les données de type chaines de caractères ASCII finissent par un ou deux octets à 0, de manière à obtenir éventuellement, la longueur de la chaine ; Donc la taille concernant ces chaines (taille_de_la_donnee) comprend les valeurs 0 finales. Les carcatères ASCII doivent être considérés comme sensible à la casse, en d'autres termes "abc" n'est pas la même chose que "ABC". Les chaines acceptées sont de 256 octets ou moins, sauf indication contraires.

Le bloc LIST : INFO

[+]

Le bloc des presets et instruments : pdta

[+]

Le bloc LIST des échantillons : sdta

[+]

Les énumérateurs


Les générateurs et modulateur destinataire.


Un générateur et un modulator destinataire sont deux termes signifiant la même chose, un synthétiseur paramètrable. le générateur est utilisé dans avec les listes igen et pgen, et le modulateur destinataire est utilisé dans les listes imod et pmod.
Cinq types d'énumérateurs de générateurs existent :

  • Index Generators : c'est un index de générateur pour une structure de données. il y a deux index générator
    • Instrument : définition d'un instrument dans la zone instrument
    • sampleID : definition d'un échantillon dans la zone sample.
  • Range Generators : définit un intervalle où les note-on extérieures à cette zone sont ignorées. Il y a deux générateur actuellement définis :
    • keyRange : la plage de touche qui produiront un son quand elle seront appuyées.
    • velRange : la plage de vélocité (force d'appui sur une touche) dans laquelle la touche produira le son si la force d'appui est dans l'intervalle.
  • Substitution Generators : ce sont des générateurs qui remplacent une valeur pour un note-on. 2 Generateurs sont actuellement définis :
    • overridingKeyNumber
    • overridingVelocity.
  • Sample Generators : ces générateurs affectent directement les propriètés d'un échantillon. Ils ne sont pas définis au niveau du preset.
    • générateur : sampleMode
    • générateur : Overriding Root Key
    • générateur : Exclusive Class .
  • Value Generators : ce sont des générateurs qui affectent directement un paramètres de traitement du signal. La plupart des générateurs font partie de ce type. Les modulateur Destinataires font aussi partie de la liste Value Generators.

Définition des énumatereurs de générateur.


Ce qui suit est une liste exhaustive des générateurs de la SoundFont 2.00 et leurs définitions strictes.
Voir Annexe A pour la terminologie des unités utilisées.

0 startAddrsOffset
Décalage de datapoint au-delà du datapoint début de l'échantillon pour pointer le premier datapoint à jouer de cet instrument.
Ex : si le datapoint début = 7 et startAddrOffset = 2, le premier datapoint d'échantillon joué sera 9.
1 endAddrsOffset
Décalage de datapoint en deçà du datapoint de fin de l'échantillon pour pointer le dernier datapoint à jouer de cet instrument.
Ex : si le datapoint fin = 17 et endAddrOffset = -2, le dernier datapoint joué sera 15.
2 startloopAddrsOffset
Décalage de datapoint dans l'échantillon au-delà de la valeur de STARTLOOP pour pointer le premier datapoint qui sera répété pour reprendre le bouclage de l'instrument.
Ex : si Startloop = 10 et startloopAddrsOffset = -1, le départ de la boucle sera au datapoint 9.
3 endloopAddrsOffset
Décalage de datapoint au delà de ENDLOOP pour fixer le datapoint considéré comme fin de bouclage et reprendre au début de cette boucle.
Ex : si ENDLOOP = 15 et endloopAddrsOffset = 2, le datapoint 17 sera considéré comme équivalent au datapoint STARTLOOP, et donc le datapoint 16 précédera efficacement STARTLOOP pendant le bouclage de l'échantillon.
4 startAddrsCoarseOffset
Décalage, par pas de 32768 datapoints au-delà du début de l'échantillon et du décalage startAddrsOffset, pour pointer le premier datapoint à jouer de l'instrument. Ce paramètre est ajoutée au paramètre de startAddrsOffset.
Ex : si le début=5, startAddrsOffset=3 et startAddrsCoarseOffset=2, le premier datapoint joué sera le datapoint 65544 (32768*2 + 5 + 3).
5 modLfoToPitch
Cest la valeur en cents, pour laquelle la modulation LFO va influencer le pitch. Une valeur positive indique une augmentation LFO du pas, une valeur négative indique une diminution du pas.L'écart est en cents de demi-tons et octaves.
Ex : une valeur de 100 indique que le pitch va d'abord augmenter de 1 demi-ton, puis diminuer de 1 demi-ton.
6 vibLfoToPitch
Cest la valeur en cents, pour laquelle le Vibrato LFO va influencer le pitch. Une valeur positive augmente, une valeur négative diminue pas. L'écart est en cents de demi-tons et octaves.
Ex : une valeur de 100 indique que le pitch va d'abord augmenter de 1 demi-ton, puis diminuer de 1 demi-ton.
7 modEnvToPitch
Valeur en cents, pour laquelle l'enveloppe de modulation va influencer le pitch. Une valeur positive indique une augmentation de la hauteur, une valeur négative indique une diminution de la hauteur. L'écart est en cents de demi-tons et octaves.
Ex : une valeur de 100 indique que la hauteur augmente de 1 demi-ton au sommet de l'enveloppe.
8 initialFilterFc
C'est la coupure et de la fréquence de résonance du filtre passe-bas en unités de cents positifs. Le filtre passe-bas est défini comme secondaire de la paire de pôles de résonance dont la fréquence en Hz est définie par le paramètre Initial Filter Cutoff. Lorsque la fréquence de coupure > 20 kHz et le Q (résonance) du filtre = 0, le filtre n'affecte pas le signal.
9 initialFilterQ
Valeur en centibels de la hauteur, au-dessus du gain, qui expose la résonance du filtre, à la fréquence de coupure. Une valeur zéro ou négative indique que le filtre n'est pas résonant; le gain à la fréquence de coupure peut être inférieur à zéro quand zéro est spécifié. Le gain du filtre DC est également affectée par ce paramètre de telle sorte que le gain DC est réduit de la moitié du gain spécifié.
Ex : pour une valeur de 100, le gain du filtre DC serait 5 dB en dessous du gain unitaire, et la hauteur du pic de résonance serait de 10 dB au-dessus du gain DC, ou au-dessus de 5 dB gain unitaire. On notera également que si initialFilterQ =< 0, t la fréquence de coupure > 20 kHz, alors la réponse du filtre est plat et de gain unitaire.
10 modLfoToFilterFc
Valeur en cents pour laquelle la modulation LFO va influencer la fréquence de coupure du filtre. Un nombre positif augmente la fréquence de coupure LFO, un nombre négatif diminue la fréquence de coupure. L'écart est en cents de demi-tons et octaves.
Ex : une valeur de 1200 indique que la fréquence de coupure va d'abord augmenter de 1 octave, puis baisser d'une octave.
11 modEnvToFilterFc
Valeur en cents, pour laquelle l'enveloppe de modulation va influencer la fréquence de coupure du filtre. Un nombre positif augmente la fréquence de coupure, un nombre négatif la diminue. L'écart est en cents de demi-tons et octaves.
Ex : une valeur de 1200 indique que la fréquence de coupure augmente d'une octave à la pointe d'attaque de l'enveloppe.
12 endAddrsCoarseOffset
Décalage, par pas de 32768 datapoints au-delà du début de l'échantillon et du décalage endAddrsOffset, pour pointer le dernier datapoint à jouer de l'instrument. Ce paramètre est ajoutée au paramètre de endAddrsOffset.
Ex : si la fin=65536, endAddrsOffset=-3 et endAddrsCoarseOffset=-1, le dernier datapoint joué sera le datapoint 32765 (65536 - 32768 - 3).
13 modLfoToVolume
Valeur en centibels, pour laquelle la modulation LFO va influencer le volume. Un nombre positif augmente le volume LFO, un nombre négatif diminue ce volume.
Ex : une valeur de 100 indique que le volume va d'abord augmenter de 10 dB, puis diminuer de 10 dB.
14 unused1
Utilisé, réservé. Doit être ignoré si rencontré.
15 chorusEffectsSend
Valeur en unités de 0,1% pour laquelle la sortie audio de la note est envoyée au processeur d'effets de chorus. Une valeur de 0% ou négative indique qu'aucun signal n'est envoyé à partir de cette note ; une valeur égale ou supérieure à 100% indique que la note est envoyée au niveau maximal.
Notez que ce paramètre n'a aucun effet sur le niveau de ce signal envoyé à la partie «sèche» ou non transformés de la sortie.
Ex : une valeur de 250 indique que le signal est envoyé à 25% du niveau maximal (atténuation de 12 dB du niveau total) pour le processeur d'effets de chorus.
16 reverbEffectsSend
Valeur en unités de 0,1% pour laquelle la sortie audio de la note est envoyée au processeur d'effets de réverbération. Une valeur de 0% ou négative indique qu'aucun signal n'est envoyé à partir de cette note ; une valeur égale ou supérieure à 100% indique que la note est envoyée au niveau maximal.
Notez que ce paramètre n'a aucun effet sur le niveau de ce signal envoyé à la partie «sèche» ou non transformés de la sortie.
Ex : une valeur de 250 indique que le signal est envoyé à 25% du niveau maximal (atténuation de 12 dB du niveau total) pour le processeur d'effets de réverbération.
17 pan
Valeur en unités de 0,1% pour positionné la sortie audio de la note entre la sortie gauche et droite. Une valeur <= -50% indique que le signal est envoyé vers la sortie gauche; une valeur >= à +50% indique que la note est envoyée vers la droite. Une valeur de zéro indique un centrage de la note.
Ex : une valeur de -250 indique que le signal est envoyé à 75% du niveau maximal vers la gauche et à 25% vers la droite.
18 unused2
Utilisé, réservé. Doit être ignoré si rencontré
19 unused3
Utilisé, réservé. Doit être ignoré si rencontré.
20 unused4
Utilisé, réservé. Doit être ignoré si rencontré.
21 delayModLFO
Valeur du delay en unités timecents absolu, à partir du note-on jusqu'au commencement de la montée de la modulation LFO en démarrant à 0. Une valeur de 0 indique un retard de 1 seconde. Une valeur négative indique un retard inférieur à 1 seconde et une valeur positive d'un retard de plus d'une seconde. Le nombre le plus négatif (-32768) indique conventionnellement aucun retard.
Ex : un retard de 10 ms serait 1200log2 (.01) = -7973.
22 freqModLFO
C'est la fréquence, en cents absolu, de la période triangulaire de la modulation LFO. Une valeur de zéro indique une fréquence de 8.176 Hz. Une valeur négative indique une fréquence inférieure à 8.176 Hz, une valeur positive supérieure à une fréquence de 8.176 Hz.
Ex : une fréquence de 10 MHz serait 1200log2 (.01/8.176) = -11610.
23 delayVibLFO
Valeur du retard en unités timecents absolu, à partir du note-on jusqu'à ce que le Vibrato LFO soit activé. La valeur 0 indique 1 seconde de retard. Une valeur négative indique un retard inférieur à une seconde, une valeur positive un retard de plus d'une seconde. Le nombre le plus négatif (-32768) indique conventionnellement aucun retard.
Ex : un retard de 10 ms serait 1200log2 (.01) = -7973.
24 freqVibLFO
C'est la fréquence, en cents absolu, de la période triangulaire du Vibrato LFO. Une valeur de zéro indique une fréquence de 8.176 Hz. Une valeur négative indique une fréquence inférieure à 8.176 Hz, une valeur positive supérieure à une fréquence de 8,176 Hz.
Ex : une fréquence de 10 MHz serait 1200log2 (.01/8.176) = -11610.
25 delayModEnv
Durée de temporisation, en timecents absolu, entre le note-on et le début de la phase d'attaque de l'enveloppe de modulation. Une valeur 0 indique 1 seconde de retard. Une valeur négative indique un retard inférieur à une seconde, une valeur positive un retard de plus d'une seconde. Le nombre le plus négatif (-32768) indique conventionnellement pas de retard.
Ex : un retard de 10 ms serait 1200log2 (.01) = -7973.
26 attackModEnv
En timecents absolu, C'est le temps, depuis la fin du delayModEnv jusqu'au point où la valeur de l'enveloppe de modulation atteint son apogée.
Notez que l'attaque est «convexe», la courbe est nominalement de telle sorte que lorsqu'il est appliqué à un paramètre de décibels ou demi-ton, le résultat est linéaire en amplitude ou Hz respectivement. Une valeur de 0 indique une 1 seconde de durée d'attaque. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Le nombre le plus négatif (-32768) indique conventionnellement attaque instantanée.
Ex : un temps d'attaque de 10 ms serait 1200log2 (.01) = -7973.
27 holdModEnv
C'est le temps, en timecents absolu, à partir de la fin de la phase d'attaque jusqu'à l'entrée en phase de décroissance, au cours de laquelle la valeur de l'enveloppe est maintenue à son apogée. Une valeur de 0 indique une 1 seconde de temps d'attente. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Le nombre le plus négatif (-32768) indique pas de phase de maintien.
Ex : un temps de maintien de 10 ms serait 1200log2 (.01) = -7973.
28 decayModEnv
C'est le temps, en timecents absolu, pour une variation de 100% de la valeur de l'enveloppe de modulation pendant la phase de décroissance. La phase de décroissance de l'enveloppe de modulation est linéaire jusqu'au niveau de maintien. Si le niveau de sustain = 0, le temps de decayModEnv devient le temps de décroissance. Une valeur de 0 indique une 1 seconde de temps de décroissance pour un sustain = 0. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde.
Ex : un temps de décroissance de 10 msec serait 1200log2 (.01) = -7973.
29 sustainModEnv
C'est la diminution du niveau, exprimée en unités de 0,1%, pour laquelle l'enveloppe de modulation diminue au cours de la phase de décroissance. Pour l'enveloppe de modulation, le niveau de sustain est exprimé en pourcentage sur la totalité. Parce que le volume du niveau de sustain de l'enveloppe est exprimé comme une atténuation de la totalité, le niveau de sustain est de même exprimée par une diminution sur la totalité. Une valeur de 0 indique que le niveau de sustain est à niveau complet, ce qui implique une durée 0 de la phase de décroissance, indépendamment du temps de décroissance. Une valeur positive indique une décroissance au niveau correspondant. Les valeurs < 0 doivent être interprétés comme 0, les valeurs > 1000 doivent être interprétés comme 1000.
Ex : un niveau de soutien qui correspond à une valeur absolue de 40% du pic serait de 600.
30 releaseModEnv
C'est la durée, en timecents absolu, pour une variation de 100% de la valeur de l'enveloppe de modulation durant la phase de libération (release). Pour l'enveloppe de modulation, la phase de libération décroît linéairement vers zéro par rapport au niveau actuel. Si le niveau actuel est maximum, la durée de libération sera le temps de la phase de libération jusqu'à ce que la valeur zéro soit atteinte. Une valeur de 0 correspond à une durée de 1 seconde de décroissance pour terminer depuis un niveau complet. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde.
Ex : un temps de sortie de 10 msec serait 1200log2 (.01) = -7973.
31 keynumToModEnvHold
C'est la mesure, en timecents pour une unités de keynumber, où la durée de maintien (hold) de l'enveloppe de modulation est diminuée par l'accroissement du MIDI keynumber. Le temps de maintien à la touche 60 reste invariable. L'unité d'échelle est telle que la valeur 100 donne une durée d'attente d'une octave vers l'aigu provoque une durée de maintien réduite de moitié.
Ex : si releaseModEnv = -7973 (10 ms) et le keynumToModEnvHold = 50 quand le keynumber 36 est joué, la durée d'attente sera de 20 msec.
32 keynumToModEnvDecay
C'est la mesure, en timecents pour une unités de keynumber, où la durée de décroissance (decay) de l'enveloppe de modulation est diminuée par l'accroissement du MIDI keynumber. Le temps de décroissance à la touche 60 reste invariable.
Ex : si releaseModEnv = -7973 (10 ms) et le keynumToModEnvDecay = 50 quand le keynumber 36 est joué, la durée de décroissance sera de 20 msec.
33 delayVolEnv
C'est le retard, en timecents absolu, entre note-on et le début de la phase d'attaque de l'enveloppe de volume. Une valeur de 0 indique 1 seconde retard. Une valeur négative indique un retard inférieur à une seconde, une valeur positive un retard de plus d'une seconde. Le nombre le plus négatif (-32768) indique conventionnellement aucun retard.
Ex : un retard de 10 ms serait 1200log2 (.01) = -7973.
34 attackVolEnv
En timecents absolu, c'est la durée, depuis la fin du délai de l'enveloppe de volume jusqu'au point où la valeur de l'enveloppe de volume atteint son apogée. Une valeur de 0 indique 1 seconde. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Le nombre le plus négatif (-32768) indique conventionnellement une attaque instantanée.
Ex : un temps d'attaque de 10 ms serait 1200log2 (.01) = -7973.
35 holdVolEnv
En timecents absolu, c'est le temps entre la fin de l'attaque et l'entrée en décroissance, au cours de laquelle la valeur de l'enveloppe de volume est maintenu à son apogée. Une valeur de 0 indique une 1 seconde. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Le nombre le plus négatif (-32768) indique aucune phase de maintien.
Ex : un temps de maintien de 10 ms serait 1200log2 (.01) = -7973.
36 decayVolEnv
C'est le temps, en timecents absolus, pour une variation de 100% de la valeur de l'enveloppe du volume pendant la phase de décroissance. Pour l'enveloppe de volume, la décroissance tend linéairement vers le niveau de maintien, ce qui provoque un changement de dB constant pour chaque unité de temps. Si le niveau de maintien = -100dB, le temps de décroissance de l'enveloppe de volume = temps de la phase de décroissance. Une valeur de 0 indique 1 seconde de temps de décroissance pour un niveau zéro. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde.
Ex : un temps de décroissance de 10 msec serait 1200log2 (.01) = -7973.
37 sustainVolEnv
C'est le taux de la diminution, exprimé en centibels, pour laquelle l'enveloppe de volume décroît au cours de la phase de décroissance. Pour l'enveloppe de volume, le niveau d'atténuation du sustain est mieux exprimé en centibels. Une valeur de 0 indique que le niveau est maximum. Une valeur positive indique une décroissance au niveau correspondant. Les valeurs inférieures à zéro doivent être interprétés comme zéro; conventionnellement 1000 indique une atténuation complète.
Ex : un niveau de soutien qui correspond à une valeur absolue de 12 dB en dessous du pic serait 120.
38 releaseVolEnv
C'est la durée, en timecents absolu, pour une variation de 100% de la valeur de l'enveloppe du volume pendant la phase de libération (release). Pour l'enveloppe de volume, la phase de libération tend linéairement vers zéro depuis la niveau en cours, ce qui provoque un changement en dB constant pour chaque unité de temps. Si le niveau actuel est maximum, la durée du release de l'enveloppe de volume sera le temps de libération jusqu'à ce que 100 dB d'atténuation soit atteint. Une valeur de 0 indique 1 seconde de temps de décroissance pour finir complètement. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps de plus d'une seconde.
Ex : un temps de libération de 10 msec serait 1200log2 (.01) = -7973.
39 keynumToVolEnvHold
C'est la mesure, en timecents par unités de KeyNumber, pour laquelle la durée de maintien de l'enveloppe de volume est diminué par le nombre croissant de la touche MIDI. La mise en échelle de l'unité est telle que la valeur 100 donne une durée de maintien qui permet de couvrir le clavier ; Une octave vers les aigus provoque une durée de maintien diminuée de moitié. Le temps de maintien de la touche 60 est invariable.
Ex : si le holdVolEnv = -7973 (10 ms) et le keynumToVolEnvHold = 50, si le KeyNumber 36 est joué, la durée de maintien sera de 20 msec.
40 keynumToVolEnvDecay
C'est la mesure, en timecents par unités de KeyNumber, pour laquelle la durée de décroissance de l'enveloppe de volume est diminué par le nombre croissant de la touche MIDI. La mise en échelle de l'unité est telle que la valeur 100 donne une durée de décroissance qui permet de couvrir le clavier ; Une octave vers les aigus provoque une durée de décroissance diminuée de moitié. Le temps de décroissance de la touche 60 est invariable.
Ex : si le holdVolEnv = -7973 (10 ms) et le keynumToVolEnvDecay = 50, si le KeyNumber 36 est joué, la durée de maintien sera de 20 msec.
41 instrument
C'est l'index dans le sous-bloc INST fournissant l'instrument qui doit être utilisé pour la 'preset zone en cours. Une valeur de zéro indique le premier instrument de la liste. La valeur ne doit jamais dépasser le nombre de la liste d'instrument - 2. L'énumérateur instrument est le dernier générateur des zones PGEN. En tant que tel, il ne doit apparaître que dans le sous-bloc PGEN, et il doit apparaître comme le dernier énumérateur générateur de tous, sauf dans la zone prédéfinie globale.
42 reserved1
Utilisé, réservé. Doit être ignoré si rencontré.
43 keyRange
Ce sont des valeurs numériques minimale et maximale de touches MIDI pour lesquelles la preset zone ou la instrument zone, sont actives. L'octet LS indique latouche la plus haute et l'octet MS la plus basse. L'énumératuer keyRange est facultatif, mais quand il existe, il doit être le premier générateur de la liste de générateur de la zone.
44 velRange
Ce sont les valeurs de la vitesse minimale et maximale MIDI pour lesquelles la preset zone ou la instrument zone sont actives. L'octet LS indique la vitesse la plus grande et l'octet MS la plus basse. L'énumérateur velRange est facultatif, mais quand il existe, il ne doit être précédé que par keyRange dans la liste de générateur de la zone.
45 startloopAddrsCoarseOffset
Décalage par pas de 32768 datapoints au-delà du paramètre Startloop pour redéfinir le début de la boucle pour cet instrument. Ce paramètre est ajouté au paramètre de startloopAddrsOffset.
Ex : si Startloop = 5, startloopAddrsOffset = 3 et startAddrsCoarseOffset = 2 : le premier datapoint de la boucle sera 65544 (5+3+2*32768).
46 KeyNum
Cet énumérateur force la valeur du numéro de touche MIDI. Ce générateur apparaît uniquement au niveau de instrument. Sa valeurs doit être comprise entre 0 et 127.
47 velocity
Ce paramètre force la vélocité MIDI. Ce générateur n'apparaît seulement qu'au niveau de instrument. Les valeurs valides sont comprises entre 0 et 127.
48 initialAttenuation
C'est l'atténuation, en centibels, pour laquelle une note est atténuée en dessous de la valeur maximum prévue. Si = 0, il n'y a aucune atténuation, la note sera jouée au maximum prévu.
Ex : 60 indique que la note sera jouée à 6 dB en-dessous du maximum prévu pour la note.
49 reserved2
Utilisé, réservé. Doit être ignoré si rencontré.
50 endloopAddrsCoarseOffset
Décalage par pas de 32768 datapoints au-delà du paramètre Endloop pour redéfinir la fin de la boucle qui doit être considéré comme un datapoint de valeur équivalente au datapoint Startloop pour cet instrument. Ce paramètre est ajouté au paramètre de endloopAddrsOffset.
Ex : si Startloop = 5, endloopAddrsOffset = 3 et endAddrsCoarseOffset = 2 : le datapoint en 65544 (5+3+2*32768) sera considéré comme équivalent au datapoint Startloop et donc, le datapoint 65543 précédera le datapoint Startloop pour le reprise de la boucle.
51 coarseTune
Décalage de la hauteur en demi-tons, qui sera appliqué à la note. Une valeur positive indique que le son est reproduit à une hauteur plus élevée, une valeur négative indique une hauteur inférieure.
Ex : une valeur Coarse = -4 provoquera un son joué quatre demi-tons plus bas.
52 Finetune
Décalage de la hauteur, en cents, qui sera appliqué à la note. Il est additionnel à coarseTune. Une valeur positive indique que le son est reproduit à une hauteur plus élevée, une valeur négative indique une hauteur inférieure.
Ex : une valeur finetune = -5 provoquera un son joué cinq cents plus bas.
53 sampleID
C'est l'index dans le sous-bloc SHDR pour accèder à l'échantillon utilisé dans la zone en cours. La valeur 0 pointe sur le premier échantillon de la liste. La valeur ne doit jamais dépasser le nombre d'échantillons-2. L'énumérateur sampleID est le dernier générateur de la zone IGEN. En tant que tel, il ne doit apparaître que dans le sous-bloc IGEN, et doit être le dernier générateur énuméré, sauf dans la zone globale.
54 sampleModes
Cet énumérateur indique une valeur constituée de drapeaux booléens décrivant l'échantillon de la zone en cours. Le sampleMode n'existe que dans le sous-bloc IGEN, et ne devraient pas apparaître dans la zone globale. Les deux bits LS indiquent le type de boucle dans l'échantillon :
- 0 : indique un son reproduit sans boucle
- 1 : indique un son qui tourne en boucle
- 2 : est inutilisé : il indique l'absence de boucle
- 3 : indique un son dont la boucle au moment de la durée du note-off lit le reste de l'échantillon.
55 Reserved3
Utilisé, réservé. Doit être ignoré si rencontré.
56 scaleTuning
Ce paramètre représente la mesure par laquelle le keyNumber MIDI influe sur le pitch. Une valeur à 0 ne provoque aucun effet sur la hauteur; Une valeur 100 représente la gamme de demi-ton temporisé habituelle.
57 exclusiveClass
Ce paramètre donne la possibilité à une note-on pour un instrument donné de finir le jeu des autres instruments. C'est particulièrement utile aux instruments de percussion comme la cymbale hit-hat. La valeur 0 ne provoque aucun effet. Toute autre valeur indique que, lorsque cette note est lancée, toute les autres note en cours d'exécution avec la même valeur de classe seront instantanément stoppées. Le générateur exclusiveClass ne doit figuré qu'au niveau instrument. La portée de exclusiveClass est le preset. En d'autres termes, une autre zone instrument dans le même preset contenant un exclusiveClass correspondant sera stoppé.
58 overridingRootKey
Ce paramètre représente le keyNumber MIDI pour lequel l'échantillon doit être lu à sa fréquence d'échantillonnage d'origine. S'il est absent ou = -1, alors l'échantillon overridingRootKey est utilisé à sa place. S'il est présent dans l'intervalle 0 à 127, le keyNumber indiqué démarrera la partie début de l'échantillon qui doit être lue.
Ex : si l'échantillon est un enregistrement de note C de piano (en touche centrale = 60) avec une fréquence d'échantillonnage de 22,050 kHz, et Root Key = 69 ; L'appui de la touche MIDI 69 (le C au dessus du mileu) provoquera le son d'une note de piano de pitch de milieu C (touche centrale).
59 unused5
Utilisé, réservé. Doit être ignoré si rencontré.
60 endOper
Utilisé, réservé. Doit être ignoré si rencontré. Nom unique indique la fin d'une liste définie.





Paramètres et modèle de synthèse

[+]

Annexe A :


Dans les exemples de codes qui suivent, tous les contrôles de validité ont été éludés pour faciliter la lecture.

type de données

[+]

Terminologie


Structures de données

[+]

Terminologie Synthétiseur

[+]

Terminologie des Paramètres

[+]

Annexe B


exemples


exemple 1 : lecture d'un bloc de fichier RIFF.
Copy to clipboard
struct enrg_de_bloc{ DWORD A,B,C;};// taille enrg : 12 octets enteteRIFF donnee; QFile fichierRIFF( "banqueson.sf2" ); fichierRIFF.open( QIODevice::ReadOnly )) int nb_octet_retourne = fichierRIFF.read( (char *) &donnee, 12 ); fichierRIFF.close();


Décriptage d'un fichier SF2

[+]

Liens et commentaires

Historique

Avancé
Information Version
Jeudi 28 novembre 2013 15:21 ardoisebleue correction texte définition énumérateurs 45
Afficher
Jeudi 28 novembre 2013 15:15 ardoisebleue 44
Afficher
Jeudi 28 novembre 2013 15:13 ardoisebleue correction traduction énumérateur 43
Afficher
Jeudi 28 novembre 2013 14:47 ardoisebleue 42
Afficher
Mercredi 27 novembre 2013 17:56 ardoisebleue 41
Afficher
Mercredi 27 novembre 2013 17:03 ardoisebleue 40
Afficher
Mercredi 27 novembre 2013 14:12 ardoisebleue 39
Afficher
Mardi 26 novembre 2013 18:02 ardoisebleue 38
Afficher
Mardi 26 novembre 2013 17:41 ardoisebleue 37
Afficher
Mardi 26 novembre 2013 17:17 ardoisebleue 36
Afficher
Mardi 26 novembre 2013 16:31 ardoisebleue 35
Afficher
Mardi 26 novembre 2013 16:00 ardoisebleue correction texte définition énumérateurs 34
Afficher
Mardi 26 novembre 2013 15:22 ardoisebleue 33
Afficher
Mardi 26 novembre 2013 15:16 ardoisebleue 32
Afficher
Lundi 25 novembre 2013 18:28 ardoisebleue définition des énumérateurs 31
Afficher
Lundi 25 novembre 2013 17:42 ardoisebleue les énumérateurs 30
Afficher
Lundi 25 novembre 2013 17:13 ardoisebleue 29
Afficher
Jeudi 14 novembre 2013 17:06 ardoisebleue 28
Afficher
Jeudi 14 novembre 2013 16:25 ardoisebleue 27
Afficher
Jeudi 14 novembre 2013 15:54 ardoisebleue 26
Afficher
Jeudi 14 novembre 2013 15:37 ardoisebleue 25
Afficher
Jeudi 14 novembre 2013 11:33 ardoisebleue 24
Afficher
Jeudi 14 novembre 2013 11:25 ardoisebleue 23
Afficher
Jeudi 14 novembre 2013 10:36 ardoisebleue 22
Afficher
Mercredi 13 novembre 2013 19:07 ardoisebleue 21
Afficher
Mercredi 13 novembre 2013 18:27 ardoisebleue 20
Afficher
Mercredi 13 novembre 2013 16:22 utilisateur_anonyme2 Intégration: lire echantillons et cie + titre 19
Afficher
Mercredi 13 novembre 2013 14:55 ardoisebleue 18
Afficher
Mardi 12 novembre 2013 17:44 ardoisebleue fin du paragraphe du bloc pdta 17
Afficher
Mardi 12 novembre 2013 17:33 ardoisebleue 16
Afficher
Mardi 12 novembre 2013 14:56 ardoisebleue 15
Afficher
Mardi 12 novembre 2013 14:43 ardoisebleue 14
Afficher
Mardi 12 novembre 2013 11:51 ardoisebleue 13
Afficher
Mardi 12 novembre 2013 11:17 ardoisebleue 12
Afficher
Mardi 12 novembre 2013 10:28 ardoisebleue 11
Afficher
Mardi 12 novembre 2013 10:04 ardoisebleue 10
Afficher
Mardi 12 novembre 2013 09:29 ardoisebleue 9
Afficher
Lundi 11 novembre 2013 10:59 ardoisebleue parag:bloc sdta _ début parg : pdta 8
Afficher
Lundi 11 novembre 2013 10:43 ardoisebleue 7
Afficher
Lundi 11 novembre 2013 10:29 ardoisebleue 6
Afficher
Dimanche 10 novembre 2013 11:39 ardoisebleue 5
Afficher
Samedi 09 novembre 2013 17:41 ardoisebleue 4
Afficher
Samedi 09 novembre 2013 16:41 ardoisebleue création 3
Afficher
Samedi 09 novembre 2013 16:24 ardoisebleue 2
Afficher
Samedi 09 novembre 2013 15:07 ardoisebleue 1
Afficher
  • 1
  • 2 (en cours)
  • »