FLsavesnap — Sauvegarde dans un fichier tous les instantanés actuellement créés.
Opcode du greffon widgets. Ce greffon se trouve dans le répertoire des greffons et il doit être installé séparément. Les widgets FLTK ne fonctionnent pas sur Mac. Le répertoire des greffons est ici : https://github.com/csound/plugins
FLsavesnap sauvegarde dans un fichier tous les instantanés actuellement créés (c'est-à-dire la banque de mémoire en entier).
« filename » -- une chaîne de caractères entre guillemets correspondant à un fichier dans lequel sauvegarder une banque d'instantanés.
igroup -- (facultatif) un nombre entier faisant référence à un groupe de widgets en relation avec un instantané. Cela permet de lire/écrire, ou charger/sauvegarder l'état d'un sous-ensemble de valuateurs. La valeur par défaut est zéro qui fait référence au premier groupe. Le numéro de groupe est déterminé par l'opcode FLsetSnapGroup.
Note | |
---|---|
Le paramètre igroup n'a pas encore été complètement implémenté dans la version actuelle de Csound. Prière de ne pas s'y fier. |
FLsavesnap sauvegarde tous les instantanés actuellement créés (c'est-à-dire la banque de mémoire en entier) dans un fichier dont le nom est filename. Comme le fichier est un fichier texte, les valeurs des instantanés peuvent être modifiées manuellement dans un éditeur de texte. Le format des données du fichier est le suivant (pour le moment, ceci pouvant changer dans une prochaine version de Csound) :
----------- 0 ----------- FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLslider 331.946 80 5000 -1 "frequency of the first oscillator" FLslider 385.923 80 5000 -1 "frequency of the second oscillator" FLslider 80 80 5000 -1 "frequency of the third oscillator" FLcount 0 0 10 0 "this index must point to the location number where snapshot is stored" FLbutton 0 0 1 0 "Store snapshot to current index" FLbutton 0 0 1 0 "Save snapshot bank to disk" FLbutton 0 0 1 0 "Load snapshot bank from disk" FLbox 0 0 1 0 "" ----------- 1 ----------- FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLslider 819.72 80 5000 -1 "frequency of the first oscillator" FLslider 385.923 80 5000 -1 "frequency of the second oscillator" FLslider 80 80 5000 -1 "frequency of the third oscillator" FLcount 1 0 10 0 "this index must point to the location number where snapshot is stored" FLbutton 0 0 1 0 "Store snapshot to current index" FLbutton 0 0 1 0 "Save snapshot bank to disk" FLbutton 0 0 1 0 "Load snapshot bank from disk" FLbox 0 0 1 0 "" ----------- 2 ----------- ..... etc... ----------- 3 ----------- ..... etc... ---------------------------
Comme on peut le voir, chaque instantané contient plusieurs lignes. Chaque instantané est séparé du précédent et du suivant par une ligne de cette sorte :
"----------- Num d'instantané -----------"
Suivent plusieurs lignes contenant les données. Chacune de ces lignes correspond à un widget.
Le premier champ de chaque ligne est une chaîne de caractères sans guillemets contenant le nom de l'opcode correspondant au widget. Le second champ est un nombre exprimant la valeur courante d'un instantané. Dans la version actuelle, c'est le seul champ que l'on peut modifier manuellement. Les troisième et quatrième champs montrent les valeurs minimale et maximale pour ce valuateur. Le cinquième champ est un nombre spécial qui indique si le valuateur est linéaire (valeur 0), exponentiel (valeur -1), ou est indexé par une table avec interpolation des valeurs (numéro de table négatif) ou sans interpolation (numéro de table positif). Le dernier champ, une chaîne de caractères entre guillemets, contient l'étiquette du widget. La dernière ligne du fichier est toujours
"---------------------------"
.
Noter que FLvalue et FLbox ne sont pas des valuateurs et que leurs valeurs sont constantes, ne pouvant pas être modifées.
Pour économiser la mémoire, les widgets peuvent être groupés afin que les instantanés n'affectent qu'un groupe défini de widgets. L'opcode FLsetSnapGroup est utilisé pour spécifier le groupe de tous les widgets déclarés après lui jusqu'à la prochaine instruction FLsetSnapGroup.
Voici un exemple simple de sauvegarde d'un instantané FLTK. Il utilise le fichier FLsavesnap_simple.csd.
Exemple 328. Exemple de sauvegarde d'un instantané FLTK.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O </CsOptions> <CsInstruments> sr=48000 ksmps=128 nchnls=2 ; Example by Hector Centeno and Andres Cabrera 2007 ; giSWMtab4 ftgen 0, 0, 513, 21, 10, 1, .3 ; giSWMtab4M ftgen 0, 0, 64, 7, 1, 50, 1 FLpanel "Snapshots", 530, 190, 40, 410, 3 FLcolor 100, 118 ,140 ivalSM1 FLvalue "", 70, 20, 270, 20 gksliderA, gislidSM1 FLslider "Slider", -4, 4, 0, 3, ivalSM1, 250, 20, 20, 20 itext1 FLbox "store", 1, 1, 14, 50, 25, 355, 15 itext2 FLbox "load", 1, 1, 14, 50, 25, 415, 15 gksnap, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 364, 45, 0, 3, 0, 3, 1 gksnap, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 364, 75, 0, 3, 0, 3, 2 gksnap, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 364, 105, 0, 3, 0, 3, 3 gksnap, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 364, 135, 0, 3, 0, 3, 4 gkload, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 424, 45, 0, 4, 0, 3, 1 gkload, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 424, 75, 0, 4, 0, 3, 2 gkload, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 424, 105, 0, 4, 0, 3, 3 gkload, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 424, 135, 0, 4, 0, 3, 4 ivalSM2 FLvalue "", 70, 20, 270, 80 gkknobA, gislidSM2 FLknob "Knob", -4, 4, 0, 3, ivalSM2, 60, 120, 60 FLpanelEnd FLsetVal_i 1, gislidSM1 FLsetVal_i 1, gislidSM2 FLrun instr 1 endin instr 3 ; Save snapshot index init 0 ipstno = p4 Sfile sprintf "snapshot_simple.%d.snap", ipstno inumsnap, inumval FLsetsnap index ;, -1, igroup FLsavesnap Sfile endin instr 4 ;Load snapshot index init 0 ipstno = p4 Sfile sprintf "snapshot_simple.%d.snap", ipstno FLloadsnap Sfile inumload FLgetsnap index ;, igroup endin </CsInstruments> <CsScore> f 0 3600 e </CsScore> </CsoundSynthesizer>
Voici un autre exemple de sauvegarde d'instantané FLTK utilisant des groupes d'instantanés. Il utilise le fichier FLsavesnap.csd.
Exemple 329. Exemple de sauvegarde d'instantané FLTK utilisant des groupes d'instantanés.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O </CsOptions> <CsInstruments> sr=48000 ksmps=128 nchnls=2 ; Example by Hector Centeno and Andres Cabrera 2007 ; giSWMtab4 ftgen 0, 0, 513, 21, 10, 1, .3 ; giSWMtab4M ftgen 0, 0, 64, 7, 1, 50, 1 FLpanel "Snapshots", 530, 350, 40, 410, 3 FLcolor 100, 118 ,140 FLsetSnapGroup 0 ivalSM1 FLvalue "", 70, 20, 270, 20 ivalSM2 FLvalue "", 70, 20, 270, 60 ivalSM3 FLvalue "", 70, 20, 270, 100 ivalSM4 FLvalue "", 70, 20, 270, 140 gksliderA, gislidSM1 FLslider "Slider A", -4, 4, 0, 3, ivalSM1, 250, 20, 20, 20 gksliderB, gislidSM2 FLslider "Slider B", 1, 10, 0, 3, ivalSM2, 250, 20, 20, 60 gksliderC, gislidSM3 FLslider "Slider C", 0, 1, 0, 3, ivalSM3, 250, 20, 20, 100 gksliderD, gislidSM4 FLslider "Slider D", 0, 1, 0, 3, ivalSM4, 250, 20, 20, 140 itext1 FLbox "store", 1, 1, 14, 50, 25, 355, 15 itext2 FLbox "load", 1, 1, 14, 50, 25, 415, 15 itext3 FLbox "Group 1", 1, 1, 14, 30, 145, 485, 15 gksnap, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 364, 45, 0, 3, 0, 3, 1 gksnap, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 364, 75, 0, 3, 0, 3, 2 gksnap, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 364, 105, 0, 3, 0, 3, 3 gksnap, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 364, 135, 0, 3, 0, 3, 4 gkload, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 424, 45, 0, 4, 0, 3, 1 gkload, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 424, 75, 0, 4, 0, 3, 2 gkload, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 424, 105, 0, 4, 0, 3, 3 gkload, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 424, 135, 0, 4, 0, 3, 4 FLcolor 100, 140 ,118 FLsetSnapGroup 1 ivalSM5 FLvalue "", 70, 20, 270, 190 ivalSM6 FLvalue "", 70, 20, 270, 230 ivalSM7 FLvalue "", 70, 20, 270, 270 ivalSM8 FLvalue "", 70, 20, 270, 310 gkknobA, gislidSM5 FLknob "Knob A", -4, 4, 0, 3, ivalSM5, 45, 10, 230 gkknobB, gislidSM6 FLknob "Knob B", 1, 10, 0, 3, ivalSM6, 45, 75, 230 gkknobC, gislidSM7 FLknob "Knob C", 0, 1, 0, 3, ivalSM7, 45, 140, 230 gkknobD, gislidSM8 FLknob "Knob D", 0, 1, 0, 3, ivalSM8, 45, 205, 230 itext4 FLbox "store", 1, 1, 14, 50, 25, 355, 185 itext5 FLbox "load", 1, 1, 14, 50, 25, 415, 185 itext6 FLbox "Group 2", 1, 1, 14, 30, 145, 485, 185 gksnap, ibuttn1 FLbutton "5", 1, 0, 11, 25, 25, 364, 215, 0, 3, 0, 3, 5 gksnap, ibuttn2 FLbutton "6", 1, 0, 11, 25, 25, 364, 245, 0, 3, 0, 3, 6 gksnap, ibuttn3 FLbutton "7", 1, 0, 11, 25, 25, 364, 275, 0, 3, 0, 3, 7 gksnap, ibuttn4 FLbutton "8", 1, 0, 11, 25, 25, 364, 305, 0, 3, 0, 3, 8 gkload, ibuttn1 FLbutton "5", 1, 0, 11, 25, 25, 424, 215, 0, 4, 0, 3, 5 gkload, ibuttn2 FLbutton "6", 1, 0, 11, 25, 25, 424, 245, 0, 4, 0, 3, 6 gkload, ibuttn3 FLbutton "7", 1, 0, 11, 25, 25, 424, 275, 0, 4, 0, 3, 7 gkload, ibuttn4 FLbutton "8", 1, 0, 11, 25, 25, 424, 305, 0, 4, 0, 3, 8 FLpanelEnd FLsetVal_i 1, gislidSM1 FLsetVal_i 1, gislidSM2 FLsetVal_i 0, gislidSM3 FLsetVal_i 0, gislidSM4 FLsetVal_i 1, gislidSM5 FLsetVal_i 1, gislidSM6 FLsetVal_i 0, gislidSM7 FLsetVal_i 0, gislidSM8 FLrun instr 1 endin instr 3 ; Save snapshot index init 0 ipstno = p4 igroup = 0 Sfile sprintf "PVCsynth.%d.snap", ipstno if ipstno > 4 then igroup = 1 endif inumsnap, inumval FLsetsnap index , -1, igroup FLsavesnap Sfile endin instr 4 ;Load snapshot index init 0 ipstno = p4 igroup = 0 Sfile sprintf "PVCsynth.%d.snap", ipstno if ipstno > 4 then igroup = 1 endif FLloadsnap Sfile inumload FLgetsnap index , igroup endin </CsInstruments> <CsScore> ;Dummy table for FLgetsnap ; f 1 0 1024 10 1 f 0 3600 e </CsScore> </CsoundSynthesizer>