Siren includes several interfaces between Smalltalk and C to access sound and MIDI I/O in a cross-platform manner. These use the DLLCC package to generate Smalltalk classes whose methods are references to C functions in a dynamic library.
To compile and load these, you should either down-load the CSL library binaries package from the CSL home page (http://fastlabinc.com/CSL) or else you need to be able to use your platform's C compiler and linker (a Makefile is provided), and to capture the standard output from a VisualWorks virtual machine (normally routed to a console window).
Load and test the DLLCC External Interfaces
LibSndFile - sound file IO in many formats
[LibSndFileInterface example1: 'unbelichtet.aiff']
PortMIDI - cross-platform MIDI API
[PortMidiInterface testMIDI]
PortAudio - cross-platform audio API
[PortAudioInterface example0]
FFTW - Fast Fourier Transform
[FFTWInterface example] (try this twice)
Look at each of the interface class defs in MusicIO-External and plug in the directory names for your dynamic libraries. Each of these tests dumps output to the transcript and to the VM's stdout/console.
Flush all
[SirenExternalInterface unload]
LibSndFile - see the class def for Siren.LibSndFileInterface in category MusicIO-External; tune the lines
#(#libraryFiles #('libsndfile.dylib' 'sndfile_lite.dylib'))
#(#libraryDirectories #('Siren7.5/DLLCC' '/usr/local/lib'))
This test dumps the first few 100 samples of the test file to the transcript.
[LibSndFileInterface example1: 'unbelichtet.aiff']
"LibSndFileInterface unloadLibraries"
PortMIDI - see the class def for Siren.LibSndFileInterface in category MusicIO-External; tune the lines
#(#libraryFiles #('portmidi_lite.dylib' 'portmidi.dylib' 'CoreMIDI'))
#(#libraryDirectories #('/usr/local/lib' 'Siren7.5/DLLCC'
'/System/Library/Frameworks/CoreMIDI.framework/Versions/Current'))
This test prints the return values of a few simple MIDI operations to the transcript.
Look in the standard output of the VM (on the Mac, this means open a console tool) to see the device list that is dumped by the initialize method.
[MIDIPort testOpenClose]
[PortMidiInterface testMIDI]
[MIDIPort testANote]
"PortMidiInterface unloadLibraries"
PortAudio - see the class def for Siren.PortAudioInterface in category MusicIO-External; tune the lines
#(#libraryFiles #('portaudio_lite.dylib' 'libportaudio.dylib'))
#(#libraryDirectories #('Siren7.5/DLLCC' '/usr/local/lib'))
These tests are progressive, first open/close only, then simple call-backs, then actual data transfer
Look in the standard output of the VM (on the Mac, this means open a console tool) to see the device list that is dumped by the initialize method.
[PortAudioInterface example0]
[PortAudioInterface example1]
[PortAudioPort playSweep]
"PortAudioInterface unloadLibraries"
FFTW - see the class def for Siren.FFTWInterface in category MusicIO-External; tune the lines
#(#libraryFiles #('fftw_lite.dylib' 'libfftw3f.a'))
#(#libraryDirectories #('/usr/local/lib'))
The basic test creates a sawtooth wave and takes its FFT, displaying the result in a function view. The view also displays the original signal if you hold
[FFTWInterface example]
There are more examples of the use of FFTW in the Spectrum class.
See also the sections below on the SWIG interfaces to CSL and Loris.
[Spectrum sweepExample display]
[Spectrum fileExample display]