1;Written by Iain McCurdy, 2008
2
3;Modified for QuteCsound by René, February 2011
4;Tested on Ubuntu 10.04 with csound-float 5.13.0 and QuteCsound svn rev 817
5
6;Notes on modifications from original csd:
7;	Add table for exp slider
8
9
10;my flags on Ubuntu: -odac -b1024 -B2048 -+rtaudio=alsa -+rtmidi=null -m0
11<CsoundSynthesizer>
12<CsOptions>
13
14</CsOptions>
15<CsInstruments>
16sr 		= 44100	;SAMPLE RATE
17ksmps 	= 1		;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE
18nchnls	= 2		;NUMBER OF CHANNELS (2=STEREO)
190dbfs	= 1		;MAXIMUM AMPLITUDE REGARDLESS OF BIT DEPTH
20
21
22gidata		ftgen	0,0,4,-2,0
23giDataTypeFlag	=		1							;0=BINARY NON-ZERO=TEXT - THIS DEFINES THE DATA TYPE IN THE FILE SAVED TO SUBSEQUENTLY LOADED FROM DISK
24gisine		ftgen	0, 0, 1024, 10, 1				;SINE WAVE
25giexp		ftgen	0, 0, 1024, 19, .5, .5, 270, .5	;EXPONENTIAL CURVE
26
27;TABLE FOR EXP SLIDER
28giExp1	ftgen	0, 0, 129, -25, 0,  1.0, 128, 5000.0
29giExp3	ftgen	0, 0, 129, -25, 0, 50.0, 128, 5000.0
30
31
32instr	10	;GUI
33	ktrig	metro	10
34	if (ktrig == 1)	then
35		gkSlider1 	invalue	"Slider1"
36		gkSlider11	tablei	gkSlider1, giExp1, 1
37		gkSlider2 	invalue	"Slider2"
38		gkSlider3		invalue	"Slider3"
39		gkSlider33	tablei	gkSlider3, giExp3, 1
40	endif
41endin
42
43instr	1	;SAVE DATA
44	tableiw	i(gkSlider1), 0, gidata								;SLIDER DATA IS WRITTEN TO THE FUNCTION TABLE
45	tableiw	i(gkSlider2), 1, gidata								;SLIDER DATA IS WRITTEN TO THE FUNCTION TABLE
46	tableiw	i(gkSlider3), 2, gidata								;SLIDER DATA IS WRITTEN TO THE FUNCTION TABLE
47	ftsave	"Data.txt", giDataTypeFlag, gidata						;FUNCTION TABLE IS SAVED AS A TEXT FILE (FILE EXTENSION COULD BE ANYTHING OR NOTHING BUT MAKING IT A TEXT FILE MAKES IT EASY TO OPEN AND EXAMINE AND POSSIBLY ALTER - FOR THIS, DATA TYPE FLAG SHOULD BE NON-ZERO)
48endin
49
50instr	2	;LOAD DATA
51			ftload	"Data.txt", giDataTypeFlag, gidata				;LOAD FILE Data.txt TO FUNCTION TABLE gidata
52	iSlider1	table	0, gidata									;READ DATA ITEM FROM TABLE
53			outvalue	"Slider1", iSlider1							;SEND DATA TO THE APPROPRIATE SLIDER
54	iSlider2	table	1, gidata									;READ DATA ITEM FROM TABLE
55			outvalue	"Slider2", iSlider2							;SEND DATA TO THE APPROPRIATE SLIDER
56	iSlider3	table	2, gidata									;READ DATA ITEM FROM TABLE
57			outvalue	"Slider3", iSlider3							;SEND DATA TO THE APPROPRIATE SLIDER
58endin
59
60instr	3	;SOUND IS PRODUCED BY THE FOF OPCODE:
61	;ASIG 	FOF 	GKAMP  |   KFUND     |    KFORM     | GKOCT    | GKBAND | GKRIS | GKDUR | GKDEC | IOLAPS | IFNA |  IFNB |  ITOTDUR
62	asig 	fof	0.2,      gkSlider11,    gkSlider33,  gkSlider2,     50,    .003,     .1,    .007,    500,  gisine,  giexp,     3600
63			outs	asig, asig
64endin
65</CsInstruments>
66<CsScore>
67i 10 0 3600	;GUI
68i  3 0 3600
69</CsScore>
70</CsoundSynthesizer>
71
72
73
74<bsbPanel>
75 <label>Widgets</label>
76 <objectName/>
77 <x>72</x>
78 <y>179</y>
79 <width>400</width>
80 <height>200</height>
81 <visible>true</visible>
82 <uuid/>
83 <bgcolor mode="background">
84  <r>241</r>
85  <g>226</g>
86  <b>185</b>
87 </bgcolor>
88 <bsbObject version="2" type="BSBLabel">
89  <objectName/>
90  <x>2</x>
91  <y>2</y>
92  <width>790</width>
93  <height>321</height>
94  <uuid>{049f4dd4-ff71-4d6d-9157-43c84efad8a4}</uuid>
95  <visible>true</visible>
96  <midichan>0</midichan>
97  <midicc>0</midicc>
98  <label>ftsave, ftload</label>
99  <alignment>center</alignment>
100  <font>Liberation Sans</font>
101  <fontsize>18</fontsize>
102  <precision>3</precision>
103  <color>
104   <r>255</r>
105   <g>255</g>
106   <b>255</b>
107  </color>
108  <bgcolor mode="background">
109   <r>5</r>
110   <g>27</g>
111   <b>150</b>
112  </bgcolor>
113  <bordermode>border</bordermode>
114  <borderradius>5</borderradius>
115  <borderwidth>2</borderwidth>
116 </bsbObject>
117 <bsbObject version="2" type="BSBHSlider">
118  <objectName>Slider2</objectName>
119  <x>159</x>
120  <y>62</y>
121  <width>500</width>
122  <height>27</height>
123  <uuid>{e5fa660d-82a5-412a-a76a-500a0632ee0c}</uuid>
124  <visible>true</visible>
125  <midichan>0</midichan>
126  <midicc>0</midicc>
127  <minimum>0.00000000</minimum>
128  <maximum>4.00000000</maximum>
129  <value>0.38400000</value>
130  <mode>lin</mode>
131  <mouseControl act="jump">continuous</mouseControl>
132  <resolution>-1.00000000</resolution>
133  <randomizable group="0">false</randomizable>
134 </bsbObject>
135 <bsbObject version="2" type="BSBHSlider">
136  <objectName>Slider1</objectName>
137  <x>159</x>
138  <y>36</y>
139  <width>500</width>
140  <height>27</height>
141  <uuid>{3911e6c3-0337-45b0-81d8-e63c67cae1f3}</uuid>
142  <visible>true</visible>
143  <midichan>0</midichan>
144  <midicc>0</midicc>
145  <minimum>0.00000000</minimum>
146  <maximum>1.00000000</maximum>
147  <value>0.65399998</value>
148  <mode>lin</mode>
149  <mouseControl act="jump">continuous</mouseControl>
150  <resolution>-1.00000000</resolution>
151  <randomizable group="0">false</randomizable>
152 </bsbObject>
153 <bsbObject version="2" type="BSBHSlider">
154  <objectName>Slider3</objectName>
155  <x>159</x>
156  <y>88</y>
157  <width>500</width>
158  <height>27</height>
159  <uuid>{efb2995a-4ef2-403a-b994-9661bc9f673e}</uuid>
160  <visible>true</visible>
161  <midichan>0</midichan>
162  <midicc>0</midicc>
163  <minimum>0.00000000</minimum>
164  <maximum>1.00000000</maximum>
165  <value>0.46399999</value>
166  <mode>lin</mode>
167  <mouseControl act="jump">continuous</mouseControl>
168  <resolution>-1.00000000</resolution>
169  <randomizable group="0">false</randomizable>
170 </bsbObject>
171 <bsbObject version="2" type="BSBLabel">
172  <objectName/>
173  <x>5</x>
174  <y>114</y>
175  <width>785</width>
176  <height>208</height>
177  <uuid>{d53e476a-429b-46b1-8781-cc346c263b62}</uuid>
178  <visible>true</visible>
179  <midichan>0</midichan>
180  <midicc>0</midicc>
181  <label>-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
182ftsave and ftload allow the contents of function tables to be saved to and loaded from files stored on the computer's hard disk. There could be many practical uses for this function. In this example I am using ftsave and ftload to store the locations of sliders (and therefore the variables they output). When the 'Save' button is pressed the values from the three sliders are first stored into a function table and then that function table is stored as a file on the hard disk which in this example I have named 'data.txt'. When the 'Load' button is pressed the reverse procedure is carried out - the file 'data.txt' is loaded into a function table, relevant values are read from the table and then sent to the sliders. The advantage that this method of storing presets might have over the method using QuteCsound embedded presets is that the user has control over which valuators to store in the preset file. When using ftsave and ftload we can save the data as binary data or as text. It doesn't really matter which we choose except that we need to be consistant with the choice we make for ftsave and for ftload. Choosing 'text' makes the file more readable in a text editor. The audio is a simple FOF sound.</label>
183  <alignment>left</alignment>
184  <font>Liberation Sans</font>
185  <fontsize>14</fontsize>
186  <precision>3</precision>
187  <color>
188   <r>255</r>
189   <g>255</g>
190   <b>255</b>
191  </color>
192  <bgcolor mode="nobackground">
193   <r>255</r>
194   <g>255</g>
195   <b>255</b>
196  </bgcolor>
197  <bordermode>noborder</bordermode>
198  <borderradius>1</borderradius>
199  <borderwidth>1</borderwidth>
200 </bsbObject>
201 <bsbObject version="2" type="BSBButton">
202  <objectName/>
203  <x>19</x>
204  <y>63</y>
205  <width>60</width>
206  <height>24</height>
207  <uuid>{a20ec77f-2565-41d5-9d36-c2e9fe243e3d}</uuid>
208  <visible>true</visible>
209  <midichan>0</midichan>
210  <midicc>0</midicc>
211  <type>event</type>
212  <pressedValue>1.00000000</pressedValue>
213  <stringvalue/>
214  <text>Save</text>
215  <image>/</image>
216  <eventLine>i 1 0 0.01</eventLine>
217  <latch>false</latch>
218  <latched>false</latched>
219 </bsbObject>
220 <bsbObject version="2" type="BSBButton">
221  <objectName/>
222  <x>86</x>
223  <y>63</y>
224  <width>60</width>
225  <height>24</height>
226  <uuid>{48393902-ffd6-43f6-abac-f72a0cd66ee1}</uuid>
227  <visible>true</visible>
228  <midichan>0</midichan>
229  <midicc>0</midicc>
230  <type>event</type>
231  <pressedValue>1.00000000</pressedValue>
232  <stringvalue/>
233  <text>Load</text>
234  <image>/</image>
235  <eventLine>i 2 0 0.01</eventLine>
236  <latch>false</latch>
237  <latched>false</latched>
238 </bsbObject>
239</bsbPanel>
240<bsbPresets>
241</bsbPresets>
242<EventPanel name="" tempo="60.00000000" loop="8.00000000" x="913" y="162" width="655" height="346" visible="true" loopStart="0" loopEnd="0">    </EventPanel>
243