cannam@125: cannam@125: cannam@125: cannam@125:
cannam@125:cannam@125: GNU Octave is a high-level interactive cannam@125: language for numerical computations. cannam@125: There are currently two development streams, a stable 2.0.X series and a cannam@125: development 2.1.X series. cannam@125: Octave reads and writes data in binary formats that were originally developed cannam@125: for cannam@125: MATLAB. cannam@125: Version 2.0.X of Octave uses binary data files compatible with MATLAB cannam@125: version 4.2 while Octave 2.1.X uses binary data files compatible cannam@125: with MATLAB version 5.0 as well as being able to read the older MATLAB 4.2 cannam@125: format. cannam@125:
cannam@125:cannam@125: From version 1.0.1 of libsndfile onwards, libsndfile has the ability of reading cannam@125: and writing a small subset of the binary data files used by both versions cannam@125: of GNU Octave. cannam@125: This gives people using GNU Octave for audio based work an easy method of cannam@125: moving audio data between GNU Octave and other programs which use libsndfile. cannam@125:
cannam@125:cannam@125: For instance it is now possible to do the following: cannam@125:
cannam@125: cannam@125:cannam@125: Another example would be using the MAT4 or MAT5 file formats as a format which cannam@125: can be easily loaded into Octave for viewing/analyzing as well as a format cannam@125: which can be played with command line players such as the one included with cannam@125: libsndfile. cannam@125:
cannam@125: cannam@125:cannam@125: Octave, like most programming languages, uses variables to store data, and cannam@125: Octave variables can contain both arrays and matrices. cannam@125: It is also able to store one or more of these variables in a file. cannam@125: When reading Octave files, libsndfile expects a file to contain two cannam@125: variables and their associated data. cannam@125: The first variable should contain a variable holding the file sample rate cannam@125: while the second variable contains the audio data. cannam@125:
cannam@125:cannam@125: For example, to generate a sine wave and store it as a binary file which cannam@125: is compatible with libsndfile, do the following: cannam@125:
cannam@125:cannam@125: octave:1 > samplerate = 44100 ; cannam@125: octave:2 > wavedata = sin ((0:1023)*2*pi/1024) ; cannam@125: octave:3 > save sine.mat samplerate wavedata cannam@125:cannam@125: cannam@125:
cannam@125: The process of reading and writing files compatible with libsndfile can be cannam@125: made easier by use of two Octave script files : cannam@125:
cannam@125:cannam@125: octave:4 > [data fs] = sndfile_load ("sine.mat") ; cannam@125: octave:5 > sndfile_save ("sine2.mat", data, fs) ; cannam@125:cannam@125:
cannam@125: In addition, libsndfile contains a command line program which which is able cannam@125: to play the correct types of Octave files. cannam@125: Using this command line player sndfile-play and a third Octave script cannam@125: file allows Octave data to be played from within Octave on any of the platforms cannam@125: which sndfile-play supports (at the moment: Linux, MacOS X, Solaris and cannam@125: Win32). cannam@125:
cannam@125:cannam@125: octave:6 > sndfile_play (data, fs) ; cannam@125:cannam@125:
cannam@125: These three Octave scripts are installed automatically in Octave's site cannam@125: script directory when libsndfile is installed (except on Win32) ie when cannam@125: libsndfile is being installed into /usr/local, the Octave scripts will cannam@125: be installed in /usr/local/share/octave/site/m/. cannam@125:
cannam@125: cannam@125:cannam@125: There are some other Octave scripts for audio to be found cannam@125: here. cannam@125:
cannam@125: cannam@125:cannam@125: The libsndfile home page is here : cannam@125: cannam@125: http://www.mega-nerd.com/libsndfile/. cannam@125:
cannam@125: cannam@125: cannam@125: