• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1---
2layout: page
3---
4
5# libsndfile and GNU Octave
6
7[GNU Octave](http://www.octave.org/) is a high-level interactive language for
8numerical computations. There are currently two development streams, a stable
92.0.X series and a development 2.1.X series. Octave reads and writes data in
10binary formats that were originally developed for
11[MATLAB](http://www.mathworks.com/). Version 2.0.X of Octave uses binary data
12files compatible with MATLAB version 4.2 while Octave 2.1.X uses binary data
13files compatible with MATLAB version 5.0 as well as being able to read the older
14MATLAB 4.2 format.
15
16From version 1.0.1 of libsndfile onwards, libsndfile has the ability of reading
17and writing a small subset of the binary data files used by both versions of GNU
18Octave. This gives people using GNU Octave for audio based work an easy method
19of moving audio data between GNU Octave and other programs which use libsndfile.
20
21For instance it is now possible to do the following:
22
23* Load a WAV file into a sound file editor such as
24  [Sweep](http://www.metadecks.org/software/sweep/).
25* Save it as a MAT4 file.
26* Load the data into Octave for manipulation.
27* Save the modified data.
28* Reload it in Sweep.
29
30Another example would be using the MAT4 or MAT5 file formats as a format which
31can be easily loaded into Octave for viewing/analyzing as well as a format which
32can be played with command line players such as the one included with
33libsndfile.
34
35## Details
36
37Octave, like most programming languages, uses variables to store data, and
38Octave variables can contain both arrays and matrices. It is also able to store
39one or more of these variables in a file. When reading Octave files, libsndfile
40expects a file to contain two variables and their associated data. The first
41variable should contain a variable holding the file sample rate while the second
42variable contains the audio data.
43
44For example, to generate a sine wave and store it as a binary file which is
45compatible with libsndfile, do the following:
46
47    octave:1 > samplerate = 44100 ;
48    octave:2 > wavedata = sin ((0:1023)*2*pi/1024) ;
49    octave:3 > save sine.mat samplerate wavedata
50
51The process of reading and writing files compatible with libsndfile can be made
52easier by use of two Octave script files:
53
54    octave:4 > [data fs] = sndfile_load ("sine.mat") ;
55    octave:5 > sndfile_save ("sine2.mat", data, fs) ;
56
57In addition, libsndfile contains a command line program which which is able to
58play the correct types of Octave files. Using this command line player
59**sndfile-play** and a third Octave script file allows Octave data to be played
60from within Octave on any of the platforms which **sndfile-play** supports (at
61the moment: Linux, MacOS X, Solaris and Win32).
62
63    octave:6 > sndfile_play (data, fs) ;
64
65These three Octave scripts are installed automatically in Octave's site script
66directory when libsndfile is installed (except on Win32) ie when libsndfile is
67being installed into /usr/local, the Octave scripts will be installed in
68/usr/local/share/octave/site/m/.
69
70There are some other Octave scripts for audio to be found
71[here](http://octave.sourceforge.net/audio/index.html).
72