X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/992d59159547267e1491fcd1c5123765b4c452b8..63cf293f572ae7d5c1c83b9dffb31e7d774f8854:/interpretor/lib/src/libsndfile-ocaml/sndfile.ml diff --git a/interpretor/lib/src/libsndfile-ocaml/sndfile.ml b/interpretor/lib/src/libsndfile-ocaml/sndfile.ml new file mode 100644 index 0000000..065dac9 --- /dev/null +++ b/interpretor/lib/src/libsndfile-ocaml/sndfile.ml @@ -0,0 +1,138 @@ +(* +** 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 +*) + +type open_mode_t = + | READ + | WRITE + | RDWR + +type seek_mode_t = + | SEEK_SET + | SEEK_CUR + | SEEL_END + +type major_format_t = + | MAJOR_NONE + | MAJOR_WAV + | MAJOR_AIFF + | MAJOR_AU + | MAJOR_RAW + | MAJOR_PAF + | MAJOR_SVX + | MAJOR_NIST + | MAJOR_VOC + | MAJOR_IRCAM + | MAJOR_W64 + | MAJOR_MAT4 + | MAJOR_MAT5 + | MAJOR_PVF + | MAJOR_XI + | MAJOR_HTK + | MAJOR_SDS + | MAJOR_AVR + | MAJOR_WAVEX + | MAJOR_SD2 + | MAJOR_FLAC + | MAJOR_CAF + +type minor_format_t = + | MINOR_NONE + | MINOR_PCM_S8 + | MINOR_PCM_16 + | MINOR_PCM_24 + | MINOR_PCM_32 + | MINOR_PCM_U8 + | MINOR_FLOAT + | MINOR_DOUBLE + | MINOR_ULAW + | MINOR_ALAW + | MINOR_IMA_ADPCM + | MINOR_MS_ADPCM + | MINOR_GSM610 + | MINOR_VOX_ADPCM + | MINOR_G721_32 + | MINOR_G723_24 + | MINOR_G723_40 + | MINOR_DWVW_12 + | MINOR_DWVW_16 + | MINOR_DWVW_24 + | MINOR_DWVW_N + | MINOR_DPCM_8 + | MINOR_DPCM_16 + +type endianness_t = + | ENDIAN_FILE + | ENDIAN_LITTLE + | ENDIAN_BIG + | ENDIAN_CPU + + +type file_format_t + +type error = + | No_error + | Unrecognised_format + | System + | Malformed_file + | Unsupported_encoding + | Internal + +exception Error of (error * string) + +type t + +external format_e : major_format_t -> minor_format_t -> endianness_t -> file_format_t = "caml_sf_format_e" + +let format major minor = + format_e major minor ENDIAN_FILE + +external open_private : + string -> (* filename *) + open_mode_t -> + file_format_t -> + int -> (* channels *) + int -> (* samplerate *) + t = "caml_sf_open_private" + +let bad_format = format MAJOR_NONE MINOR_NONE + +let openfile ?(info = (READ, bad_format, 0, 0)) filename = + let (mode, fmt, channels, samplerate) = info in + open_private filename mode fmt channels samplerate + +external close : t -> unit = "caml_sf_close" + +external read : t -> float array -> int = "caml_sf_read" +external write : t -> float array -> int = "caml_sf_write" + + +external frames : t -> Int64.t = "caml_sf_frames" + +external samplerate : t -> int = "caml_sf_samplerate" + +external channels : t -> int = "caml_sf_channels" + +external seek : t -> Int64.t -> seek_mode_t -> Int64.t = "caml_sf_seek" + +external compare : t -> t -> int = "caml_sf_compare" + +let _ = + Callback.register_exception "sndfile_open_exn" (Error (No_error, "No error."))