Chargement...
 
Skip to main content

Historique: SoundFont specification SF2

Aperçu de cette version: 25

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

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 échantillons stockés dans la SF2 peuvent être du format 16 bits OU 24 bits, c'est le créateur de la banque qui définit le format de stockage des échantillons suivant le format des fichiers échantillonés à stocker.
Le bloc sdta contient un seul sous-bloc optionnel : SMPL. Celui-ci contient toutes les données de sons 16 bits qui seront placées dans la RAM et reliées à la banque. Sa taille est variable, et contient obligatoirement un nombre paire d'octets. Quant au sous-bloc SM24, si les données stockées sont au format 24 bits, il fait exactement la moitié de la taille du SMPL, plus 1 octet, si nécessaire pour satisfaire l'alignement sur 16 bits (bombre pair d'octets).
Si le bloc sdta est absent, soit il n'y aura pas de sons qui joués, soit la banque fera référence aux échantillons d'une ROM.
Copy to clipboard
struct bloc_sdta{ SMPL;// bloc d échantillon 16 bits SM24;// bloc d échantillons 24 bits };


Le bloc smpl :


S'il est présent, il contient un ou plusieurs «échantillons» de l'information audio numérique sous la forme d'un code linéaire seize bits, signés, little endian (octet le moins significatif en premier). Chaque échantillon est suivie d'un minimum de 46 data_points échantillons égal à 0 qui sont nécessaires pour garantir que vous pourrez faire une boucle sur des données 0 à la fin du son avec toute élévation raisonnable de tonalité en utilisant n'importe quelle interpolation raisonnable.

Le bloc sm24


S'il est présent, il contient les octets les moins significatifs homologues à chacun des data_points contenu dans le bloc SMPL. Notez que cela signifie pour chaque paire d'octets dans le SMPL il y a un complèment de 1 octet dans le SM24.
Ces points de forme d'onde de l'échantillon doivent être combinées avec les points de forme d'onde des échantillons correspondants SMPL, pour créer ensemble un seul pool de données de l'échantillon avec une résolution de 24 bits.
  • Si SMPL est absent, et SM24 prèsent il doit être ignoré.
  • Si la version ifil du format est inférieur à la version 2.04 la SM24 doit être ignorée.
  • Si la taille du SM24 n'est pas exactement égale à la moitié de la taille du chunk SMPL (+ 1 octet dans le cas où 1/2 la taille de chunk SMPL est une valeur impaire), les deux bloc SM24 et SMPL devraient être ignorés.
  • Dans tous les cas où le SM24 est ignoré, mais le SMPL accepté, le synthétiseur devrait utiliser uniquement les échantillons contenus dans le SMPL.

L'utilisation des boucles dans les échantillons :


Au sein de chaque échantillon, une ou plusieurs paires de points de boucles peuvent exister. Les emplacements de ces points sont définis dans le bloc pdta, mais dans les échantillons, les data_points doivent se conformer à certaines pratiques pour que la boucle soit compatible sur de multiples plateformes.
Les boucles sont définies par des «points équivalents» dans l'échantillon. Cela signifie qu'il y a deux data_points qui sont logiquement équivalents, et une boucle se produit lorsque ces points sont raccordées au sommet d'un autre. En théorie, le point de fin de boucle n'est jamais joué au cours du bouclage ; A la place, le point de départ de la boucle suit le point juste avant le point de fin de boucle. En raison de la nature de bande limitée de l'échantillonnage audio numérique, une boucle sans articulations montrera des données pratiquement identiques autour des points équivalents.
En réalité, à cause des divers algorithmes d'interpolation utilisés par des synthétiseurs d'échantillons, les données entourant à la fois le début de la boucle et les points d'extrémité peuvent affecter le son de la boucle. Ainsi les points à la fois le début et la fin de la boucle doivent être entourés par des données audio en continu. Par exemple : même si le son est programmé pour continuer à boucler pendant le decay, les sample data_points doivent être fournis au-delà du point de fin de boucle. Ces données seront généralement identiques aux données au début de la boucle. Un minimum de 8 points de données valides doivent être présents avant le début de la boucle et après la fin de la boucle.
Ces huit points de données (quatre de chaque côté) entourant les deux points de la boucle équivalentes doivent également être obligatoirement identiques.
En forçant les données à être identiques, tous les algorithmes d'interpolation garantissent la reproduction correcte d'une boucle sans articulations. Voir notions de boucle dans Banque SF2 avec swami pour plus de détails.


Paramètres et modèle de synthèse


La norme SoundFont2 a été créé avec l'intention de fournir un soutien à une base croissante de modèles de synthètiseur basé sur l'échantillonage. Le modèle utilisé par la spécification SoundFont2 est produit par la puce EMU8000. La description qui suit du modèle de synthèse sous-jacent et des paramètres associés sont prévus pour permettre de greffer ce modèle de synthèse sur d'autres plates-formes matérielles.

Modèle de synthèse.

La spécification du modèle de synthèse comprend un oscillateur-échantilloneur, un filtre passe-bas dynamique, un amplificateur d'enveloppe, une sortie paramètrable stéréophonique, et des unités d'effets de chorus et réverbération. Un moteur à modulation sous-jacent comprend deux oscillateurs basse fréquence (LFO) et les deux générateurs d'enveloppe avec leurs amplificateurs d'acheminement appropriés.

Oscillateur échantilloneur.

Le modèle de l'oscillateur échantilloneur SF2 est capable de jouer un sample à un taux d'échantillonnage quelconque avec un pitch-shift quelconque.
Dans la pratique, l'élévation du pitch sera limité à une valeur maximale d'au moins deux octaves.
Le pitch est décrit en termes d'un pitch initial qui est basé sur :
  • le taux d'échantillonage
  • la root key' (touche de base) sur laquelle l'échantillon est calé sur le clavier
  • les coarse, fine, et correction tuning.
  • la touche key number MIDI effective,
  • le facteur d'échelle du clavier.
Toutes les modulations de hauteurs sont en octaves, demi-tons, et en cents.

Boucle d'échantillon

L'oscillateur joue un échantillon numérique qui est décrit par un point de départ, point final, et deux points décrivant une loop. Le son peut être marquée comme non-bouclé (unlooped), dans ce cas, les points de boucle sont ignorés.
Si le son est bouclé, il peut être lu de deux façons.
  • boucle "during release " : le son est joué à partir du point de départ de la boucle, et bouclé jusqu'à ce que la note devienne inaudible.
  • le son est joué à partir du point de départ de la boucle, et bouclé jusqu'à ce que la touche soit relâchée ; Dans ce cas, si le point de fin de boucle n'est pas atteint au relachement, le son se poursuit jusqu'au le point de fin de boucle et joue jusqu'à ce que le point final soit atteint pour terminer le son.

Filtre passe-bas.


tuto_soundfont-SF2-sch01.png Le modèle de synthèse contient un filtre passe-bas à résonance, qui est caractérisé par une fréquence de coupure dynamique et une résonance fixe (Q).Le filtre est initialisé à la résonance 0 comme ayant une bande passante plate à la fréquence de coupure, puis une pente de diminution à 6 dB par octave au-dessus de cette fréquence.La résonance, si différente de 0, comprenant un pic à la fréquence de coupure, superposée à la réaction ci-dessus. La résonance est mesurée en tant que rapport en dB du pic de résonance pour le gain DC. Le gain en courant continu à une résonance correspond à la moitié de la valeur de résonance en dessous du gain en courant continu à résonance nul, d'où la hauteur de pic est la moitié de la valeur de résonance au-dessus le gain en courant continu à résonance zéro.
Toutes les modulations de fréquence de coupure sont en octaves, demi-tons, et en cents.


Amplificateur de gain final .


L'amplificateur final de gain agit sur la sortie du filtre, il est ajouté à l'enveloppe de volume. Une modulation supplémentaire peut également être ajouté. Le gain est toujours spécifié en dB.

Acheminement des Effets.


La sortie del'amplificateur de gain final peut être acheminé vers l'unité d'effets. Cette unité implique que le son soit dans un contexte stéréo, et qu'un effet de réverbération et de chorus puissent être ajoutés. Le panoramique est spécifiée en termes de pourcentage de gauche et de droite, qui pourrait également être considéré comme un angle d'azimut. Les valeurs de réverbération et chorus sont exprimées en pourcentage appliqués sur l'amplitude du signal reçu par ces unités de 0% à 100%.

Oscillateurs basse fréquence LFO.


Le modèle de synthèse prévoit deux oscillateurs basse fréquence (LFO) pour moduler le pitch, filtre cutoff, et l'amplitude.
  • Le vibrato LFO qui module le pitch.
  • La modulation LFO qui module l'un de ces trois paramètres.
Un LFO est défini comme ayant une période de retard au cours de laquelle sa valeur reste à zéro, suivie par une forme d'onde triangulaire en rampe linéaire démarrant vers le positif +1, puis tendant vers -1, ensuite inversant vers +1 etc..
Chaque paramètre peut être modulé de diverses valeurs, quelles soient positives ou négatives, par le LFO associé. Les modulations de pitch et cutoff sont en octaves, demi-tons, et en cents, tandis que les modulations d'amplitude sont en dB. La valeur de modulation LFO est exprimé en cents ou dB positif pour la totalité de la montée.

Générateurs d'enveloppe.


Le modèle de synthèse prévoit deux générateurs d'enveloppe :
  • Le générateur d'enveloppe de volume qui contrôle l'amplificateur final de gain et par conséquent détermine le contour de volume du son.
  • La modulation d'enveloppe qui peut contrôler le pitch et/ou le filtre cutoff.
Une enveloppe génère un signal de commande à six phases. Lorsqu'un key-on (message MIDI d'appui de touche) a lieu :
  1. une période de retard commence au cours de laquelle la valeur d'enveloppe est égale à zéro.
  2. L'enveloppe s'élève alors en une courbe convexe par rapport à une valeur 1 au cours de la phase d'attaque.
  3. Lorsque la valeur 1 est atteinte, l'enveloppe entre dans une phase de maintien au cours de laquelle elle reste à 1.
  4. Lorsque la phase d'attente se termine, l'enveloppe entre dans une phase de décroissance au cours de laquelle sa valeur diminue de manière linéaire à un niveau de maintien.
  5. Lorsque le niveau de maintien est atteint, l'enveloppe entre en soutien de la phase au cours de laquelle l'enveloppe reste au niveau de maintien.
Quand le key-off (message MIDI de relachement de touche) se produit, l'enveloppe passe immédiatement une phase de libération au cours de laquelle la valeur décroit linéairement depuis sa valeur et tend vers 0. Lorsque le 0 est atteint, l'enveloppe reste à 0.

Les modulation de pitch et de filtre cutoff sont en octaves, demi-tons, et en cents. Ces paramètres peuvent être modulés à des degrés divers en positif ou négatif, par l'enveloppe de modulation. Le degré de modulation est exprimé en cents pour la totalité de l'échelle du pic d'attaque.
L'enveloppe de volume fonctionne en dB, avec un pic d'attaque fournissant une sortie à pleine échelle, adapté de manière appropriée par le volume initial. La valeur zéro, cependant, est en fait un gain nul. La mise en œuvre du EMU8000 prévoit 96 dB de commande d'amplitude. Lorsque 96 dB d'atténuation est atteint dans le dernier amplificateur de gain, un saut brusque à zéro le gain (dB d'atténuation infinie) se produit. Dans un système 16-bit, ce saut est inaudible.

Résumé de l'interconnexion des modulateurs



tuto_soundfont-SF2-sch02.png Le schéma suivant montre l'interconnexion exprimé dans la spécification du modèle de synthèse SoundFont2:


Fonctions MIDI.


La réponse à certaines commandes MIDI est définie dans la norme MIDI, et n'est donc pas considérée comme faisant partie de la spécification SF2. Ces commandes MIDI ne peuvent pas être utilisés comme sources pour la mise en œuvre de modulateur.
Par souci d'exhaustivité, des réponses sont donnés ici pour la spécification version 2.00b :
  • Pitch key number MIDI : dans la version 2.00a de cette spécification, c'est le paramètre "Scale Tune" dans la liste de générateur, est également considéré comme un véritable modulateur et est donc retiré de cette liste.
  • MIDI Pitch Bend : dans la version 2.00a de cette spécification, il est considéré comme un véritable modulateur et est donc éliminé de cette liste.
code MIDI libellé description
0 Bank Select Le changement de programme suivant devrait sélectionner le programme MIDI de cette valeur de la banque à la place de la banque par défaut de 0.
6 Data Entry MSB La valeur récetionnée doit être envoyée soit au RPN ou NRPN selon le mode de saisie de données.
32 Bank Select LSB Peut se comporter en conjonction avec le code 0 Bank select pour fournir un total de 16384 programme de banques MIDI possibles.
38 données Entry LSB Après réception, la valeur doit être envoyée soit au RPN ou NRPN en fonction du mode de saisie de données.
64 Sustain Actif lorsque supérieur ou égal à 64. Lorsque la fonction de sustain est activée, toutes les notes persistent même si un key-off est envoyé. Les commandes key-off sont stockées, et lorsque le sustain devient inactif, toutes les commandes key-off stockées sont exécutées.
66 soft Actif lorsque supérieur ou égal à 64. Lorsqu'il est activé, toutes les key-on sont modulées de manière à rendre le son de la note plus doux. Touchant l'atténuation initiale et le filtre de coupure.
67 Sostenuto Actif lorsque supérieur ou égal à 64. Quand il devient actif, toutes les key-on persistent dans leur état jusqu'à ce que le sostenuto deviennent inactif. Toutes les autres notes se comportent normalement. Notez que le maintien par sostenuto de key-on persiste même si un sustain est activé puis éteint, pendant sa durée.
98 NRPN LSB A sa réception, le synthétiseur devrait se mettre en mode de saisie de données et les valeurs, traitées par le NRPN.
99 NRPN MSB A sa réception, le synthétiseur devrait se mettre en mode de saisie de données et les valeurs, traitées par le NRPN.
100 RPN LSB A sa réception, le synthétiseur devrait se mettre en mode de saisie de données et les valeurs, traitées par le RPN.
101 RPN MSB A sa réception, le synthétiseur devrait se mettre en mode de saisie de données et les valeurs, traitées par le RPN.
120 All Sound Off A la réception de cette valeur : toutes les notes en cours doivent s'arrêter, quelles que soient les positions sustain ou sostenuto.
121 Reset All Controllers Agit tel que défini par la norme MIDI. Ce code réinitialise les valeurs des contrôleurs MIDI à l'état par défaut ou à leur valeur initiale.
123 All Notes Off A la réception de cette valeur : toutes les notes key-on en cours entre immédiatement dans la phase de release, en tenant compte de leur statut de sustain ou sostenuto.


Unités des paramètres.


Les unités avec lesquelles les générateurs SoundFont sont décrits sont tous bien définis. Les définitions strictes apparaissent ci-dessous:
ABSOLUTE SAMPLE DATA POINTS un index numérique de 16 bits type du data points de l'échantillon tel qu'il est stocké dans la mémoire ROM ou fournie dans le smpl.
RELATIVE SAMPLE DATA POINTS un déplacement de 16 bits basé sur une référence en data point absolu. Une valeur négative indique déplacement vers le début des données.
ABSOLUTE SEMITONES Demi-tons absolu : une mesure logarithmique absolue de fréquence basée sur une référence de MIDI key number. Un demi-ton est 1/12 d'une octave, et la valeur 69 est de 440 Hz (A-440). Les valeurs négatives et des valeurs supérieures à 127 sont autorisées.
RELATIVE SEMITONES Une mesure logarithmique relative du taux de fréquence basée sur les unités de 1/12 d'octave, qui est la racine douzième de deux, environ 1,059463094.
ABSOLUTE CENTS une mesure logarithmique absolue de fréquence basée sur une référence de MIDI key number échelonnée jusque 100. Un cent est de 1/1200 sur une octave, et la valeur 6900 est de 440 Hz (A-440). Les valeurs négatives et des valeurs supérieures à 12700 sont autorisés.
RELATIVE CENTS Une mesure logarithmique relative du taux de fréquence basé sur des unités de 1/1200 sur une octave, qui est la racine douze centièmes de deux, environ 1,000577790.
ABSOLUTE CENTIBELS une mesure absolue de l'atténuation d'un signal, basé sur une référence à zéro sans atténuation. Un centibel est un dixième de décibel, ou un rapport de l'amplitude du signal de la racine deux centième de 10, approximativement 1,011579454.
RELATIVE CENTIBELS une mesure relative de l'atténuation d'un signal. Un centibel est un dixième de décibel, ou un rapport de l'amplitude du signal de la racine deux centième de 10, approximativement 1,011579454.
ABSOLUTE TIMECENTS Une mesure absolue de temps, basé sur une référence de zéro et représentant une seconde. Un timecent représente un ratio dans le temps de la racine douze centième de deux, environ 1,011579454.
RELATIVE TIMECENTS Une mesure relative du ratio de temps, basée sur la taille de l'unité de ma racine douze centième de deux, environ 1,011579454.
ABSOLUTE PERCENT Une mesure absolue du gain, basé sur une référence de l'unité. En SF2, elle est donnée en unités de 0,1%, donc une valeur de zéro est 0% et une valeur de 1000 donne 100%.
RELATIVE PERCENT Pourcentage relatif, une mesure relative de la différence de gain. En SF2, elle est donnée en unités de 0,1%. Lorsque le gain devient négatif, il est supposé = 0; lorsque le gain est supérieur à 100%, la valeur 100% est utilisée.


Le modèle de générateur SoundFont


Cinq types d'énumérateur Generator existent: Index Generators, Range Generators, Substitution Generators, Sample Generators,et Value Generators.
Ce qui suit est la priorité du générateur SoundFont dans la hiérarchie de format de fichier SoundFont.

un ensemble de générateur ou des compensations de la valeur d'une destination ou d'un paramètre de synthèse. Dans les cas d'exception, il définit les plages (générateurs de la gamme), ou fixe des valeurs et de ne jamais les valeurs des décalages (indice générateurs, des échantillons et les générateurs de substitution).
Un générateur est défini comme étant identique à un autre générateur si son opérateur générateur est le même dans les deux générateurs.
Un générateur dans une zone de bord global qui est identique à une remplace générateur de défaut ou remplace le générateur par défaut.
Un générateur dans une zone locale de l'appareil qui est identique à un générateur de défaut ou d'un générateur, dans une zone instrument mondial remplace ou remplace cette génératrice
Les points ci-dessous (ceux noté) s'appliquent aux Value Generators uniquement.
Un générateur du Preset Level s'ajoute à un générateur à un Instrument Level si les deux générateurs sont identiques.
Un générateur dans une Preset Zone globale qui est identique à un générateur par défaut ou d'un générateur dans un instrument ajouté à ce générateur.
Un générateur dans une Preset Zone globale qui n'est pas identique à un Value Generators par défaut et n'est pas identique à un générateur dans un instrument a son effet ajoutée au paramètre de synthèse proposée.
Un générateur dans une Preset Zone locale qui est identique à un générateur dans une Preset Zone globale remplace ce générateur du Preset Zone globale. Ce générateur a alors ses effets ajoutés au nœud destination-sommation de toutes les zones de l'instrument donné.
Un générateur dans une Preset Zone locale qui n'est pas identique à un générateur par défaut ou d'un générateur Preset Zone globale, a ses effets ajoutés au noeud de sommation de destination de toutes les zones de l'instrument donné.
Si le générateur en opération est un Range Generator , les valeurs du générateur ne sont pas ajoutés à ceux du niveau de l'instrument, ils servent plutôt comme un filtre intersection à ces key number ou velocity ranges dans l'instrument qui est utilisé dans la Preset Zone.
Si le générateur en opération est un Substitution Generator ou un Sample Generator , elles sont illégales au niveau prédéfini. Le seul Index Generator légal au Preset Level est «instrumentID», alors que le seul Index Generator légal au Instrument Level est «sampleID.

Le modèle de contrôle du modulator Soundfont .

Les Modulateurs SoundFont sont utilisés pour permettre le contrôle en temps réel sur le son à la manière de concepteur de son programmable. Chaque instance d'une structure de modulateur SoundFont définit un effet en temps réel additionnable à appliquer à une destination donnée ou un paramètre de synthétiseur.


Théorie sur les opérations du modèle de Contrôle.

Le modèle de commande de modulateur SoundFont est un mécanisme polyvalent destiné à permettre un contrôle souple et complexe en temps réel sur les paramètres de synthèse fournies. Alors que SoundFont2.00 fournit un mécanisme pour fixer les conditions initiales pour une grande variété de paramètres de synthèse ou des générateurs à plusieurs niveaux de la hiérarchie (niveau de l'instrument, les zones global / local, etc Preset /), l'ajout de la SoundFont Modulator Contrôleur fournit un mécanisme pour permettre en temps réel le contrôle sur ces mêmes paramètres sur les mêmes niveaux de la hiérarchie.
Le modèle de commande de modulateur SoundFont est ce qu'il faut pour transformer le modèle de synthèse à base de générateur plutôt simpliste dans un modèle de synthèse complexe et beaucoup plus intéressant.
Le schéma suivant montre la nature générale du modèle de contrôleur SoundFont:






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)
  • »