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