Sound files
Cabbage and Csound provide several ways of viewing and loading soundfiles. Cabbage provides two unique widgets for viewing sound files, while Csound provides a host of opcodes for reading files from disk, and/or those loaded to a buffer.

Viewing soundfiles in Cabbage
Cabbage provides gentable and soundfiler widgets for viewing sound files. The soundfiler widget is designed to quicky load audio samples. gentable on the other hand is used to
display data from a function table. It renders slower, but features more options on how to display the function table. As soundfiler is built specifically for displaying audio files, the rest of this text will deal with its
use.
To view a sound file add a soundfiler widget to your instrument. It uses a file() identifier to set the audio file to display.
soundfiler bounds(10, 10, 300, 200), file("../samples/test.wav")
To read this file in Csound we can use the diskin2 opcode.
instr 1
a1, a2 diskin2 "../samples/test.wav", 1, 0, 1
outs a1, a2
endin

If you would like to dynamically load a sound file you can use a filebutton widget. You will also need to add an indentifier channel to your soundfiler widget. The following code will let the user browse
for a file when they hit the filebutton1 button.
instr 1
gSfilepath chnget "filebutton1"
kFileChanged changed gSfilepath
if kFileChanged == 1 then ; if user has requested a new file...
event "i", "LoadSoundFile", 0, 0 ; call instrument to update sample storage function table
endif
instr 1 assigns a file name to the gSfilepath variable. The LoadSoundFile instrument reads this variable and loads the audio file to the soundfiler using an identifier channel named soundfiler1.
The code might look like this.
instr LoadSoundFile ; load sound file
if filevalid(gSfilepath) == 1 then
Smessage sprintfk "file(\"%s\")", gSfilepath ; print sound file to viewer
chnset Smessage, "soundfiler1"
endif
endin