X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/63cf293f572ae7d5c1c83b9dffb31e7d774f8854..4c9486f4df577e7227a45855745cbd8350cf4097:/interpretor/lib/src/libsndfile-ocaml/sndfile.mli diff --git a/interpretor/lib/src/libsndfile-ocaml/sndfile.mli b/interpretor/lib/src/libsndfile-ocaml/sndfile.mli new file mode 100644 index 0000000..d383fca --- /dev/null +++ b/interpretor/lib/src/libsndfile-ocaml/sndfile.mli @@ -0,0 +1,209 @@ +(* +** File: sndfile.ml +** +** Copyright (c) 2006, 2007 Erik de Castro Lopo +** WWW: http://www.mega-nerd.com/libsndfile/Ocaml/ +** +** This library is free software; you can redistribute it and/or +** modify it under the terms of the GNU Lesser General Public +** License as published by the Free Software Foundation; either +** version 2 of the License, or (at your option) any later version. +** +** This library is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser General Public +** License along with this library; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +(** libsndfile interface for OCaml. + + libsndfile (http://www.mega-nerd.com/libsndfile) is a library for reading + and writing a huge number of different audio file formats. + + Typical (simple) usage for small files: + +{[ + let file = Sndfile.openfile filename in + let frames = Int64.to_int (Sndfile.frames file) in + let data = Array.create frames 0.0 in + let readcount = Sndfile.read file data in + ..... +]} + +*) + +type open_mode_t = + | READ (** Open file for read. *) + | WRITE (** Open file for write. *) + | RDWR (** Open file for read/write. *) + +type seek_mode_t = + | SEEK_SET (** Seek relative to start of file. *) + | SEEK_CUR (** Seek relative to current position. *) + | SEEL_END (** Seek relative to end of file. *) + +type major_format_t = + | MAJOR_NONE + | MAJOR_WAV (** Microsoft WAV format (little endian default). *) + | MAJOR_AIFF (** Apple/SGI AIFF format (big endian). *) + | MAJOR_AU (** Sun/NeXT AU format (big endian). *) + | MAJOR_RAW (** RAW PCM data. *) + | MAJOR_PAF (** Ensoniq PARIS file format. *) + | MAJOR_SVX (** Amiga IFF / SVX8 / SV16 format. *) + | MAJOR_NIST (** Sphere NIST format. *) + | MAJOR_VOC (** VOC files. *) + | MAJOR_IRCAM (** Berkeley/IRCAM/CARL *) + | MAJOR_W64 (** Sonic Foundry's 64 bit RIFF/WAV *) + | MAJOR_MAT4 (** Matlab (tm) V4.2 / GNU Octave 2.0 *) + | MAJOR_MAT5 (** Matlab (tm) V5.0 / GNU Octave 2.1 *) + | MAJOR_PVF (** Portable Voice Format *) + | MAJOR_XI (** Fasttracker 2 Extended Instrument *) + | MAJOR_HTK (** HMM Tool Kit format *) + | MAJOR_SDS (** Midi Sample Dump Standard *) + | MAJOR_AVR (** Audio Visual Research *) + | MAJOR_WAVEX (** MS WAVE with WAVEFORMATEX *) + | MAJOR_SD2 (** Sound Designer 2 *) + | MAJOR_FLAC (** FLAC lossless file format *) + | MAJOR_CAF (** Core Audio File format *) + +type minor_format_t = + | MINOR_NONE + | MINOR_PCM_S8 (** Signed 8 bit data *) + | MINOR_PCM_16 (** Signed 16 bit data *) + | MINOR_PCM_24 (** Signed 24 bit data *) + | MINOR_PCM_32 (** Signed 32 bit data *) + | MINOR_PCM_U8 (** Unsigned 8 bit data (WAV and RAW only) *) + | MINOR_FLOAT (** 32 bit float data *) + | MINOR_DOUBLE (** 64 bit float data *) + | MINOR_ULAW (** U-Law encoded. *) + | MINOR_ALAW (** A-Law encoded. *) + | MINOR_IMA_ADPCM (** IMA ADPCM. *) + | MINOR_MS_ADPCM (** Microsoft ADPCM. *) + | MINOR_GSM610 (** GSM 6.10 encoding. *) + | MINOR_VOX_ADPCM (** OKI / Dialogix ADPCM *) + | MINOR_G721_32 (** 32kbs G721 ADPCM encoding. *) + | MINOR_G723_24 (** 24kbs G723 ADPCM encoding. *) + | MINOR_G723_40 (** 40kbs G723 ADPCM encoding. *) + | MINOR_DWVW_12 (** 12 bit Delta Width Variable Word encoding. *) + | MINOR_DWVW_16 (** 16 bit Delta Width Variable Word encoding. *) + | MINOR_DWVW_24 (** 24 bit Delta Width Variable Word encoding. *) + | MINOR_DWVW_N (** N bit Delta Width Variable Word encoding. *) + | MINOR_DPCM_8 (** 8 bit differential PCM (XI only) *) + | MINOR_DPCM_16 (** 16 bit differential PCM (XI only) *) + + +type endianness_t = + | ENDIAN_FILE (** Default endianness for file format. *) + | ENDIAN_LITTLE (** Force little endian format. *) + | ENDIAN_BIG (** Force Big endian format. *) + | ENDIAN_CPU (** Use same endianness as host CPU. *) + + +type file_format_t +(** + An opaque type representing a sound file file format. + + It is constructed using either format or format_e. +*) + +type error = + | No_error + | Unrecognised_format + | System + | Malformed_file + | Unsupported_encoding + | Internal + +exception Error of (error * string) + +type t +(** + [Sndfile.t] An opaque type representing a open sound file. +*) + +val format : major_format_t -> minor_format_t -> file_format_t +(** + [Sndfile.format ma mi] constructs a file_format_t for use with + sf_open for the supplied major format [ma], minor format [mi]. +*) + +val format_e : major_format_t -> minor_format_t -> endianness_t -> file_format_t +(** + [Sndfile.format ma mi] constructs a file_format_t for use with + sf_open for the supplied major format [ma], minor format [mi] and + endianness [e]. +*) + +val openfile : + ?info : (open_mode_t * file_format_t * int * int) -> + string -> + t +(** + [Sndfile.openfile fn] opens the file specified by the filename [fn] for + read. + + [Sndfile.openfile (SFM_WRITE, fmt, ch, sr) fn] opens the file specified + by the filename [fn] for write with the specified file_format_t, channel + count and samplerate. + + [Sndfile.openfile (SFM_RDWR, fmt, ch, sr) fn] opens the file specified + by the filename [fn] for read/write with the sepcified file_format_t, + channel count and samplerate. +*) + +val close : t -> unit +(** + [Sndfile.close f] closes the file [f]. + + Attempting to read from or write to a file after it has been closed will + fail. +*) + +val read : t -> float array -> int +(** + [Sndfile.read f a] read data from the file [f] into the supplied array + [a] and return the number of float values read. + + For multi-channel files, the array length must be an integer multiple of + the number of channels. +*) + +val write : t -> float array -> int +(** + [Sndfile.write f a] write data from the supplied array [a] to the file + [f] and return the number of float values written. + + For multi-channel files, the array length must be an integer multiple of + the number of channels. +*) + +val frames : t -> Int64.t +(** + [Sndfile.frames f] returns the number of frames in the file [f]. +*) + +val samplerate : t -> int +(** + [Sndfile.samplerate f] returns the sample rate of the file [f]. +*) + +val channels : t -> int +(** + [Sndfile.channels f] returns the channel count for the file [f]. +*) + +val seek : t -> Int64.t -> seek_mode_t -> Int64.t +(** + [Sndfile.seek f pos m] seeks to posiont [pos] of file [f] using + the specified seek mode [m]. Returns offset from start of file. +*) + +val compare : t -> t -> int +(** + The comparison function for Sndfile.t, with the same specification as + [Pervasives.compare]. +*)