cannam@85
|
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
cannam@85
|
2 <HTML>
|
cannam@85
|
3
|
cannam@85
|
4 <HEAD>
|
cannam@85
|
5 <TITLE>
|
cannam@85
|
6 libsndfile and GNU Octave
|
cannam@85
|
7 </TITLE>
|
cannam@85
|
8 <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
|
cannam@85
|
9 <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
|
cannam@85
|
10 <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
|
cannam@85
|
11 </HEAD>
|
cannam@85
|
12
|
cannam@85
|
13 <BODY>
|
cannam@85
|
14
|
cannam@85
|
15 <BR>
|
cannam@85
|
16 <H1><B>libsndfile and GNU Octave</B></H1>
|
cannam@85
|
17 <P>
|
cannam@85
|
18 <A HREF="http://www.octave.org/">GNU Octave</A> is a high-level interactive
|
cannam@85
|
19 language for numerical computations.
|
cannam@85
|
20 There are currently two development streams, a stable 2.0.X series and a
|
cannam@85
|
21 development 2.1.X series.
|
cannam@85
|
22 Octave reads and writes data in binary formats that were originally developed
|
cannam@85
|
23 for
|
cannam@85
|
24 <A HREF="http://www.mathworks.com/">MATLAB</A>.
|
cannam@85
|
25 Version 2.0.X of Octave uses binary data files compatible with MATLAB
|
cannam@85
|
26 version 4.2 while Octave 2.1.X uses binary data files compatible
|
cannam@85
|
27 with MATLAB version 5.0 as well as being able to read the older MATLAB 4.2
|
cannam@85
|
28 format.
|
cannam@85
|
29 </P>
|
cannam@85
|
30 <P>
|
cannam@85
|
31 From version 1.0.1 of libsndfile onwards, libsndfile has the ability of reading
|
cannam@85
|
32 and writing a small subset of the binary data files used by both versions
|
cannam@85
|
33 of GNU Octave.
|
cannam@85
|
34 This gives people using GNU Octave for audio based work an easy method of
|
cannam@85
|
35 moving audio data between GNU Octave and other programs which use libsndfile.
|
cannam@85
|
36 </P>
|
cannam@85
|
37 <P>
|
cannam@85
|
38 For instance it is now possible to do the following:
|
cannam@85
|
39 </P>
|
cannam@85
|
40
|
cannam@85
|
41 <UL>
|
cannam@85
|
42 <LI> Load a WAV file into a sound file editor such as
|
cannam@85
|
43 <A HREF="http://www.metadecks.org/software/sweep/">Sweep</A>.
|
cannam@85
|
44 <LI> Save it as a MAT4 file.
|
cannam@85
|
45 <LI> Load the data into Octave for manipulation.
|
cannam@85
|
46 <LI> Save the modified data.
|
cannam@85
|
47 <LI> Reload it in Sweep.
|
cannam@85
|
48 </UL>
|
cannam@85
|
49 <P>
|
cannam@85
|
50 Another example would be using the MAT4 or MAT5 file formats as a format which
|
cannam@85
|
51 can be easily loaded into Octave for viewing/analyzing as well as a format
|
cannam@85
|
52 which can be played with command line players such as the one included with
|
cannam@85
|
53 libsndfile.
|
cannam@85
|
54 </P>
|
cannam@85
|
55
|
cannam@85
|
56 <H2><B>Details</B></H2>
|
cannam@85
|
57 <P>
|
cannam@85
|
58 Octave, like most programming languages, uses variables to store data, and
|
cannam@85
|
59 Octave variables can contain both arrays and matrices.
|
cannam@85
|
60 It is also able to store one or more of these variables in a file.
|
cannam@85
|
61 When reading Octave files, libsndfile expects a file to contain two
|
cannam@85
|
62 variables and their associated data.
|
cannam@85
|
63 The first variable should contain a variable holding the file sample rate
|
cannam@85
|
64 while the second variable contains the audio data.
|
cannam@85
|
65 </P>
|
cannam@85
|
66 <P>
|
cannam@85
|
67 For example, to generate a sine wave and store it as a binary file which
|
cannam@85
|
68 is compatible with libsndfile, do the following:
|
cannam@85
|
69 </P>
|
cannam@85
|
70 <PRE>
|
cannam@85
|
71 octave:1 > samplerate = 44100 ;
|
cannam@85
|
72 octave:2 > wavedata = sin ((0:1023)*2*pi/1024) ;
|
cannam@85
|
73 octave:3 > save sine.mat samplerate wavedata
|
cannam@85
|
74 </PRE>
|
cannam@85
|
75
|
cannam@85
|
76 <P>
|
cannam@85
|
77 The process of reading and writing files compatible with libsndfile can be
|
cannam@85
|
78 made easier by use of two Octave script files :
|
cannam@85
|
79 </P>
|
cannam@85
|
80 <PRE>
|
cannam@85
|
81 octave:4 > [data fs] = sndfile_load ("sine.mat") ;
|
cannam@85
|
82 octave:5 > sndfile_save ("sine2.mat", data, fs) ;
|
cannam@85
|
83 </PRE>
|
cannam@85
|
84 <P>
|
cannam@85
|
85 In addition, libsndfile contains a command line program which which is able
|
cannam@85
|
86 to play the correct types of Octave files.
|
cannam@85
|
87 Using this command line player <B>sndfile-play</B> and a third Octave script
|
cannam@85
|
88 file allows Octave data to be played from within Octave on any of the platforms
|
cannam@85
|
89 which <B>sndfile-play</B> supports (at the moment: Linux, MacOS X, Solaris and
|
cannam@85
|
90 Win32).
|
cannam@85
|
91 </P>
|
cannam@85
|
92 <PRE>
|
cannam@85
|
93 octave:6 > sndfile_play (data, fs) ;
|
cannam@85
|
94 </PRE>
|
cannam@85
|
95 <P>
|
cannam@85
|
96 These three Octave scripts are installed automatically in Octave's site
|
cannam@85
|
97 script directory when libsndfile is installed (except on Win32) ie when
|
cannam@85
|
98 libsndfile is being installed into /usr/local, the Octave scripts will
|
cannam@85
|
99 be installed in /usr/local/share/octave/site/m/.
|
cannam@85
|
100 </P>
|
cannam@85
|
101
|
cannam@85
|
102 <P>
|
cannam@85
|
103 There are some other Octave scripts for audio to be found
|
cannam@85
|
104 <A HREF="http://octave.sourceforge.net/index/audio.html">here</A>.
|
cannam@85
|
105 </P>
|
cannam@85
|
106
|
cannam@85
|
107 <BR>
|
cannam@85
|
108 <!-- ========================================================================= -->
|
cannam@85
|
109
|
cannam@85
|
110 <HR>
|
cannam@85
|
111 <P>
|
cannam@85
|
112 The libsndfile home page is here :
|
cannam@85
|
113 <A HREF="http://www.mega-nerd.com/libsndfile/">
|
cannam@85
|
114 http://www.mega-nerd.com/libsndfile/</A>.
|
cannam@85
|
115 </P>
|
cannam@85
|
116
|
cannam@85
|
117 </BODY>
|
cannam@85
|
118 </HTML>
|