annotate win32-mingw/include/sndfile.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents eab3b14ddc95
children
rev   line source
Chris@6 1 /*
Chris@58 2 ** Copyright (C) 1999-2016 Erik de Castro Lopo <erikd@mega-nerd.com>
Chris@6 3 **
Chris@6 4 ** This program is free software; you can redistribute it and/or modify
Chris@6 5 ** it under the terms of the GNU Lesser General Public License as published by
Chris@6 6 ** the Free Software Foundation; either version 2.1 of the License, or
Chris@6 7 ** (at your option) any later version.
Chris@6 8 **
Chris@6 9 ** This program is distributed in the hope that it will be useful,
Chris@6 10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@6 11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@6 12 ** GNU Lesser General Public License for more details.
Chris@6 13 **
Chris@6 14 ** You should have received a copy of the GNU Lesser General Public License
Chris@6 15 ** along with this program; if not, write to the Free Software
Chris@6 16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Chris@6 17 */
Chris@6 18
Chris@6 19 /*
Chris@6 20 ** sndfile.h -- system-wide definitions
Chris@6 21 **
Chris@6 22 ** API documentation is in the doc/ directory of the source code tarball
Chris@6 23 ** and at http://www.mega-nerd.com/libsndfile/api.html.
Chris@6 24 */
Chris@6 25
Chris@6 26 #ifndef SNDFILE_H
Chris@6 27 #define SNDFILE_H
Chris@6 28
Chris@6 29 /* This is the version 1.0.X header file. */
Chris@6 30 #define SNDFILE_1
Chris@6 31
Chris@6 32 #include <stdio.h>
Chris@58 33 #include <stdint.h>
Chris@6 34 #include <sys/types.h>
Chris@6 35
Chris@6 36 #ifdef __cplusplus
Chris@6 37 extern "C" {
Chris@6 38 #endif /* __cplusplus */
Chris@6 39
Chris@6 40 /* The following file types can be read and written.
Chris@6 41 ** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
Chris@6 42 ** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
Chris@6 43 ** SF_FORMAT_SUBMASK can be used to separate the major and minor file
Chris@6 44 ** types.
Chris@6 45 */
Chris@6 46
Chris@6 47 enum
Chris@6 48 { /* Major formats. */
Chris@6 49 SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */
Chris@6 50 SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */
Chris@6 51 SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */
Chris@6 52 SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */
Chris@6 53 SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */
Chris@6 54 SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */
Chris@6 55 SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */
Chris@6 56 SF_FORMAT_VOC = 0x080000, /* VOC files. */
Chris@6 57 SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */
Chris@6 58 SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */
Chris@6 59 SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */
Chris@6 60 SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */
Chris@6 61 SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */
Chris@6 62 SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */
Chris@6 63 SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */
Chris@6 64 SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */
Chris@6 65 SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */
Chris@6 66 SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */
Chris@6 67 SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */
Chris@6 68 SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */
Chris@6 69 SF_FORMAT_CAF = 0x180000, /* Core Audio File format */
Chris@6 70 SF_FORMAT_WVE = 0x190000, /* Psion WVE format */
Chris@6 71 SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */
Chris@6 72 SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */
Chris@6 73 SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */
Chris@6 74
Chris@6 75 /* Subtypes from here on. */
Chris@6 76
Chris@6 77 SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */
Chris@6 78 SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */
Chris@6 79 SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */
Chris@6 80 SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */
Chris@6 81
Chris@6 82 SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */
Chris@6 83
Chris@6 84 SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */
Chris@6 85 SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */
Chris@6 86
Chris@6 87 SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */
Chris@6 88 SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */
Chris@6 89 SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */
Chris@6 90 SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */
Chris@6 91
Chris@6 92 SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */
Chris@6 93 SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */
Chris@6 94
Chris@6 95 SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */
Chris@6 96 SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */
Chris@6 97 SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */
Chris@6 98
Chris@6 99 SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */
Chris@6 100 SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */
Chris@6 101 SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */
Chris@6 102 SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */
Chris@6 103
Chris@6 104 SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */
Chris@6 105 SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */
Chris@6 106
Chris@6 107 SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */
Chris@6 108
Chris@58 109 SF_FORMAT_ALAC_16 = 0x0070, /* Apple Lossless Audio Codec (16 bit). */
Chris@58 110 SF_FORMAT_ALAC_20 = 0x0071, /* Apple Lossless Audio Codec (20 bit). */
Chris@58 111 SF_FORMAT_ALAC_24 = 0x0072, /* Apple Lossless Audio Codec (24 bit). */
Chris@58 112 SF_FORMAT_ALAC_32 = 0x0073, /* Apple Lossless Audio Codec (32 bit). */
Chris@58 113
Chris@6 114 /* Endian-ness options. */
Chris@6 115
Chris@6 116 SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */
Chris@6 117 SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */
Chris@6 118 SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */
Chris@6 119 SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */
Chris@6 120
Chris@6 121 SF_FORMAT_SUBMASK = 0x0000FFFF,
Chris@6 122 SF_FORMAT_TYPEMASK = 0x0FFF0000,
Chris@6 123 SF_FORMAT_ENDMASK = 0x30000000
Chris@6 124 } ;
Chris@6 125
Chris@6 126 /*
Chris@6 127 ** The following are the valid command numbers for the sf_command()
Chris@6 128 ** interface. The use of these commands is documented in the file
Chris@6 129 ** command.html in the doc directory of the source code distribution.
Chris@6 130 */
Chris@6 131
Chris@6 132 enum
Chris@6 133 { SFC_GET_LIB_VERSION = 0x1000,
Chris@6 134 SFC_GET_LOG_INFO = 0x1001,
Chris@6 135 SFC_GET_CURRENT_SF_INFO = 0x1002,
Chris@6 136
Chris@6 137
Chris@6 138 SFC_GET_NORM_DOUBLE = 0x1010,
Chris@6 139 SFC_GET_NORM_FLOAT = 0x1011,
Chris@6 140 SFC_SET_NORM_DOUBLE = 0x1012,
Chris@6 141 SFC_SET_NORM_FLOAT = 0x1013,
Chris@6 142 SFC_SET_SCALE_FLOAT_INT_READ = 0x1014,
Chris@6 143 SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015,
Chris@6 144
Chris@6 145 SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020,
Chris@6 146 SFC_GET_SIMPLE_FORMAT = 0x1021,
Chris@6 147
Chris@6 148 SFC_GET_FORMAT_INFO = 0x1028,
Chris@6 149
Chris@6 150 SFC_GET_FORMAT_MAJOR_COUNT = 0x1030,
Chris@6 151 SFC_GET_FORMAT_MAJOR = 0x1031,
Chris@6 152 SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032,
Chris@6 153 SFC_GET_FORMAT_SUBTYPE = 0x1033,
Chris@6 154
Chris@6 155 SFC_CALC_SIGNAL_MAX = 0x1040,
Chris@6 156 SFC_CALC_NORM_SIGNAL_MAX = 0x1041,
Chris@6 157 SFC_CALC_MAX_ALL_CHANNELS = 0x1042,
Chris@6 158 SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043,
Chris@6 159 SFC_GET_SIGNAL_MAX = 0x1044,
Chris@6 160 SFC_GET_MAX_ALL_CHANNELS = 0x1045,
Chris@6 161
Chris@6 162 SFC_SET_ADD_PEAK_CHUNK = 0x1050,
Chris@6 163 SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051,
Chris@6 164
Chris@6 165 SFC_UPDATE_HEADER_NOW = 0x1060,
Chris@6 166 SFC_SET_UPDATE_HEADER_AUTO = 0x1061,
Chris@6 167
Chris@6 168 SFC_FILE_TRUNCATE = 0x1080,
Chris@6 169
Chris@6 170 SFC_SET_RAW_START_OFFSET = 0x1090,
Chris@6 171
Chris@6 172 SFC_SET_DITHER_ON_WRITE = 0x10A0,
Chris@6 173 SFC_SET_DITHER_ON_READ = 0x10A1,
Chris@6 174
Chris@6 175 SFC_GET_DITHER_INFO_COUNT = 0x10A2,
Chris@6 176 SFC_GET_DITHER_INFO = 0x10A3,
Chris@6 177
Chris@6 178 SFC_GET_EMBED_FILE_INFO = 0x10B0,
Chris@6 179
Chris@6 180 SFC_SET_CLIPPING = 0x10C0,
Chris@6 181 SFC_GET_CLIPPING = 0x10C1,
Chris@6 182
Chris@58 183 SFC_GET_CUE_COUNT = 0x10CD,
Chris@58 184 SFC_GET_CUE = 0x10CE,
Chris@58 185 SFC_SET_CUE = 0x10CF,
Chris@58 186
Chris@6 187 SFC_GET_INSTRUMENT = 0x10D0,
Chris@6 188 SFC_SET_INSTRUMENT = 0x10D1,
Chris@6 189
Chris@6 190 SFC_GET_LOOP_INFO = 0x10E0,
Chris@6 191
Chris@6 192 SFC_GET_BROADCAST_INFO = 0x10F0,
Chris@6 193 SFC_SET_BROADCAST_INFO = 0x10F1,
Chris@6 194
Chris@6 195 SFC_GET_CHANNEL_MAP_INFO = 0x1100,
Chris@6 196 SFC_SET_CHANNEL_MAP_INFO = 0x1101,
Chris@6 197
Chris@6 198 SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110,
Chris@6 199
Chris@6 200 /* Support for Wavex Ambisonics Format */
Chris@6 201 SFC_WAVEX_SET_AMBISONIC = 0x1200,
Chris@6 202 SFC_WAVEX_GET_AMBISONIC = 0x1201,
Chris@6 203
Chris@58 204 /*
Chris@58 205 ** RF64 files can be set so that on-close, writable files that have less
Chris@58 206 ** than 4GB of data in them are converted to RIFF/WAV, as per EBU
Chris@58 207 ** recommendations.
Chris@58 208 */
Chris@58 209 SFC_RF64_AUTO_DOWNGRADE = 0x1210,
Chris@58 210
Chris@6 211 SFC_SET_VBR_ENCODING_QUALITY = 0x1300,
Chris@58 212 SFC_SET_COMPRESSION_LEVEL = 0x1301,
Chris@58 213
Chris@58 214 /* Cart Chunk support */
Chris@58 215 SFC_SET_CART_INFO = 0x1400,
Chris@58 216 SFC_GET_CART_INFO = 0x1401,
Chris@6 217
Chris@6 218 /* Following commands for testing only. */
Chris@6 219 SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001,
Chris@6 220
Chris@6 221 /*
Chris@6 222 ** SFC_SET_ADD_* values are deprecated and will disappear at some
Chris@6 223 ** time in the future. They are guaranteed to be here up to and
Chris@58 224 ** including version 1.0.8 to avoid breakage of existing software.
Chris@6 225 ** They currently do nothing and will continue to do nothing.
Chris@6 226 */
Chris@6 227 SFC_SET_ADD_DITHER_ON_WRITE = 0x1070,
Chris@6 228 SFC_SET_ADD_DITHER_ON_READ = 0x1071
Chris@6 229 } ;
Chris@6 230
Chris@6 231
Chris@6 232 /*
Chris@6 233 ** String types that can be set and read from files. Not all file types
Chris@6 234 ** support this and even the file types which support one, may not support
Chris@6 235 ** all string types.
Chris@6 236 */
Chris@6 237
Chris@6 238 enum
Chris@6 239 { SF_STR_TITLE = 0x01,
Chris@6 240 SF_STR_COPYRIGHT = 0x02,
Chris@6 241 SF_STR_SOFTWARE = 0x03,
Chris@6 242 SF_STR_ARTIST = 0x04,
Chris@6 243 SF_STR_COMMENT = 0x05,
Chris@6 244 SF_STR_DATE = 0x06,
Chris@6 245 SF_STR_ALBUM = 0x07,
Chris@6 246 SF_STR_LICENSE = 0x08,
Chris@6 247 SF_STR_TRACKNUMBER = 0x09,
Chris@6 248 SF_STR_GENRE = 0x10
Chris@6 249 } ;
Chris@6 250
Chris@6 251 /*
Chris@6 252 ** Use the following as the start and end index when doing metadata
Chris@6 253 ** transcoding.
Chris@6 254 */
Chris@6 255
Chris@6 256 #define SF_STR_FIRST SF_STR_TITLE
Chris@6 257 #define SF_STR_LAST SF_STR_GENRE
Chris@6 258
Chris@6 259 enum
Chris@6 260 { /* True and false */
Chris@6 261 SF_FALSE = 0,
Chris@6 262 SF_TRUE = 1,
Chris@6 263
Chris@6 264 /* Modes for opening files. */
Chris@6 265 SFM_READ = 0x10,
Chris@6 266 SFM_WRITE = 0x20,
Chris@6 267 SFM_RDWR = 0x30,
Chris@6 268
Chris@6 269 SF_AMBISONIC_NONE = 0x40,
Chris@6 270 SF_AMBISONIC_B_FORMAT = 0x41
Chris@6 271 } ;
Chris@6 272
Chris@6 273 /* Public error values. These are guaranteed to remain unchanged for the duration
Chris@6 274 ** of the library major version number.
Chris@6 275 ** There are also a large number of private error numbers which are internal to
Chris@6 276 ** the library which can change at any time.
Chris@6 277 */
Chris@6 278
Chris@6 279 enum
Chris@6 280 { SF_ERR_NO_ERROR = 0,
Chris@6 281 SF_ERR_UNRECOGNISED_FORMAT = 1,
Chris@6 282 SF_ERR_SYSTEM = 2,
Chris@6 283 SF_ERR_MALFORMED_FILE = 3,
Chris@6 284 SF_ERR_UNSUPPORTED_ENCODING = 4
Chris@6 285 } ;
Chris@6 286
Chris@6 287
Chris@6 288 /* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
Chris@6 289 */
Chris@6 290
Chris@6 291 enum
Chris@6 292 { SF_CHANNEL_MAP_INVALID = 0,
Chris@6 293 SF_CHANNEL_MAP_MONO = 1,
Chris@6 294 SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */
Chris@6 295 SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */
Chris@6 296 SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */
Chris@6 297 SF_CHANNEL_MAP_FRONT_LEFT,
Chris@6 298 SF_CHANNEL_MAP_FRONT_RIGHT,
Chris@6 299 SF_CHANNEL_MAP_FRONT_CENTER,
Chris@6 300 SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
Chris@6 301 SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
Chris@6 302 SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
Chris@6 303 SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */
Chris@6 304 SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */
Chris@6 305 SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */
Chris@6 306 SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */
Chris@6 307 SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */
Chris@6 308 SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */
Chris@6 309 SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */
Chris@6 310 SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */
Chris@6 311 SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */
Chris@6 312 SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */
Chris@6 313 SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */
Chris@6 314 SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */
Chris@6 315
Chris@6 316 SF_CHANNEL_MAP_AMBISONIC_B_W,
Chris@6 317 SF_CHANNEL_MAP_AMBISONIC_B_X,
Chris@6 318 SF_CHANNEL_MAP_AMBISONIC_B_Y,
Chris@6 319 SF_CHANNEL_MAP_AMBISONIC_B_Z,
Chris@6 320
Chris@6 321 SF_CHANNEL_MAP_MAX
Chris@6 322 } ;
Chris@6 323
Chris@6 324
Chris@6 325 /* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
Chris@6 326
Chris@6 327 typedef struct SNDFILE_tag SNDFILE ;
Chris@6 328
Chris@6 329 /* The following typedef is system specific and is defined when libsndfile is
Chris@6 330 ** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
Chris@6 331 ** 64 bit file offsets.
Chris@6 332 ** On windows, we need to allow the same header file to be compiler by both GCC
Chris@6 333 ** and the Microsoft compiler.
Chris@6 334 */
Chris@6 335
Chris@6 336 #if (defined (_MSCVER) || defined (_MSC_VER))
Chris@6 337 typedef __int64 sf_count_t ;
Chris@6 338 #define SF_COUNT_MAX 0x7fffffffffffffffi64
Chris@6 339 #else
Chris@58 340 typedef __int64 sf_count_t ;
Chris@58 341 #define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL
Chris@6 342 #endif
Chris@6 343
Chris@6 344
Chris@6 345 /* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
Chris@6 346 ** On write, the SF_INFO structure is filled in by the user and passed into
Chris@6 347 ** sf_open ().
Chris@6 348 */
Chris@6 349
Chris@6 350 struct SF_INFO
Chris@6 351 { sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */
Chris@6 352 int samplerate ;
Chris@6 353 int channels ;
Chris@6 354 int format ;
Chris@6 355 int sections ;
Chris@6 356 int seekable ;
Chris@6 357 } ;
Chris@6 358
Chris@6 359 typedef struct SF_INFO SF_INFO ;
Chris@6 360
Chris@6 361 /* The SF_FORMAT_INFO struct is used to retrieve information about the sound
Chris@6 362 ** file formats libsndfile supports using the sf_command () interface.
Chris@6 363 **
Chris@6 364 ** Using this interface will allow applications to support new file formats
Chris@6 365 ** and encoding types when libsndfile is upgraded, without requiring
Chris@6 366 ** re-compilation of the application.
Chris@6 367 **
Chris@6 368 ** Please consult the libsndfile documentation (particularly the information
Chris@6 369 ** on the sf_command () interface) for examples of its use.
Chris@6 370 */
Chris@6 371
Chris@6 372 typedef struct
Chris@6 373 { int format ;
Chris@6 374 const char *name ;
Chris@6 375 const char *extension ;
Chris@6 376 } SF_FORMAT_INFO ;
Chris@6 377
Chris@6 378 /*
Chris@6 379 ** Enums and typedefs for adding dither on read and write.
Chris@6 380 ** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
Chris@6 381 ** and SFC_SET_DITHER_ON_READ.
Chris@6 382 */
Chris@6 383
Chris@6 384 enum
Chris@6 385 { SFD_DEFAULT_LEVEL = 0,
Chris@6 386 SFD_CUSTOM_LEVEL = 0x40000000,
Chris@6 387
Chris@6 388 SFD_NO_DITHER = 500,
Chris@6 389 SFD_WHITE = 501,
Chris@6 390 SFD_TRIANGULAR_PDF = 502
Chris@6 391 } ;
Chris@6 392
Chris@6 393 typedef struct
Chris@6 394 { int type ;
Chris@6 395 double level ;
Chris@6 396 const char *name ;
Chris@6 397 } SF_DITHER_INFO ;
Chris@6 398
Chris@6 399 /* Struct used to retrieve information about a file embedded within a
Chris@6 400 ** larger file. See SFC_GET_EMBED_FILE_INFO.
Chris@6 401 */
Chris@6 402
Chris@6 403 typedef struct
Chris@6 404 { sf_count_t offset ;
Chris@6 405 sf_count_t length ;
Chris@6 406 } SF_EMBED_FILE_INFO ;
Chris@6 407
Chris@6 408 /*
Chris@58 409 ** Struct used to retrieve cue marker information from a file
Chris@58 410 */
Chris@58 411
Chris@58 412 typedef struct
Chris@58 413 { int32_t indx ;
Chris@58 414 uint32_t position ;
Chris@58 415 int32_t fcc_chunk ;
Chris@58 416 int32_t chunk_start ;
Chris@58 417 int32_t block_start ;
Chris@58 418 uint32_t sample_offset ;
Chris@58 419 char name [256] ;
Chris@58 420 } SF_CUE_POINT ;
Chris@58 421
Chris@58 422 #define SF_CUES_VAR(count) \
Chris@58 423 struct \
Chris@58 424 { uint32_t cue_count ; \
Chris@58 425 SF_CUE_POINT cue_points [count] ; \
Chris@58 426 }
Chris@58 427
Chris@58 428 typedef SF_CUES_VAR (100) SF_CUES ;
Chris@58 429
Chris@58 430 /*
Chris@6 431 ** Structs used to retrieve music sample information from a file.
Chris@6 432 */
Chris@6 433
Chris@6 434 enum
Chris@6 435 { /*
Chris@6 436 ** The loop mode field in SF_INSTRUMENT will be one of the following.
Chris@6 437 */
Chris@6 438 SF_LOOP_NONE = 800,
Chris@6 439 SF_LOOP_FORWARD,
Chris@6 440 SF_LOOP_BACKWARD,
Chris@6 441 SF_LOOP_ALTERNATING
Chris@6 442 } ;
Chris@6 443
Chris@6 444 typedef struct
Chris@6 445 { int gain ;
Chris@6 446 char basenote, detune ;
Chris@6 447 char velocity_lo, velocity_hi ;
Chris@6 448 char key_lo, key_hi ;
Chris@6 449 int loop_count ;
Chris@6 450
Chris@6 451 struct
Chris@6 452 { int mode ;
Chris@58 453 uint32_t start ;
Chris@58 454 uint32_t end ;
Chris@58 455 uint32_t count ;
Chris@6 456 } loops [16] ; /* make variable in a sensible way */
Chris@6 457 } SF_INSTRUMENT ;
Chris@6 458
Chris@6 459
Chris@6 460
Chris@6 461 /* Struct used to retrieve loop information from a file.*/
Chris@6 462 typedef struct
Chris@6 463 {
Chris@6 464 short time_sig_num ; /* any positive integer > 0 */
Chris@6 465 short time_sig_den ; /* any positive power of 2 > 0 */
Chris@6 466 int loop_mode ; /* see SF_LOOP enum */
Chris@6 467
Chris@6 468 int num_beats ; /* this is NOT the amount of quarter notes !!!*/
Chris@6 469 /* a full bar of 4/4 is 4 beats */
Chris@6 470 /* a full bar of 7/8 is 7 beats */
Chris@6 471
Chris@6 472 float bpm ; /* suggestion, as it can be calculated using other fields:*/
Chris@58 473 /* file's length, file's sampleRate and our time_sig_den*/
Chris@6 474 /* -> bpms are always the amount of _quarter notes_ per minute */
Chris@6 475
Chris@6 476 int root_key ; /* MIDI note, or -1 for None */
Chris@6 477 int future [6] ;
Chris@6 478 } SF_LOOP_INFO ;
Chris@6 479
Chris@6 480
Chris@6 481 /* Struct used to retrieve broadcast (EBU) information from a file.
Chris@6 482 ** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
Chris@6 483 */
Chris@6 484 #define SF_BROADCAST_INFO_VAR(coding_hist_size) \
Chris@6 485 struct \
Chris@58 486 { char description [256] ; \
Chris@58 487 char originator [32] ; \
Chris@58 488 char originator_reference [32] ; \
Chris@58 489 char origination_date [10] ; \
Chris@58 490 char origination_time [8] ; \
Chris@58 491 uint32_t time_reference_low ; \
Chris@58 492 uint32_t time_reference_high ; \
Chris@58 493 short version ; \
Chris@58 494 char umid [64] ; \
Chris@58 495 char reserved [190] ; \
Chris@58 496 uint32_t coding_history_size ; \
Chris@58 497 char coding_history [coding_hist_size] ; \
Chris@6 498 }
Chris@6 499
Chris@6 500 /* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
Chris@6 501 typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
Chris@6 502
Chris@58 503 struct SF_CART_TIMER
Chris@58 504 { char usage [4] ;
Chris@58 505 int32_t value ;
Chris@58 506 } ;
Chris@58 507
Chris@58 508 typedef struct SF_CART_TIMER SF_CART_TIMER ;
Chris@58 509
Chris@58 510 #define SF_CART_INFO_VAR(p_tag_text_size) \
Chris@58 511 struct \
Chris@58 512 { char version [4] ; \
Chris@58 513 char title [64] ; \
Chris@58 514 char artist [64] ; \
Chris@58 515 char cut_id [64] ; \
Chris@58 516 char client_id [64] ; \
Chris@58 517 char category [64] ; \
Chris@58 518 char classification [64] ; \
Chris@58 519 char out_cue [64] ; \
Chris@58 520 char start_date [10] ; \
Chris@58 521 char start_time [8] ; \
Chris@58 522 char end_date [10] ; \
Chris@58 523 char end_time [8] ; \
Chris@58 524 char producer_app_id [64] ; \
Chris@58 525 char producer_app_version [64] ; \
Chris@58 526 char user_def [64] ; \
Chris@58 527 int32_t level_reference ; \
Chris@58 528 SF_CART_TIMER post_timers [8] ; \
Chris@58 529 char reserved [276] ; \
Chris@58 530 char url [1024] ; \
Chris@58 531 uint32_t tag_text_size ; \
Chris@58 532 char tag_text [p_tag_text_size] ; \
Chris@58 533 }
Chris@58 534
Chris@58 535 typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
Chris@6 536
Chris@6 537 /* Virtual I/O functionality. */
Chris@6 538
Chris@6 539 typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ;
Chris@6 540 typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ;
Chris@6 541 typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ;
Chris@6 542 typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ;
Chris@6 543 typedef sf_count_t (*sf_vio_tell) (void *user_data) ;
Chris@6 544
Chris@6 545 struct SF_VIRTUAL_IO
Chris@6 546 { sf_vio_get_filelen get_filelen ;
Chris@6 547 sf_vio_seek seek ;
Chris@6 548 sf_vio_read read ;
Chris@6 549 sf_vio_write write ;
Chris@6 550 sf_vio_tell tell ;
Chris@6 551 } ;
Chris@6 552
Chris@6 553 typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
Chris@6 554
Chris@6 555
Chris@6 556 /* Open the specified file for read, write or both. On error, this will
Chris@6 557 ** return a NULL pointer. To find the error number, pass a NULL SNDFILE
Chris@6 558 ** to sf_strerror ().
Chris@6 559 ** All calls to sf_open() should be matched with a call to sf_close().
Chris@6 560 */
Chris@6 561
Chris@6 562 SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ;
Chris@6 563
Chris@6 564
Chris@6 565 /* Use the existing file descriptor to create a SNDFILE object. If close_desc
Chris@6 566 ** is TRUE, the file descriptor will be closed when sf_close() is called. If
Chris@58 567 ** it is FALSE, the descriptor will not be closed.
Chris@6 568 ** When passed a descriptor like this, the library will assume that the start
Chris@6 569 ** of file header is at the current file offset. This allows sound files within
Chris@6 570 ** larger container files to be read and/or written.
Chris@6 571 ** On error, this will return a NULL pointer. To find the error number, pass a
Chris@6 572 ** NULL SNDFILE to sf_strerror ().
Chris@6 573 ** All calls to sf_open_fd() should be matched with a call to sf_close().
Chris@6 574
Chris@6 575 */
Chris@6 576
Chris@6 577 SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
Chris@6 578
Chris@6 579 SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
Chris@6 580
Chris@6 581
Chris@6 582 /* sf_error () returns a error number which can be translated to a text
Chris@6 583 ** string using sf_error_number().
Chris@6 584 */
Chris@6 585
Chris@6 586 int sf_error (SNDFILE *sndfile) ;
Chris@6 587
Chris@6 588
Chris@6 589 /* sf_strerror () returns to the caller a pointer to the current error message for
Chris@6 590 ** the given SNDFILE.
Chris@6 591 */
Chris@6 592
Chris@6 593 const char* sf_strerror (SNDFILE *sndfile) ;
Chris@6 594
Chris@6 595
Chris@6 596 /* sf_error_number () allows the retrieval of the error string for each internal
Chris@6 597 ** error number.
Chris@6 598 **
Chris@6 599 */
Chris@6 600
Chris@6 601 const char* sf_error_number (int errnum) ;
Chris@6 602
Chris@6 603
Chris@6 604 /* The following two error functions are deprecated but they will remain in the
Chris@58 605 ** library for the foreseeable future. The function sf_strerror() should be used
Chris@6 606 ** in their place.
Chris@6 607 */
Chris@6 608
Chris@6 609 int sf_perror (SNDFILE *sndfile) ;
Chris@6 610 int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ;
Chris@6 611
Chris@6 612
Chris@6 613 /* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
Chris@6 614
Chris@6 615 int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ;
Chris@6 616
Chris@6 617
Chris@6 618 /* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
Chris@6 619
Chris@6 620 int sf_format_check (const SF_INFO *info) ;
Chris@6 621
Chris@6 622
Chris@6 623 /* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
Chris@6 624 ** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
Chris@6 625 ** stdio.h function fseek ().
Chris@6 626 ** An offset of zero with whence set to SEEK_SET will position the
Chris@6 627 ** read / write pointer to the first data sample.
Chris@6 628 ** On success sf_seek returns the current position in (multi-channel)
Chris@6 629 ** samples from the start of the file.
Chris@6 630 ** Please see the libsndfile documentation for moving the read pointer
Chris@6 631 ** separately from the write pointer on files open in mode SFM_RDWR.
Chris@6 632 ** On error all of these functions return -1.
Chris@6 633 */
Chris@6 634
Chris@58 635 enum
Chris@58 636 { SF_SEEK_SET = SEEK_SET,
Chris@58 637 SF_SEEK_CUR = SEEK_CUR,
Chris@58 638 SF_SEEK_END = SEEK_END
Chris@58 639 } ;
Chris@58 640
Chris@6 641 sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ;
Chris@6 642
Chris@6 643
Chris@6 644 /* Functions for retrieving and setting string data within sound files.
Chris@6 645 ** Not all file types support this features; AIFF and WAV do. For both
Chris@6 646 ** functions, the str_type parameter must be one of the SF_STR_* values
Chris@6 647 ** defined above.
Chris@6 648 ** On error, sf_set_string() returns non-zero while sf_get_string()
Chris@6 649 ** returns NULL.
Chris@6 650 */
Chris@6 651
Chris@6 652 int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
Chris@6 653
Chris@6 654 const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
Chris@6 655
Chris@6 656
Chris@6 657 /* Return the library version string. */
Chris@6 658
Chris@6 659 const char * sf_version_string (void) ;
Chris@6 660
Chris@58 661 /* Return the current byterate at this point in the file. The byte rate in this
Chris@58 662 ** case is the number of bytes per second of audio data. For instance, for a
Chris@58 663 ** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
Chris@58 664 ** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
Chris@58 665 ** For some file formats the returned value will be accurate and exact, for some
Chris@58 666 ** it will be a close approximation, for some it will be the average bitrate for
Chris@58 667 ** the whole file and for some it will be a time varying value that was accurate
Chris@58 668 ** when the file was most recently read or written.
Chris@58 669 ** To get the bitrate, multiple this value by 8.
Chris@58 670 ** Returns -1 for unknown.
Chris@58 671 */
Chris@58 672 int sf_current_byterate (SNDFILE *sndfile) ;
Chris@6 673
Chris@6 674 /* Functions for reading/writing the waveform data of a sound file.
Chris@6 675 */
Chris@6 676
Chris@6 677 sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
Chris@6 678 sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
Chris@6 679
Chris@6 680
Chris@6 681 /* Functions for reading and writing the data chunk in terms of frames.
Chris@6 682 ** The number of items actually read/written = frames * number of channels.
Chris@6 683 ** sf_xxxx_raw read/writes the raw data bytes from/to the file
Chris@6 684 ** sf_xxxx_short passes data in the native short format
Chris@6 685 ** sf_xxxx_int passes data in the native int format
Chris@6 686 ** sf_xxxx_float passes data in the native float format
Chris@6 687 ** sf_xxxx_double passes data in the native double format
Chris@6 688 ** All of these read/write function return number of frames read/written.
Chris@6 689 */
Chris@6 690
Chris@6 691 sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
Chris@6 692 sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
Chris@6 693
Chris@6 694 sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
Chris@6 695 sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
Chris@6 696
Chris@6 697 sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
Chris@6 698 sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
Chris@6 699
Chris@6 700 sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
Chris@6 701 sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
Chris@6 702
Chris@6 703
Chris@6 704 /* Functions for reading and writing the data chunk in terms of items.
Chris@6 705 ** Otherwise similar to above.
Chris@6 706 ** All of these read/write function return number of items read/written.
Chris@6 707 */
Chris@6 708
Chris@6 709 sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
Chris@6 710 sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
Chris@6 711
Chris@6 712 sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
Chris@6 713 sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
Chris@6 714
Chris@6 715 sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
Chris@6 716 sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
Chris@6 717
Chris@6 718 sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
Chris@6 719 sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
Chris@6 720
Chris@6 721
Chris@6 722 /* Close the SNDFILE and clean up all memory allocations associated with this
Chris@6 723 ** file.
Chris@6 724 ** Returns 0 on success, or an error number.
Chris@6 725 */
Chris@6 726
Chris@6 727 int sf_close (SNDFILE *sndfile) ;
Chris@6 728
Chris@6 729
Chris@6 730 /* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
Chris@6 731 ** to force the writing of data to disk. If the file is opened SFM_READ
Chris@6 732 ** no action is taken.
Chris@6 733 */
Chris@6 734
Chris@6 735 void sf_write_sync (SNDFILE *sndfile) ;
Chris@6 736
Chris@6 737
Chris@6 738
Chris@6 739 /* The function sf_wchar_open() is Windows Only!
Chris@6 740 ** Open a file passing in a Windows Unicode filename. Otherwise, this is
Chris@6 741 ** the same as sf_open().
Chris@6 742 **
Chris@6 743 ** In order for this to work, you need to do the following:
Chris@6 744 **
Chris@6 745 ** #include <windows.h>
Chris@6 746 ** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
Chris@6 747 ** #including <sndfile.h>
Chris@6 748 */
Chris@6 749
Chris@6 750 #if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
Chris@6 751 SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
Chris@6 752 #endif
Chris@6 753
Chris@6 754
Chris@6 755
Chris@58 756
Chris@58 757 /* Getting and setting of chunks from within a sound file.
Chris@58 758 **
Chris@58 759 ** These functions allow the getting and setting of chunks within a sound file
Chris@58 760 ** (for those formats which allow it).
Chris@58 761 **
Chris@58 762 ** These functions fail safely. Specifically, they will not allow you to overwrite
Chris@58 763 ** existing chunks or add extra versions of format specific reserved chunks but
Chris@58 764 ** should allow you to retrieve any and all chunks (may not be implemented for
Chris@58 765 ** all chunks or all file formats).
Chris@58 766 */
Chris@58 767
Chris@58 768 struct SF_CHUNK_INFO
Chris@58 769 { char id [64] ; /* The chunk identifier. */
Chris@58 770 unsigned id_size ; /* The size of the chunk identifier. */
Chris@58 771 unsigned datalen ; /* The size of that data. */
Chris@58 772 void *data ; /* Pointer to the data. */
Chris@58 773 } ;
Chris@58 774
Chris@58 775 typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
Chris@58 776
Chris@58 777 /* Set the specified chunk info (must be done before any audio data is written
Chris@58 778 ** to the file). This will fail for format specific reserved chunks.
Chris@58 779 ** The chunk_info->data pointer must be valid until the file is closed.
Chris@58 780 ** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
Chris@58 781 */
Chris@58 782 int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
Chris@58 783
Chris@58 784 /*
Chris@58 785 ** An opaque structure to an iterator over the all chunks of a given id
Chris@58 786 */
Chris@58 787 typedef struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
Chris@58 788
Chris@58 789 /* Get an iterator for all chunks matching chunk_info.
Chris@58 790 ** The iterator will point to the first chunk matching chunk_info.
Chris@58 791 ** Chunks are matching, if (chunk_info->id) matches the first
Chris@58 792 ** (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
Chris@58 793 ** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
Chris@58 794 ** is returned.
Chris@58 795 ** The values of chunk_info->datalen and chunk_info->data are ignored.
Chris@58 796 ** If no matching chunks are found in the sndfile, NULL is returned.
Chris@58 797 ** The returned iterator will stay valid until one of the following occurs:
Chris@58 798 ** a) The sndfile is closed.
Chris@58 799 ** b) A new chunk is added using sf_set_chunk().
Chris@58 800 ** c) Another chunk iterator function is called on the same SNDFILE* handle
Chris@58 801 ** that causes the iterator to be modified.
Chris@58 802 ** The memory for the iterator belongs to the SNDFILE* handle and is freed when
Chris@58 803 ** sf_close() is called.
Chris@58 804 */
Chris@58 805 SF_CHUNK_ITERATOR *
Chris@58 806 sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
Chris@58 807
Chris@58 808 /* Iterate through chunks by incrementing the iterator.
Chris@58 809 ** Increments the iterator and returns a handle to the new one.
Chris@58 810 ** After this call, iterator will no longer be valid, and you must use the
Chris@58 811 ** newly returned handle from now on.
Chris@58 812 ** The returned handle can be used to access the next chunk matching
Chris@58 813 ** the criteria as defined in sf_get_chunk_iterator().
Chris@58 814 ** If iterator points to the last chunk, this will free all resources
Chris@58 815 ** associated with iterator and return NULL.
Chris@58 816 ** The returned iterator will stay valid until sf_get_chunk_iterator_next
Chris@58 817 ** is called again, the sndfile is closed or a new chunk us added.
Chris@58 818 */
Chris@58 819 SF_CHUNK_ITERATOR *
Chris@58 820 sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
Chris@58 821
Chris@58 822
Chris@58 823 /* Get the size of the specified chunk.
Chris@58 824 ** If the specified chunk exists, the size will be returned in the
Chris@58 825 ** datalen field of the SF_CHUNK_INFO struct.
Chris@58 826 ** Additionally, the id of the chunk will be copied to the id
Chris@58 827 ** field of the SF_CHUNK_INFO struct and it's id_size field will
Chris@58 828 ** be updated accordingly.
Chris@58 829 ** If the chunk doesn't exist chunk_info->datalen will be zero, and the
Chris@58 830 ** id and id_size fields will be undefined.
Chris@58 831 ** The function will return SF_ERR_NO_ERROR on success or non-zero on
Chris@58 832 ** failure.
Chris@58 833 */
Chris@58 834 int
Chris@58 835 sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
Chris@58 836
Chris@58 837 /* Get the specified chunk data.
Chris@58 838 ** If the specified chunk exists, up to chunk_info->datalen bytes of
Chris@58 839 ** the chunk data will be copied into the chunk_info->data buffer
Chris@58 840 ** (allocated by the caller) and the chunk_info->datalen field
Chris@58 841 ** updated to reflect the size of the data. The id and id_size
Chris@58 842 ** field will be updated according to the retrieved chunk
Chris@58 843 ** If the chunk doesn't exist chunk_info->datalen will be zero, and the
Chris@58 844 ** id and id_size fields will be undefined.
Chris@58 845 ** The function will return SF_ERR_NO_ERROR on success or non-zero on
Chris@58 846 ** failure.
Chris@58 847 */
Chris@58 848 int
Chris@58 849 sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
Chris@58 850
Chris@58 851
Chris@6 852 #ifdef __cplusplus
Chris@6 853 } /* extern "C" */
Chris@6 854 #endif /* __cplusplus */
Chris@6 855
Chris@6 856 #endif /* SNDFILE_H */
Chris@6 857