1207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten/* 2207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * Copyright (C) 2012 The Android Open Source Project 3207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * 4207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * you may not use this file except in compliance with the License. 6207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * You may obtain a copy of the License at 7207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * 8207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * 10207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * See the License for the specific language governing permissions and 14207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten * limitations under the License. 15207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten */ 16207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 17207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#ifndef __AUDIO_UTIL_SNDFILE_H 18207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#define __AUDIO_UTIL_SNDFILE_H 19207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 20207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// This is a C library for reading and writing PCM .wav files. It is 21207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// influenced by other libraries such as libsndfile and audiofile, except is 22207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// much smaller and has an Apache 2.0 license. 23207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// The API should be familiar to clients of similar libraries, but there is 24207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// no guarantee that it will stay exactly source-code compatible with other libraries. 25207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 26207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#include <stdio.h> 2736c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten#include <sys/cdefs.h> 2836c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten 2936c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten__BEGIN_DECLS 30207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 31207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// visible to clients 3236c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kastentypedef int sf_count_t; 3336c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten 34207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kastentypedef struct { 3536c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten sf_count_t frames; 36207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten int samplerate; 37207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten int channels; 38207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten int format; 39207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten} SF_INFO; 40207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 41207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// opaque to clients 42207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kastentypedef struct SNDFILE_ SNDFILE; 43207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 44207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// Access modes 45eae13ddb9a4fdedf3895a10cdf5c0a4aefe0ff60Glenn Kasten#define SFM_READ 1 46eae13ddb9a4fdedf3895a10cdf5c0a4aefe0ff60Glenn Kasten#define SFM_WRITE 2 47207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 48207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// Format 49207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#define SF_FORMAT_TYPEMASK 1 50207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#define SF_FORMAT_WAV 1 51c0bd7157d2d5967a6b222a5d69b7703612f78a49Glenn Kasten#define SF_FORMAT_SUBMASK 14 52207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#define SF_FORMAT_PCM_16 2 53207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#define SF_FORMAT_PCM_U8 4 54c0bd7157d2d5967a6b222a5d69b7703612f78a49Glenn Kasten#define SF_FORMAT_FLOAT 6 55c0bd7157d2d5967a6b222a5d69b7703612f78a49Glenn Kasten#define SF_FORMAT_PCM_32 8 56207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 57207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// Open stream 58207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn KastenSNDFILE *sf_open(const char *path, int mode, SF_INFO *info); 59207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 60207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// Close stream 61207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kastenvoid sf_close(SNDFILE *handle); 62207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 63207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten// Read interleaved frames and return actual number of frames read 6436c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kastensf_count_t sf_readf_short(SNDFILE *handle, short *ptr, sf_count_t desired); 65c0bd7157d2d5967a6b222a5d69b7703612f78a49Glenn Kastensf_count_t sf_readf_float(SNDFILE *handle, float *ptr, sf_count_t desired); 667b9378104f3709d6c07ed00fe11066860a4e9999Andy Hungsf_count_t sf_readf_int(SNDFILE *handle, int *ptr, sf_count_t desired); 6736c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten 68eae13ddb9a4fdedf3895a10cdf5c0a4aefe0ff60Glenn Kasten// Write interleaved frames and return actual number of frames written 69eae13ddb9a4fdedf3895a10cdf5c0a4aefe0ff60Glenn Kastensf_count_t sf_writef_short(SNDFILE *handle, const short *ptr, sf_count_t desired); 70c0bd7157d2d5967a6b222a5d69b7703612f78a49Glenn Kastensf_count_t sf_writef_float(SNDFILE *handle, const float *ptr, sf_count_t desired); 71eae13ddb9a4fdedf3895a10cdf5c0a4aefe0ff60Glenn Kasten 7236c248b94fd41c0f0bb54106ce8e2b0ad67c40eeGlenn Kasten__END_DECLS 73207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten 74207ec2930dd429e5d4aa58e2b9899e09aa76e22cGlenn Kasten#endif /* __AUDIO_UTIL_SNDFILE_H */ 75