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