Chargement...
 
Skip to main content

Historique: SoundFont specification SF2

Aperçu de cette version: 30

 attention
Page en cours d'écriture
ardoisebleue - 25 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.


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 Generator Enumerators.


Ce qui suit est une liste exhaustive des générateurs de la SoundFont 2.00 et leurs définitions strictes:

0 startAddrsOffset
Le décalage, dans les points de données échantillons, au-delà du paramètre d'en-tête de l'échantillon de départ pour les premières données d'échantillon pointer à jouer de cet instrument. Par exemple, si le début était 7 et startAddrOffset étaient 2, les premières données d'échantillon soulignent joué échantillon serait point 9 des données.
1 endAddrsOffset
Le décalage, dans les points de données d'échantillon de l'échantillon, au-delà du paramètre d'en-tête de l'échantillon de fin de la dernière donnée de l'échantillon pointer à jouer de cet instrument. Par exemple, si la fin était 17 et endAddrOffset étaient -2, les dernières données de l'échantillon précisent joué échantillon serait point 15 de données.
2 startloopAddrsOffset
Le décalage, dans les points de données échantillons, au-delà du paramètre d'en-tête de l'échantillon de Startloop pour les premières données d'échantillon pointer être répété dans la boucle de cet instrument. Par exemple, si Startloop étaient 10 et startloopAddrsOffset étaient -1, la première boucle répétée échantillon point de données serait échantillon point 9 des données.
3
4
5
6
7
8


3

endloopAddrsOffset

Le décalage, dans les points de données d'échantillon, au-delà du paramètre d'en-tête de l'échantillon de ENDLOOP pour les données d'échantillon point considéré équivalent pour l'échantillon de point de données d'Startloop pour la boucle de cet instrument. Par exemple, si ENDLOOP étaient 15 et endloopAddrsOffset étaient 2, les données point 17 serait considérée équivalente à l'échantillon point de données de Startloop, et donc l'échantillon point de données 16 précéderait efficacement Startloop pendant le bouclage échantillon.
4

startAddrsCoarseOffset

Le décalage, en 32768 échantillon de données par incréments de point au-delà du paramètre d'en-tête de l'échantillon de départ et le premier point de données de l'échantillon pour être joué dans cet instrument. Ce paramètre est ajoutée au paramètre de startAddrsOffset. Par exemple, si le début était de 5, 3 et startAddrsOffset étaient startAddrsCoarseOffset étaient 2, les premières données d'échantillon soulignent joué seraient échantillon point de données 65544.
5

modLfoToPitch

Il s'agit de la mesure, en cents, à laquelle une excursion pleine échelle de la modulation LFO va influencer terrain. Une valeur positive indique une excursion LFO augmente pas positif, une valeur négative indique une excursion positive diminue pas. Pas toujours modifié logarithmique, c'est l'écart est en cents, demi-tons et les octaves plutôt que dans Hz. Par exemple, une valeur de 100 indique que le terrain va d'abord augmenter de 1 demi-ton, puis tomber un demi-ton.
6

vibLfoToPitch

Il s'agit de la mesure, en cents, à laquelle une excursion pleine échelle du Vibrato LFO va influencer terrain. Une valeur positive indique une excursion LFO augmente pas positif, une valeur négative indique une excursion positive diminue pas. Pas toujours modifié logarithmique, c'est l'écart est en cents, demi-tons et les octaves plutôt que dans Hz. Par exemple, une valeur de 100 indique que le terrain va d'abord augmenter de 1 demi-ton, puis tomber un demi-ton.
7

modEnvToPitch

Il s'agit de la mesure, en cents, à laquelle une excursion pleine échelle de l'enveloppe de modulation va influencer terrain. Une valeur positive indique une augmentation de la hauteur, une valeur négative indique une diminution de la hauteur. Pas toujours modifié logarithmique, c'est l'écart est en cents, demi-tons et les octaves plutôt que dans Hz. Par exemple, une valeur de 100 indique que la hauteur augmente 1 demi-ton au sommet de l'enveloppe.
8

initialFilterFc

Il s'agit de la coupure et de la fréquence de résonance du filtre passe-bas dans les unités de cent absolus. Le filtre passe-bas est défini en tant que deuxième paire de pôles afin de résonance dont la fréquence de pôle en Hz est définie par le paramètre initial de coupure du filtre. Lorsque la fréquence de coupure est supérieure à 20 kHz et le Q (résonance) du filtre est égal à zéro, le filtre n'affecte pas le signal.
9

initialFilterQ

Il s'agit de la hauteur au-dessus gain en continu dans centibels qui la résonance du filtre expose à la fréquence de coupure. Une valeur de zéro ou moins indique que le filtre n'est pas résonant; le gain à la fréquence de coupure (angle libre) 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 tel que le gain en courant continu est réduit de moitié le gain spécifié. Par exemple, pour une valeur de 100, le gain de filtre à courant continu serait 5 dB en dessous de gain unité, et la hauteur du pic de résonance serait de 10 dB au-dessus du gain en courant continu, ou au-dessus de 5 dB gain unité. On notera également que si initialFilterQ est mis à zéro ou moins, et la fréquence de coupure est supérieure à 20 kHz, alors la réponse du filtre est plat et de gain unitaire.
10

modLfoToFilterFc

Il s'agit de la mesure, en cents, à laquelle une excursion pleine échelle de la modulation LFO va influencer la fréquence de coupure du filtre. Un chiffre positif indique une excursion augmente la fréquence de coupure LFO positif, un nombre négatif indique une excursion positive diminue la fréquence de coupure. Fréquence de coupure du filtre est toujours modifié logarithmique, c'est l'écart est en cents, demi-tons et les octaves plutôt que dans Hz. Par exemple, 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

Il s'agit de la mesure, en cents, à laquelle une excursion pleine échelle de l'enveloppe de modulation va influencer la fréquence de coupure du filtre. Un chiffre positif indique une augmentation de la fréquence de coupure, un nombre négatif indique une diminution de la fréquence de coupure du filtre. Fréquence de coupure du filtre est toujours modifié logarithmique, c'est l'écart est en cents, demi-tons et les octaves plutôt que dans Hz. Par exemple, une valeur de 1000 indique que la fréquence de coupure augmente d'une octave à la pointe d'attaque de l'enveloppe.
12

endAddrsCoarseOffset

Le décalage, en 32768 échantillon de données par incréments de point au-delà du paramètre d'en-tête de l'échantillon final et le dernier point de données de l'échantillon pour être joué dans cet instrument. Ce paramètre est ajoutée au paramètre de endAddrsOffset. Par exemple, si la fin était 65536, startAddrsOffset étaient -3 et -1 startAddrsCoarseOffset étaient, les dernières données de l'échantillon précisent joué seraient échantillon point de données 32765.
13

modLfoToVolume

Il s'agit de la mesure, dans centibels, à laquelle une excursion pleine échelle de la modulation LFO va influencer volume. Un chiffre positif indique une excursion augmente le volume LFO positif, un nombre négatif indique une excursion positive diminue le volume. Le volume est toujours logarithmique modifiée, qui est la déviation est en décibels, plutôt que d'amplitude linéaire. Par exemple, une valeur de 100 indique que le volume va d'abord augmenter de dix dB, puis tomber dix dB.
14

unused1

Utilisé, réservé. Doit être ignorée si rencontrées.
15

chorusEffectsSend

Il s'agit de la mesure, en unités de 0,1%, à laquelle la sortie audio de la note est envoyée au processeur d'effets de chorus. Une valeur de 0% ou moins 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 montant de ce signal envoyé à la partie «sèche» ou non transformés de la sortie. Par exemple, une valeur de 250 indique que le signal est envoyé à 25% du niveau maximal (atténuation de 12 dB de niveau complet) pour le processeur d'effets de chorus.
16

reverbEffectsSend

Il s'agit de la mesure, en unités de 0,1%, à laquelle la sortie audio de la note est envoyée au processeur d'effets de réverbération. Une valeur de 0% ou moins 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 montant de ce signal envoyé à la partie «sèche» ou non transformés de la sortie. Par exemple, une valeur de 250 indique que le signal est envoyé à 25% du niveau maximal (atténuation de 12 dB de niveau complet) au processeur d'effets de réverbération.
17

pan

Il s'agit de la mesure, de 0,1% d'unités, dont la sortie audio "à sec" de la note est positionné à la sortie gauche ou à droite. Une valeur de 50% ou moins indique que le signal est envoyé uniquement à la sortie gauche et pas envoyé à la sortie droite; une valeur égale ou supérieure à 50% indique que la note est envoyée uniquement vers la droite et pas envoyé vers la gauche. Une valeur de zéro endroits le signal centré entre gauche et droite. Par exemple, une valeur de -250 indique que le signal est envoyé à 75% du niveau maximal de la sortie de gauche et de 25% de la pleine échelle de la sortie de droite.
18

unused2

Utilisé, réservé. Doit être ignorée si rencontrées
19

unused3

Utilisé, réservé. Doit être ignorée si rencontrées.
20

unused4

Utilisé, réservé. Doit être ignorée si rencontrées.
21

delayModLFO

C'est le temps de retard, en timecents absolus, à partir de la clé jusqu'à ce que la modulation du LFO commence sa rampe vers le haut à partir de la valeur zéro. Une valeur de 0 indique une 1 seconde retard. Une valeur négative indique un retard inférieur à une seconde et une valeur positive d'un retard de plus d'une seconde. Le nombre le plus négatif (-32768) indique conventionnellement aucun retard. Par exemple, un retard de 10 ms serait 1200log2 (.01) = -7973.
22

freqModLFO

C'est la fréquence, en cents absolus, 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. Par exemple, une fréquence de 10 MHz serait 1200log2 (.01/8.176) = -11610.
23

delayVibLFO

C'est le temps de retard, en timecents absolus, à partir de la touche jusqu'à ce que le Vibrato LFO commence sa rampe vers le haut à partir de la valeur zéro. Une valeur de 0 indique une 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. Par exemple, un retard de 10 ms serait 1200log2 (.01) = -7973.
24

freqVibLFO

C'est la fréquence, en cents absolus, 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. Par exemple, une fréquence de 10 MHz serait 1200log2 (.01/8.176) = -11610.
25

delayModEnv

Il s'agit de la durée de temporisation, dans timecents absolues, entre la clé et sur le début de la phase d'attaque de l'enveloppe de modulation. Une valeur de 0 indique une 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. Par exemple, un retard de 10 ms serait 1200log2 (.01) = -7973.
26

attackModEnv

C'est le temps, en timecents absolus, à partir de la fin de la modulation Envelope Délai 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 Temps 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. Par exemple, un temps d'attaque de 10 ms serait 1200log2 (.01) = -7973.
27

holdModEnv

C'est le temps, en timecents absolus, à partir de la fin de la phase d'attaque à 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 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 classiquement pas de phase de maintien. Par exemple, un temps de maintien de 10 ms serait 1200log2 (.01) = -7973.
28

decayModEnv

C'est le temps, en timecents absolus, pour une variation de 100% de la valeur de l'enveloppe de modulation pendant la phase de décroissance. Pour l'enveloppe de modulation, la phase de décroissance linéairement rampes vers le niveau de maintien. Si le niveau de soutien était de zéro, la modulation Envelope Decay Time serait le temps passé en phase de décroissance. Une valeur de 0 indique une 1 seconde Temps de décroissance pour un niveau zéro soutenir. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Par exemple, un temps de décroissance de 10 msec serait 1200log2 (.01) = -7973.
29

sustainModEnv

Il s'agit de la diminution du taux, exprimé en unités de 0,1%, à laquelle la modulation enveloppe rampes de valeur au cours de la phase de décroissance. Pour l'enveloppe de modulation, le niveau de sustain est correctement exprimé en pour cent de la pleine échelle. Parce que le volume enveloppe niveau de soutien est exprimé comme une atténuation de la pleine échelle, le niveau de sustain est analogue exprimée par une diminution de la pleine échelle. Une valeur de 0 indique que le niveau de soutien est à niveau complète, ce qui implique une durée zéro 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 inférieures à zéro doivent être interprétés comme zéro, les valeurs supérieures à 1000 doivent être interprétés comme 1000. Par exemple, un niveau de soutien qui correspond à une valeur absolue de 40% du pic serait de 600.
30

releaseModEnv

C'est le temps, en timecents absolus, pour une variation de 100% de la valeur de l'enveloppe de modulation durant la phase de libération. Pour l'enveloppe de modulation, la phase de libération linéairement rampes vers zéro par rapport au niveau actuel. Si le niveau actuel était pleine échelle, la modulation Envelope Release Time serait le temps passé en phase de libération jusqu'à ce que la valeur zéro a été atteint. Une valeur de 0 indique une décroissance deuxième fois SoundFont2.01 Spécification technique 1 - Page 33 - Printed 12/10/1996 17h57 pour une sortie de niveau complet. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Par exemple, un temps de sortie de 10 msec serait 1200log2 (.01) = -7973.
31

keynumToModEnvHold

Il s'agit de la mesure, dans timecents par les unités de KeyNumber, à laquelle le temps de maintien de l'enveloppe de modulation est diminuée par un nombre croissant touche MIDI. Le temps de maintien à la clef 60 est toujours inchangée. L'unité mise à l'échelle est telle qu'une valeur de 100 donne un temps d'attente qui suit le clavier, qui est, d'une octave vers le haut provoque le temps de maintien de réduire de moitié. Par exemple, si la modulation Envelope Temps d'attente étaient -7973 = 10 ms et le numéro de clé de Mod Env attente étaient 50 quand le nombre clé 36 a été joué, le temps d'attente serait de 20 msec.
32

keynumToModEnvDecay

Il s'agit de la mesure, dans timecents par les unités de KeyNumber, à laquelle le temps de maintien de l'enveloppe de modulation est diminuée par un nombre croissant touche MIDI. Le temps de maintien à la clef 60 est toujours inchangée. L'unité mise à l'échelle est telle qu'une valeur de 100 donne un temps d'attente qui suit le clavier, qui est, d'une octave vers le haut provoque le temps de maintien de réduire de moitié. Par exemple, si la modulation Envelope Temps d'attente étaient -7973 = 10 ms et le numéro de clé de Mod Env attente étaient 50 quand le nombre clé 36 a été joué, le temps d'attente serait de 20 msec.
33

delayVolEnv

C'est le temps de retard, en timecents absolus, entre touche et le début de la phase d'attaque de l'enveloppe de volume. Une valeur de 0 indique une 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. Par exemple, un retard de 10 ms serait 1200log2 (.01) = -7973.
34

attackVolEnv

C'est le temps, en timecents absolus, à partir de la fin de l'enveloppe de volume Délai jusqu'au point où la valeur de l'enveloppe de volume atteint son apogée. A noter que l'attaque est "convexe", la courbe est nominalement de telle sorte que lorsqu'il est appliqué sur le paramètre de volume de décibels, le résultat est linéaire en amplitude. Une valeur de 0 indique une 1 seconde Temps 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. Par exemple, un temps d'attaque de 10 ms serait 1200log2 (.01) = -7973.
35

holdVolEnv

C'est le temps, en timecents absolus, à partir de la fin de la phase d'attaque à l'entrée en phase de 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 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 classiquement pas de phase de maintien. Par exemple, 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 phase de décroissance linéairement rampes vers le niveau de maintien, ce qui provoque un changement de dB constante pour chaque unité de temps. Si le niveau de soutien étaient-100dB, l'enveloppe de volume Decay Time serait le temps passé en phase de décroissance. Une valeur de 0 indique une 1 seconde de temps de décroissance pour un niveau zéro soutenir. Une valeur négative indique un temps inférieur à une seconde, une valeur positive un temps supérieur à une seconde. Par exemple, un temps de décroissance de 10 msec serait 1200log2 (.01) = -7973.
37

sustainVolEnv

Il s'agit de la diminution du taux, exprimé en centibels, à laquelle l'enveloppe de volume rampes de valeur au cours de la phase de décroissance. Pour l'enveloppe de volume, le niveau de soutien est le mieux exprimé dans centibels d'atténuation de la pleine échelle. Une valeur de 0 indique que le niveau de soutien est à niveau complète, ce qui implique une durée zéro 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 inférieures à zéro doivent être interprétés comme zéro; conventionnellement 1000 indique une atténuation complète. Par exemple, un niveau de soutien qui correspond à une valeur absolue de 12 dB en dessous du pic serait 120.
38

releaseVolEnv

C'est le temps, en timecents absolus, pour une variation de 100% de la valeur de l'enveloppe du volume pendant la phase de libération. Pour l'enveloppe de volume, la phase de libération linéairement rampes vers zéro à partir du niveau actuel, ce qui provoque un changement dB constante pour chaque unité de temps. Si le niveau actuel était pleine échelle, l'enveloppe de volume Temps de déclenchement serait le temps passé en phase de libération jusqu'à 100 dB d'atténuation ont été atteints. Une valeur de 0 indique une 1 seconde de temps de décroissance pour une sortie de niveau complet. Négatif la valeur indique un temps inférieur à une seconde, une valeur positive un temps de plus d'une seconde. Par exemple, un temps de libération de 10 msec serait 1200log2 (.01) = -7973.
39

keynumToVolEnvHold

Il s'agit de la mesure, dans timecents par les unités de KeyNumber, à laquelle le temps de maintien de l'enveloppe de volume est diminué par un nombre croissant touche MIDI. Le temps de maintien à la clef 60 est toujours inchangée. L'unité mise à l'échelle est telle qu'une valeur de 100 donne un temps d'attente qui suit le clavier, qui est, d'une octave vers le haut provoque le temps de maintien de réduire de moitié. Par exemple, si l'enveloppe de volume Hold Time étaient -7973 = 10 ms et le numéro de clé de Vol Env attente étaient 50 quand le nombre clé 36 a été joué, le temps d'attente serait de 20 msec.
40

keynumToVolEnvDecay

Il s'agit de la mesure, dans timecents par les unités de KeyNumber, à laquelle le temps de maintien de l'enveloppe de volume est diminué par un nombre croissant touche MIDI. Le temps de maintien à la clef 60 est toujours inchangée. L'unité mise à l'échelle est telle qu'une valeur de 100 donne un temps d'attente qui suit le clavier, qui est, d'une octave vers le haut provoque le temps de maintien de réduire de moitié. Par exemple, si l'enveloppe de volume Hold Time étaient -7973 = 10 ms et le numéro de clé de Vol Env attente étaient 50 quand le nombre clé 36 a été joué, le temps d'attente serait de 20 msec.
41

instrument

Ceci est l'index dans la sous-bloc INST fournissant l'instrument doit être utilisé pour la zone prédéterminée de courant. Une valeur de zéro indique le premier instrument dans la liste. La valeur ne doit jamais dépasser deux de moins que la taille de la liste d'instruments. L 'agent de bord est le Generator de borne pour les zones PGEN. En tant que tel, il ne doit apparaître que dans la sous-chunk PGEN, et il doit apparaître comme le dernier recenseur Generator de tous, mais la zone prédéfinie mondiale.
42

reserved1

Utilisé, réservé. Doit être ignorée si rencontrées.
43

keyRange

Ce sont les valeurs numériques clés MIDI minimales et maximales pour lesquelles cette zone prédéfinie ou la zone de l'instrument est actif. L'octet LS indique le plus haut et l'octet MS sur la touche valide la plus basse. Le recenseur de touches selon leur position est facultative, mais quand il le fait apparaître, il doit être le premier Generator dans la liste de génération de zone.
44

velRange

Ce sont les valeurs de la vitesse minimale et maximale MIDI pour laquelle cette zone prédéfinie ou la zone de l'instrument est actif. L'octet LS indique le plus haut et l'octet MS la vitesse valide la plus basse. Le recenseur de velRange est facultative, mais quand il le fait apparaître, elle doit être précédée seulement par touches selon leur position dans la liste de génération de zone.

45

startloopAddrsCoarseOffset

Le décalage, en 32768 échantillon de données par incréments de point au-delà du paramètre eader de l'échantillon de Startloop et le premier point de données de l'échantillon doit être répété dans la boucle de cet instrument. Ce paramètre est ajoutée au paramètre de startloopAddrsOffset. Par exemple, si Startloop étaient 5, startloopAddrsOffset étaient 3 et startAddrsCoarseOffset étaient 2, le premier point de données de l'échantillon dans la boucle serait échantillon point de données 65544.
46

KeyNum

Cet enquêteur oblige le numéro de clé MIDI effectivement être interprété comme la valeur donnée. Ce Generator peut apparaître seulement au niveau de l'instrument. Les valeurs valides sont comprises entre 0 et 127.
47

velocity

Cet enquêteur oblige la vitesse MIDI effectivement être interprété comme la valeur donnée. Ce Generator peut apparaître seulement au niveau de l'instrument. Les valeurs valides sont comprises entre 0 et 127.
48

initialAttenuation

C'est l'atténuation, dans centibels, par laquelle une note est atténuée en dessous de la pleine échelle. Une valeur de zéro indique aucune atténuation, la note sera jouée à pleine échelle. Par exemple, une valeur de 60 indique que la note sera jouée à 6 dB en dessous de la pleine échelle pour la note.
49

reserved2

Utilisé, réservé. Doit être ignorée si rencontrées.
50

endloopAddrsCoarseOffset

Le décalage, dans les données échantillons 32768 incréments de points au-delà du paramètre d'en-tête de l'échantillon de ENDLOOP pour les données d'échantillon point considéré équivalent pour l'échantillon de point de données d'Startloop pour la boucle de cet instrument. Ce paramètre est ajoutée au paramètre de endloopAddrsOffset. Par exemple, si ENDLOOP étaient 5, endloopAddrsOffset étaient 3 et endAddrsCoarseOffset étaient 2, l'échantillon point de données 65544 serait considéré comme équivalent à l'échantillon point de données de Startloop, et donc l'échantillon point de données 65543 précéderait efficacement Startloop pendant bouclage.
51

coarseTune

Il s'agit d'un décalage de la hauteur en demi-tons, qui devrait être 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. Par exemple, une valeur Coarse de -4 causerait le son à reproduire quatre demi-tons plat.
52

Finetune

Il s'agit d'un décalage de la hauteur, en cents, ce qui devrait être appliqué à la note. Il est additif avec coarseTune. Une valeur positive indique que le son est reproduit à une hauteur plus élevée, une valeur négative indique une hauteur inférieure. Par exemple, une valeur de réglage fin de -5 causerait le son à reproduire cinq cents plat.
53

sampleID

Ceci est l'index dans la sous-bloc SHDR fournir l'échantillon à être utilisé pour la zone de mesure de courant. Une valeur nulle indique que le premier échantillon dans la liste. La valeur ne doit jamais dépasser deux de moins que la taille de la liste de l'échantillon. Le recenseur ID_échant est le Generator borne pour les zones IGEN. En tant que tel, il ne doit apparaître que dans la sous-chunk IGEN, et il doit apparaître comme le dernier recenseur Generator de tous, mais la zone globale.
54

sampleModes

Cette énumérateur indique une valeur qui donne une série de drapeaux booléens décrivant l'échantillon de la zone de mesure de courant. Les sampleModes ne doit apparaître que dans la sous-chunk IGEN, et ne devraient pas apparaître dans la zone globale. Les deux bits de LS de la valeur 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 utilisé, mais doit être interprétée comme indiquant l'absence de boucle et 3 indique un son dont les boucles pendant la durée de la dépression touche procède ensuite à lire le reste de l'échantillon.
55

Reserved3

Utilisé, réservé. Doit être ignorée si rencontrées.
56

scaleTuning

Ce paramètre représente la mesure dans laquelle nombre clé MIDI influence terrain. Une valeur de zéro indique que nombre clé MIDI n'a pas d'effet sur la hauteur; une valeur de 100 représente l'échelle de demi-ton trempé d'habitude.
57

exclusiveClass

Ce paramètre fournit la capacité d'une dépression touche à un instrument donné de mettre fin à la lecture des autres instruments. Ceci est particulièrement utile pour les instruments de percussion comme une cymbale salut-chapeau. Une valeur de la classe exclusive de zéro indique qu'aucune classe exclusive, aucune action particulière n'est prise. Toute autre valeur indique que, lorsque cette note est initiée, une autre note jouée avec la même valeur de classe exclusif devrait être rapidement arrêté. Le générateur de classe exclusive peut apparaître seulement au niveau de l'instrument. La portée de la classe exclusive est l'ensemble prédéfini. En d'autres termes, une autre zone de l'instrument dans le même preset détention d'une classe exclusive correspondante sera résilié.
58

overridingRootKey

Ce paramètre représente le numéro de touche MIDI à laquelle l'échantillon doit être lu à sa fréquence d'échantillonnage d'origine. S'il n'est pas présent, ou le cas échéant d'une valeur de -1, alors l'échantillon tête paramètre Original Key est utilisé à sa place. Si elle est présente dans la gamme 0-127, puis le numéro de clé indiqué entraînera l'échantillon qui doit être lue à sa tête échantillon Sample Rate. Par exemple, si l'échantillon avait un enregistrement d'un piano milieu C (Original Key = 60) à une fréquence d'échantillonnage de 22,050 kHz, et Root Key ont été mis à 69, puis en jouant MIDI numéro de la clé 69 (A milieu C ci-dessus) causerait une note de piano de terrain C moyen de se faire entendre.
59

unused5

Utilisé, réservé. Doit être ignorée si rencontrées.
60

endOper

Utilisé, réservé. Doit être ignorée si rencontrées. Nom unique apporte de la valeur à la fin de la 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.

Types de données utilisés dans ces exemples :
Copy to clipboard
typedef unsigned char BYTE; // 1 oct 0 à 255 typedef char CHAR; // 1 oct -128 à +127 typedef unsigned int DWORD; // 4 oct 0 à 4.294.967.295 typedef short SHORT; // 2 oct -32.768 à +32.767. typedef unsigned short WORD;// 2 oct 0 à 65.535





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();




Annexe B :


Décriptage d'un fichier SF2
contenu (hex) valeur description
52 49 46 46 RIFF valide un fichier de bloc
44 f1 02 00 taille du bloc fichier (ici 192836 ) = ( taille réelle du fichier (192844) ) - ces 8 premiers octets
73 66 62 6b sfbk balise : type de fichier RIFF : soundfontbank
4c 49 53 54 LIST balise : démarre un bloc de donnée
da 00 00 00 taille du bloc INFO ( ici 218 )
49 4e 46 4f INFO balise : designe le bloc information de la banque
69 66 69 6c ifil balise : N° de version de la soundfont SF2
04 00 00 00 taille du bloc ifil ( 4 )
02 00 01 00 valeur donnée de la version SF2 (ici 2.1)
69 73 6e 67 isng balise : puce synthétiseur ciblée
08 00 00 00 taille de la chaine de caractère
45 4d 55 38 30 30 30 00 valeur EMU8000 ( 7 + le 0 terminal = 8)
49 4e 41 4d INAM balise : nom de la banque son
12 00 00 00 taille de la chaine (inclu le 0 terminal s'il existe)
62 ... 32 00 00 valeur banque-essai-sf2
49 43 52 44 ICRD balise : date de création de la banque
0c 00 00 00 taille de la chaine
32 ...39 00 00 valeur 2013-11-09
49 45 4e 47 IENG
0e 00 00 00 taille de la chaine
44 ... 6e 00 valeur
49 50 52 44 IPRD
0e 00 00 00 taille de la chaine
7a ... 74 00 00 valeur
49 43 4f 50 ICOP
0c 00 00 00 taille de la chaine
43 ... 65 00 00 valeur
49 43 4d 54 ICMT
14 00 00 00 taille de la chaine
7a ... 65 00 valeur
49 53 46 54 ISFT
28 00 00 00 taille de la chaine
6c .. 30 00 00 valeur
4c 49 53 54 LIST
c4 ee 02 00 taille du bloc de l'échantillon
73 64 74 61 stda balise pour les données des échantillons
73 6d 70 6c smpl balise pour les échantillons basés sur 16 bits
b8 ee 02 00 taille de l'échantillon
4c 49 53 54 LIST
8a 01 00 00 taille des instruments
70 64 74 61 pdta
70 68 64 72 phdr
4c 00 00 00
50 ... 41 00 valeur Preset-inst-note-LA
01 00
16 octets NUL
45 4f 50 EOP end of preset
20 octets NUL
00 01
13 octets NUL
70 62 61 67 pbag balise :
08 00 00 00 taille
00 00 00 00 01 00 00 00 valeur
70 6d 6f 64 pmod balise :
0a 00 00 00 taille
00 00 00 00 00 00 00 00
00 00
valeur
70 67 65 6e pgen balise :
08 00 00 00 taille
29 00 00 00 00 00 00 00 valeur
69 6e 73 74 inst balise :
2c 00 00 00 taille
49 6e 73 74 2d 6e 6f 74
65 2d 4c 41 00 00 00 00
00 00 00 00 00 00
valeur
45 4f 49 end of instrument
17 octets à NUL
02 00
69 62 61 67 ibag balise :
0c 00 00 00 taille
00 00 00 00 01 00 00 00
02 00 00 00
valeur
69 6d 6f 64 imod balise :
0a 00 00 00 taille
00 00 00 00 00 00 00 00
00 00
valeur
69 67 65 6e igen balise :
0c 00 00 00 taille
35 00 00 00 35 00 01 00
00 00 00 00
valeur
73 68 64 72 shdr balise :
8a 00 00 00 taille
4c 41 34 34 30 5f 4c valeur LA440_L
4c 41 34 34 30 5f 52 valeur LA440_R
45 4f 53 end of sample





Liens et commentaires

Historique

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