pl-nk v0.4.5
Plonk|Plink|Plank are a set of cross-platform C/C++ frameworks for audio software development
plank_AudioFileCommon.h
00001 /*
00002  -------------------------------------------------------------------------------
00003  This file is part of the Plink, Plonk, Plank libraries
00004   by Martin Robinson
00005  
00006  http://code.google.com/p/pl-nk/
00007  
00008  Copyright University of the West of England, Bristol 2011-14
00009  All rights reserved.
00010  
00011  Redistribution and use in source and binary forms, with or without
00012  modification, are permitted provided that the following conditions are met:
00013  
00014  * Redistributions of source code must retain the above copyright
00015    notice, this list of conditions and the following disclaimer.
00016  * Redistributions in binary form must reproduce the above copyright
00017    notice, this list of conditions and the following disclaimer in the
00018    documentation and/or other materials provided with the distribution.
00019  * Neither the name of University of the West of England, Bristol nor 
00020    the names of its contributors may be used to endorse or promote products
00021    derived from this software without specific prior written permission.
00022  
00023  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00024  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00025  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
00026  DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF THE WEST OF ENGLAND, BRISTOL BE 
00027  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
00028  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
00029  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
00030  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00031  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
00032  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
00033  
00034  This software makes use of third party libraries. For more information see:
00035  doc/license.txt included in the distribution.
00036  -------------------------------------------------------------------------------
00037  */
00038 
00039 #ifndef PLANK_AUDIOFILECOMMON_H
00040 #define PLANK_AUDIOFILECOMMON_H
00041 
00042 #include "../../maths/plank_Maths.h"
00043 #include "../plank_IffFileCommon.h"
00044 
00045 #define PLANKAUDIOFILE_NAMENULL                       "(null)"
00046 
00047 #define PLANKAUDIOFILE_CHARBITS                       8
00048 
00049 #define PLANKAUDIOFILE_FORMAT_INVALID                -1
00050 #define PLANKAUDIOFILE_FORMAT_UNKNOWN                 0
00051 #define PLANKAUDIOFILE_FORMAT_UNKNOWNIFF              1
00052 #define PLANKAUDIOFILE_FORMAT_WAV                     2
00053 #define PLANKAUDIOFILE_FORMAT_AIFF                    3
00054 #define PLANKAUDIOFILE_FORMAT_AIFC                    4
00055 #define PLANKAUDIOFILE_FORMAT_OGGVORBIS               5
00056 #define PLANKAUDIOFILE_FORMAT_OPUS                    6
00057 #define PLANKAUDIOFILE_FORMAT_CAF                     7
00058 #define PLANKAUDIOFILE_FORMAT_W64                     8
00059 #define PLANKAUDIOFILE_FORMAT_REGION                 99
00060 #define PLANKAUDIOFILE_FORMAT_MULTI                 100
00061 #define PLANKAUDIOFILE_FORMAT_ARRAY                 101
00062 #define PLANKAUDIOFILE_FORMAT_QUEUE                 102
00063 #define PLANKAUDIOFILE_FORMAT_CUSTOM                103
00064 
00065 #define PLANKAUDIOFILE_ENCODING_BIGENDIAN_FLAG        1
00066 #define PLANKAUDIOFILE_ENCODING_PCM_FLAG              2
00067 #define PLANKAUDIOFILE_ENCODING_FLOAT_FLAG            4
00068 #define PLANKAUDIOFILE_ENCODING_NONINTERLEAVED_FLAG   8
00069 
00070 #define PLANKAUDIOFILE_ENCODING_INVALID              -1
00071 #define PLANKAUDIOFILE_ENCODING_UNKNOWN               0
00072 #define PLANKAUDIOFILE_ENCODING_UNUSED1               1
00073 
00074 #define PLANKAUDIOFILE_ENCODING_PCM_LITTLEENDIAN      (PLANKAUDIOFILE_ENCODING_PCM_FLAG)
00075 #define PLANKAUDIOFILE_ENCODING_PCM_BIGENDIAN         (PLANKAUDIOFILE_ENCODING_PCM_FLAG | PLANKAUDIOFILE_ENCODING_BIGENDIAN_FLAG)
00076 #define PLANKAUDIOFILE_ENCODING_FLOAT_LITTLEENDIAN    (PLANKAUDIOFILE_ENCODING_FLOAT_FLAG)
00077 #define PLANKAUDIOFILE_ENCODING_FLOAT_BIGENDIAN       (PLANKAUDIOFILE_ENCODING_FLOAT_FLAG | PLANKAUDIOFILE_ENCODING_BIGENDIAN_FLAG)
00078 
00079 #define PLANKAUDIOFILE_ENCODING_PCM_LITTLEENDIAN_NONINTERLEAVED      (PLANKAUDIOFILE_ENCODING_PCM_LITTLEENDIAN | PLANKAUDIOFILE_ENCODING_NONINTERLEAVED_FLAG)
00080 #define PLANKAUDIOFILE_ENCODING_PCM_BIGENDIAN_NONINTERLEAVED         (PLANKAUDIOFILE_ENCODING_PCM_BIGENDIAN | PLANKAUDIOFILE_ENCODING_NONINTERLEAVED_FLAG)
00081 #define PLANKAUDIOFILE_ENCODING_FLOAT_LITTLEENDIAN_NONINTERLEAVED    (PLANKAUDIOFILE_ENCODING_FLOAT_LITTLEENDIAN | PLANKAUDIOFILE_ENCODING_NONINTERLEAVED_FLAG)
00082 #define PLANKAUDIOFILE_ENCODING_FLOAT_BIGENDIAN_NONINTERLEAVED       (PLANKAUDIOFILE_ENCODING_FLOAT_BIGENDIAN | PLANKAUDIOFILE_ENCODING_NONINTERLEAVED_FLAG)
00083 
00084 #define PLANKAUDIOFILE_ENCODING_MIN                   PLANKAUDIOFILE_ENCODING_PCM_LITTLEENDIAN
00085 #define PLANKAUDIOFILE_ENCODING_MAX                   PLANKAUDIOFILE_ENCODING_FLOAT_BIGENDIAN_NONINTERLEAVED
00086 
00087 #define PLANKAUDIOFILE_WAV_COMPRESSION_PCM            0x0001
00088 #define PLANKAUDIOFILE_WAV_COMPRESSION_FLOAT          0x0003
00089 #define PLANKAUDIOFILE_WAV_COMPRESSION_EXTENSIBLE     0xFFFE
00090 #define PLANKAUDIOFILE_WAV_FMT_LENGTH                 16
00091 #define PLANKAUDIOFILE_WAV_FMT_EXTENSIBLE_LENGTH      40
00092 #define PLANKAUDIOFILE_WAV_DS64_MINIMUMLENGTH         28
00093 #define PLANKAUDIOFILE_WAV_HEADER_LENGTH              (PLANKAUDIOFILE_WAV_FMT_EXTENSIBLE_LENGTH + PLANKAUDIOFILE_WAV_DS64_MINIMUMLENGTH + 8)
00094 
00095 typedef PlankUI PlankChannelIdentifier;
00096 
00097 // from WAV and CAF
00098 
00099 #define PLANKAUDIOFILE_CHANNEL_NONE                         0
00100 #define PLANKAUDIOFILE_CHANNEL_FRONT_LEFT                   1 //   1.   Front Left - FL
00101 #define PLANKAUDIOFILE_CHANNEL_FRONT_RIGHT                  2 //   2.   Front Right - FR
00102 #define PLANKAUDIOFILE_CHANNEL_FRONT_CENTER                 3 //   3.   Front Center - FC
00103 #define PLANKAUDIOFILE_CHANNEL_LOW_FREQUENCY                4 //   4.   Low Frequency - LF
00104 #define PLANKAUDIOFILE_CHANNEL_BACK_LEFT                    5 //   5.   Back Left - BL
00105 #define PLANKAUDIOFILE_CHANNEL_BACK_RIGHT                   6 //   6.   Back Right - BR
00106 #define PLANKAUDIOFILE_CHANNEL_FRONT_LEFT_OF_CENTER         7 //   7.   Front Left of Center - FLC
00107 #define PLANKAUDIOFILE_CHANNEL_FRONT_RIGHT_OF_CENTER        8 //   8.   Front Right of Center - FRC
00108 #define PLANKAUDIOFILE_CHANNEL_BACK_CENTER                  9 //   9.   Back Center - BC
00109 #define PLANKAUDIOFILE_CHANNEL_SIDE_LEFT                    10 // 10.   Side Left - SL
00110 #define PLANKAUDIOFILE_CHANNEL_SIDE_RIGHT                   11 // 11.   Side Right - SR
00111 #define PLANKAUDIOFILE_CHANNEL_TOP_CENTER                   12 // 12.   Top Center - TC
00112 #define PLANKAUDIOFILE_CHANNEL_TOP_FRONT_LEFT               13 // 13.   Top Front Left - TFL
00113 #define PLANKAUDIOFILE_CHANNEL_TOP_FRONT_CENTER             14 // 14.   Top Front Center - TFC
00114 #define PLANKAUDIOFILE_CHANNEL_TOP_FRONT_RIGHT              15 // 15.   Top Front Right - TFR
00115 #define PLANKAUDIOFILE_CHANNEL_TOP_BACK_LEFT                16 // 16.   Top Back Left - TBL
00116 #define PLANKAUDIOFILE_CHANNEL_TOP_BACK_CENTER              17 // 17.   Top Back Center - TBC
00117 #define PLANKAUDIOFILE_CHANNEL_TOP_BACK_RIGHT               18 // 18.   Top Back Right - TBR
00118 
00119 #define PLANKAUDIOFILE_CHANNEL_UNUSED0                      19
00120 #define PLANKAUDIOFILE_CHANNEL_UNUSED1                      20
00121 #define PLANKAUDIOFILE_CHANNEL_UNUSED2                      21
00122 #define PLANKAUDIOFILE_CHANNEL_UNUSED3                      22
00123 #define PLANKAUDIOFILE_CHANNEL_UNUSED4                      23
00124 
00125 #define PLANKAUDIOFILE_CHANNEL_BITSTREAM_1_LEFT             24
00126 #define PLANKAUDIOFILE_CHANNEL_BITSTREAM_1_RIGHT            25
00127 #define PLANKAUDIOFILE_CHANNEL_BITSTREAM_2_LEFT             26
00128 #define PLANKAUDIOFILE_CHANNEL_BITSTREAM_2_RIGHT            27
00129 
00130 #define PLANKAUDIOFILE_CHANNEL_STEREO_LEFT                  30
00131 #define PLANKAUDIOFILE_CHANNEL_STEREO_RIGHT                 31
00132 
00133 #define PLANKAUDIOFILE_CHANNEL_RESERVED                     32
00134 
00135 // CAF
00136 #define PLANKAUDIOFILE_CHANNEL_REAR_SURROUND_LEFT           33
00137 #define PLANKAUDIOFILE_CHANNEL_REAR_SURROUND_RIGHT          34
00138 #define PLANKAUDIOFILE_CHANNEL_LEFT_WIDE                    35
00139 #define PLANKAUDIOFILE_CHANNEL_RIGHT_WIDE                   36
00140 #define PLANKAUDIOFILE_CHANNEL_LOW_FREQUENCY_EXTRA          37
00141 #define PLANKAUDIOFILE_CHANNEL_LEFT_TOTAL                   38           // matrix encoded 4 channels
00142 #define PLANKAUDIOFILE_CHANNEL_RIGHT_TOTAL                  39           // matrix encoded 4 channels
00143 #define PLANKAUDIOFILE_CHANNEL_HEARING_IMPAIRED             40
00144 #define PLANKAUDIOFILE_CHANNEL_NARRATION                    41
00145 #define PLANKAUDIOFILE_CHANNEL_MONO                         42
00146 #define PLANKAUDIOFILE_CHANNEL_DIALOGCENTRICMIX             43
00147 #define PLANKAUDIOFILE_CHANNEL_CENTERSURROUND_DIRECT        44           // back center non diffuse
00148 #define PLANKAUDIOFILE_CHANNEL_HAPTIC                       45
00149 
00150 #define PLANKAUDIOFILE_CHANNEL_USE_COORDS                   100
00151 
00152 #define PLANKAUDIOFILE_CHANNEL_AMBISONIC_W                  200
00153 #define PLANKAUDIOFILE_CHANNEL_AMBISONIC_X                  201
00154 #define PLANKAUDIOFILE_CHANNEL_AMBISONIC_Y                  202
00155 #define PLANKAUDIOFILE_CHANNEL_AMBISONIC_Z                  203
00156 #define PLANKAUDIOFILE_CHANNEL_MS_MID                       204
00157 #define PLANKAUDIOFILE_CHANNEL_MS_SIDE                      205
00158 #define PLANKAUDIOFILE_CHANNEL_XY_X                         206
00159 #define PLANKAUDIOFILE_CHANNEL_XY_Y                         207
00160 #define PLANKAUDIOFILE_CHANNEL_HEADPHONES_LEFT              301
00161 #define PLANKAUDIOFILE_CHANNEL_HEADPHONES_RIGHT             302
00162 #define PLANKAUDIOFILE_CHANNEL_CLICK_TRACK                  304
00163 #define PLANKAUDIOFILE_CHANNEL_FOREIGN_LANGUAGE             305
00164 #define PLANKAUDIOFILE_CHANNEL_DISCRETE                     400
00165 
00166 #define PLANKAUDIOFILE_CHANNEL_DISCRETE_N                (1<<16) // OR with 0-based channel index 0-65535
00167 
00168 #define PLANKAUDIOFILE_CHANNEL_UNKNOWN                      0xFFFFFFFF
00169 
00170 // the table of strings for unknown and discrete layouts/channels
00171 // can be overrided with a preprocessor macro
00172 #ifndef PLANKAUDIOFILE_CHANNEL_MAXINDEXSTRINGS      
00173 #define PLANKAUDIOFILE_CHANNEL_MAXINDEXSTRINGS 128
00174 #endif
00175 
00176 
00177 // EBU-TECH 3306
00178 #define PLANKAUDIOFILE_WAV_SPEAKER_NONE                     0x00000000
00179 
00180 #define PLANKAUDIOFILE_WAV_SPEAKER_FRONT_LEFT               0x00000001
00181 #define PLANKAUDIOFILE_WAV_SPEAKER_FRONT_RIGHT              0x00000002
00182 #define PLANKAUDIOFILE_WAV_SPEAKER_FRONT_CENTER             0x00000004
00183 #define PLANKAUDIOFILE_WAV_SPEAKER_LOW_FREQUENCY            0x00000008
00184 #define PLANKAUDIOFILE_WAV_SPEAKER_BACK_LEFT                0x00000010
00185 #define PLANKAUDIOFILE_WAV_SPEAKER_BACK_RIGHT               0x00000020
00186 #define PLANKAUDIOFILE_WAV_SPEAKER_FRONT_LEFT_OF_CENTER     0x00000040
00187 #define PLANKAUDIOFILE_WAV_SPEAKER_FRONT_RIGHT_OF_CENTER    0x00000080
00188 #define PLANKAUDIOFILE_WAV_SPEAKER_BACK_CENTER              0x00000100
00189 #define PLANKAUDIOFILE_WAV_SPEAKER_SIDE_LEFT                0x00000200
00190 #define PLANKAUDIOFILE_WAV_SPEAKER_SIDE_RIGHT               0x00000400
00191 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_CENTER               0x00000800
00192 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_FRONT_LEFT           0x00001000
00193 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_FRONT_CENTER         0x00002000
00194 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_FRONT_RIGHT          0x00004000
00195 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_BACK_LEFT            0x00008000
00196 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_BACK_CENTER          0x00010000
00197 #define PLANKAUDIOFILE_WAV_SPEAKER_TOP_BACK_RIGHT           0x00020000
00198 #define PLANKAUDIOFILE_WAV_SPEAKER_ALL                      0x80000000
00199 #define PLANKAUDIOFILE_WAV_SPEAKER_RESERVED                 0x80000000
00200 #define PLANKAUDIOFILE_WAV_SPEAKER_STEREO_LEFT              0x20000000
00201 #define PLANKAUDIOFILE_WAV_SPEAKER_STEREO_RIGHT             0x40000000
00202 
00203 #define PLANKAUDIOFILE_WAV_SPEAKER_BITSTREAM_1_LEFT         0x00800000
00204 #define PLANKAUDIOFILE_WAV_SPEAKER_BITSTREAM_1_RIGHT        0x01000000
00205 #define PLANKAUDIOFILE_WAV_SPEAKER_BITSTREAM_2_LEFT         0x02000000
00206 #define PLANKAUDIOFILE_WAV_SPEAKER_BITSTREAM_2_RIGHT        0x04000000
00207 #define PLANKAUDIOFILE_WAV_SPEAKER_ANY                      0xffffffff
00208 
00209 #define PLANKAUDIOFILE_WAV_SPEAKER_VALIDBITS                0xF783FFFF
00210 #define PLANKAUDIOFILE_CAF_SPEAKER_VALIDBITS                0x0003FFFF
00211 
00212 
00213 #define PLANKAUDIOFILE_W64_RIFF_ID          PLANKIFFFILE_W64_RIFF_ID
00214 #define PLANKAUDIOFILE_W64_LIST_ID          PLANKIFFFILE_W64_LIST_ID
00215 #define PLANKAUDIOFILE_W64_WAVE_ID          "wave-ACF3-11D3-8CD1-00C04F8EDB8A"
00216 #define PLANKAUDIOFILE_W64_FMT_ID           "fmt -ACF3-11D3-8CD1-00C04F8EDB8A"
00217 #define PLANKAUDIOFILE_W64_FACT_ID          "fact-ACF3-11D3-8CD1-00C04F8EDB8A"
00218 #define PLANKAUDIOFILE_W64_DATA_ID          "data-ACF3-11D3-8CD1-00C04F8EDB8A"
00219 #define PLANKAUDIOFILE_W64_LEVL_ID          "levl-ACF3-11D3-8CD1-00C04F8EDB8A"
00220 #define PLANKAUDIOFILE_W64_JUNK_ID          PLANKIFFFILE_W64_JUNK_ID
00221 #define PLANKAUDIOFILE_W64_BEXT_ID          "bext-ACF3-11D3-8CD1-00C04F8EDB8A"
00222 #define PLANKAUDIOFILE_W64_MARKER_ID        "ABF76256-392D-11D2-86C7-00C04F8EDB8A"
00223 #define PLANKAUDIOFILE_W64_SUMMARYLIST_ID   "925F94BC-525A-11D2-86DC-00C04F8EDB8A"
00224 
00225 /*
00226 RIFF = 1179011410
00227 WAVE = 1163280727
00228 fmt  = 544501094
00229 data = 1635017060
00230 JUNK = 1263424842
00231 FORM = 1297239878
00232 AIFF = 1179011393
00233 SSND = 1145983827
00234 COMM = 1296912195
00235 */
00236 
00237 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_RIFF = PLANKFOURCHARCODE("RIFF");
00238 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_WAVE = PLANKFOURCHARCODE("WAVE");
00239 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_FMT  = PLANKFOURCHARCODE("fmt ");
00240 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_DATA = PLANKFOURCHARCODE("data");
00241 //
00242 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_FORM = PLANKFOURCHARCODE("FORM");
00243 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_AIFF = PLANKFOURCHARCODE("AIFF");
00244 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_AIFC = PLANKFOURCHARCODE("AIFC");
00245 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_COMM = PLANKFOURCHARCODE("COMM");
00246 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_SSND = PLANKFOURCHARCODE("SSND");
00247 //static const PlankFourCharCode PLANKAUDIOFILE_CHUNKID_FVER = PLANKFOURCHARCODE("FVER");
00248 
00249 #define PLANKAUDIOFILE_AIFF_COMM_LENGTH             18
00250 #define PLANKAUDIOFILE_AIFC_VERSION                 0xA2805140
00251 #define PLANKAUDIOFILE_AIFC_COMM_LENGTH             24
00252 
00253 typedef struct PlankCAFStringID {
00254     
00255     PlankUI  stringID;
00256     PlankLL  offset;
00257 } PlankCAFStringID;
00258 
00259 #define PLANKAUDIOFILE_CAF_DEFAULTHEADERPAD         4016 // 4028
00260 #define PLANKAUDIOFILE_CAF_DESC_LENGTH              32
00261 #define PLANKAUDIOFILE_CAF_FLOAT_FLAG               0x00000001 // (1L << 0)
00262 #define PLANKAUDIOFILE_CAF_LITTLEENDIAN_FLAG        0x00000002 // (1L << 1)
00263 
00264 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPENONE      0
00265 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE24        1
00266 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE25        2
00267 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE30DROP    3
00268 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE30        4
00269 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE2997      5
00270 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE2997DROP  6
00271 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE60        7
00272 #define PLANKAUDIOFILE_CAF_SMPTE_TIMETYPE5994      8
00273 
00274 
00275 
00276 #define PLANKAUDIOFILE_CAF_MARKERTYPE_GENERIC              0
00277 #define PLANKAUDIOFILE_CAF_MARKERTYPE_PROGRAMSTART         pl_FourCharCode ("pbeg")
00278 #define PLANKAUDIOFILE_CAF_MARKERTYPE_PROMGRAMEND          pl_FourCharCode ("pend")
00279 #define PLANKAUDIOFILE_CAF_MARKERTYPE_TRACKSTART           pl_FourCharCode ("tbeg")
00280 #define PLANKAUDIOFILE_CAF_MARKERTYPE_TRACKEND             pl_FourCharCode ("tend")
00281 #define PLANKAUDIOFILE_CAF_MARKERTYPE_INDEX                pl_FourCharCode ("indx")
00282 #define PLANKAUDIOFILE_CAF_MARKERTYPE_REGIONSTART          pl_FourCharCode ("rbeg")
00283 #define PLANKAUDIOFILE_CAF_MARKERTYPE_REGIONEND            pl_FourCharCode ("rend")
00284 #define PLANKAUDIOFILE_CAF_MARKERTYPE_REGIONSYNCPOINT      pl_FourCharCode ("rsyc")
00285 #define PLANKAUDIOFILE_CAF_MARKERTYPE_SELECTIONSTART       pl_FourCharCode ("sbeg")
00286 #define PLANKAUDIOFILE_CAF_MARKERTYPE_SELECTIONEND         pl_FourCharCode ("send")
00287 #define PLANKAUDIOFILE_CAF_MARKERTYPE_EDITSOURCEBEGIN      pl_FourCharCode ("cbeg")
00288 #define PLANKAUDIOFILE_CAF_MARKERTYPE_EDITSOURCEEND        pl_FourCharCode ("cend")
00289 #define PLANKAUDIOFILE_CAF_MARKERTYPE_EDITDESTINATIONBEGIN pl_FourCharCode ("dbeg")
00290 #define PLANKAUDIOFILE_CAF_MARKERTYPE_EDITDESTINATIONEND   pl_FourCharCode ("dend")
00291 #define PLANKAUDIOFILE_CAF_MARKERTYPE_SUSTAINLOOPSTART     pl_FourCharCode ("slbg")
00292 #define PLANKAUDIOFILE_CAF_MARKERTYPE_SUSTAINLOOPEND       pl_FourCharCode ("slen")
00293 #define PLANKAUDIOFILE_CAF_MARKERTYPE_RELEASELOOPSTART     pl_FourCharCode ("rlbg")
00294 #define PLANKAUDIOFILE_CAF_MARKERTYPE_RELEASELOOPEND       pl_FourCharCode ("rlen")
00295 
00296 typedef PlankUI PlankChannelLayout;
00297 
00298 // essentially the same as CAF
00299 #define PLANKAUDIOFILE_LAYOUT_UNDEFINED                 0
00300 #define PLANKAUDIOFILE_LAYOUT_USECHANNELDESCRIPTIONS    ((0<<16) | 0)
00301 #define PLANKAUDIOFILE_LAYOUT_USECHANNELBITMAP          ((1<<16) | 0)
00302 
00303 #define PLANKAUDIOFILE_LAYOUT_STANARDMINIMUM            PLANKAUDIOFILE_LAYOUT_USECHANNELBITMAP
00304 
00305 #define PLANKAUDIOFILE_LAYOUT_MONO                      ((100<<16) | 1)
00306 #define PLANKAUDIOFILE_LAYOUT_STEREO                    ((101<<16) | 2)
00307 #define PLANKAUDIOFILE_LAYOUT_STEREOHEADPHONES          ((102<<16) | 2)
00308 #define PLANKAUDIOFILE_LAYOUT_MATRIXSTEREO              ((103<<16) | 2)
00309 #define PLANKAUDIOFILE_LAYOUT_MIDSIDE                   ((104<<16) | 2)
00310 #define PLANKAUDIOFILE_LAYOUT_XY                        ((105<<16) | 2)
00311 #define PLANKAUDIOFILE_LAYOUT_BINAURAL                  ((106<<16) | 2)
00312 #define PLANKAUDIOFILE_LAYOUT_AMBISONIC_B_FORMAT        ((107<<16) | 4)
00313 #define PLANKAUDIOFILE_LAYOUT_QUADRAPHONIC              ((108<<16) | 4)
00314 #define PLANKAUDIOFILE_LAYOUT_PENTAGONAL                ((109<<16) | 5)
00315 #define PLANKAUDIOFILE_LAYOUT_HEXAGONAL                 ((110<<16) | 6)
00316 #define PLANKAUDIOFILE_LAYOUT_OCTAGONAL                 ((111<<16) | 8)
00317 #define PLANKAUDIOFILE_LAYOUT_CUBE                      ((112<<16) | 8)
00318 #define PLANKAUDIOFILE_LAYOUT_MPEG_1_0                  PLANKAUDIOFILE_LAYOUT_MONO         //  C
00319 #define PLANKAUDIOFILE_LAYOUT_MPEG_2_0                  PLANKAUDIOFILE_LAYOUT_STEREO       //  L R
00320 #define PLANKAUDIOFILE_LAYOUT_MPEG_3_0_A                ((113<<16) | 3)                      //  L R C
00321 #define PLANKAUDIOFILE_LAYOUT_MPEG_3_0_B                ((114<<16) | 3)                      //  C L R
00322 #define PLANKAUDIOFILE_LAYOUT_MPEG_4_0_A                ((115<<16) | 4)                       //  L R C Cs
00323 #define PLANKAUDIOFILE_LAYOUT_MPEG_4_0_B                ((116<<16) | 4)                       //  C L R Cs
00324 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_0_A                ((117<<16) | 5)                       //  L R C Ls Rs
00325 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_0_B                ((118<<16) | 5)                       //  L R Ls Rs C
00326 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_0_C                ((119<<16) | 5)                       //  L C R Ls Rs
00327 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_0_D                ((120<<16) | 5)                       //  C L R Ls Rs
00328 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_1_A                ((121<<16) | 6)                       //  L R C LFE Ls Rs
00329 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_1_B                ((122<<16) | 6)                       //  L R Ls Rs C LFE
00330 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_1_C                ((123<<16) | 6)                       //  L C R Ls Rs LFE
00331 #define PLANKAUDIOFILE_LAYOUT_MPEG_5_1_D                ((124<<16) | 6)                       //  C L R Ls Rs LFE
00332 #define PLANKAUDIOFILE_LAYOUT_MPEG_6_1_A                ((125<<16) | 7)                       //  L R C LFE Ls Rs Cs
00333 #define PLANKAUDIOFILE_LAYOUT_MPEG_7_1_A                ((126<<16) | 8)                       //  L R C LFE Ls Rs Lc Rc
00334 #define PLANKAUDIOFILE_LAYOUT_MPEG_7_1_B                ((127<<16) | 8)                       //  C Lc Rc L R Ls Rs LFE 
00335 #define PLANKAUDIOFILE_LAYOUT_MPEG_7_1_C                ((128<<16) | 8)                       //  L R C LFE Ls Rs Rls Rrs
00336 #define PLANKAUDIOFILE_LAYOUT_EMAGIC_DEFAULT_7_1        ((129<<16) | 8)                       //  L R Ls Rs C LFE Lc Rc
00337 #define PLANKAUDIOFILE_LAYOUT_SMPTE_DTV                 ((130<<16) | 8)                       //  L R C LFE Ls Rs Lt Rt
00338 #define PLANKAUDIOFILE_LAYOUT_ITU_1_0                   PLANKAUDIOFILE_LAYOUT_MONO         //  C
00339 #define PLANKAUDIOFILE_LAYOUT_ITU_2_0                   PLANKAUDIOFILE_LAYOUT_STEREO       //  L R
00340 #define PLANKAUDIOFILE_LAYOUT_ITU_2_1                   ((131<<16) | 3)                       //  L R Cs
00341 #define PLANKAUDIOFILE_LAYOUT_ITU_2_2                   ((132<<16) | 4)                       //  L R Ls Rs
00342 #define PLANKAUDIOFILE_LAYOUT_ITU_3_0                   PLANKAUDIOFILE_LAYOUT_MPEG_3_0_A   //  L R C
00343 #define PLANKAUDIOFILE_LAYOUT_ITU_3_1                   PLANKAUDIOFILE_LAYOUT_MPEG_4_0_A   //  L R C Cs
00344 #define PLANKAUDIOFILE_LAYOUT_ITU_3_2                   PLANKAUDIOFILE_LAYOUT_MPEG_5_0_A   //  L R C Ls Rs
00345 #define PLANKAUDIOFILE_LAYOUT_ITU_3_2_1                 PLANKAUDIOFILE_LAYOUT_MPEG_5_1_A   //  L R C LFE Ls Rs
00346 #define PLANKAUDIOFILE_LAYOUT_ITU_3_4_1                 PLANKAUDIOFILE_LAYOUT_MPEG_7_1_C   //  L R C LFE Ls Rs Rls Rrs
00347 #define PLANKAUDIOFILE_LAYOUT_DVD_0                     PLANKAUDIOFILE_LAYOUT_MONO         // C (mono)
00348 #define PLANKAUDIOFILE_LAYOUT_DVD_1                     PLANKAUDIOFILE_LAYOUT_STEREO       // L R
00349 #define PLANKAUDIOFILE_LAYOUT_DVD_2                     PLANKAUDIOFILE_LAYOUT_ITU_2_1      // L R Cs
00350 #define PLANKAUDIOFILE_LAYOUT_DVD_3                     PLANKAUDIOFILE_LAYOUT_ITU_2_2      // L R Ls Rs
00351 #define PLANKAUDIOFILE_LAYOUT_DVD_4                     ((133<<16) | 3)                       // L R LFE
00352 #define PLANKAUDIOFILE_LAYOUT_DVD_5                     ((134<<16) | 4)                       // L R LFE Cs
00353 #define PLANKAUDIOFILE_LAYOUT_DVD_6                     ((135<<16) | 5)                       // L R LFE Ls Rs
00354 #define PLANKAUDIOFILE_LAYOUT_DVD_7                     PLANKAUDIOFILE_LAYOUT_MPEG_3_0_A   // L R C
00355 #define PLANKAUDIOFILE_LAYOUT_DVD_8                     PLANKAUDIOFILE_LAYOUT_MPEG_4_0_A   // L R C Cs
00356 #define PLANKAUDIOFILE_LAYOUT_DVD_9                     PLANKAUDIOFILE_LAYOUT_MPEG_5_0_A   // L R C Ls Rs
00357 #define PLANKAUDIOFILE_LAYOUT_DVD_10                    ((136<<16) | 4)                       // L R C LFE
00358 #define PLANKAUDIOFILE_LAYOUT_DVD_11                    ((137<<16) | 5)                       // L R C LFE Cs
00359 #define PLANKAUDIOFILE_LAYOUT_DVD_12                    PLANKAUDIOFILE_LAYOUT_MPEG_5_1_A   // L R C LFE Ls Rs
00360 #define PLANKAUDIOFILE_LAYOUT_DVD_13                    PLANKAUDIOFILE_LAYOUT_DVD_8        // L R C Cs
00361 #define PLANKAUDIOFILE_LAYOUT_DVD_14                    PLANKAUDIOFILE_LAYOUT_DVD_9        // L R C Ls Rs
00362 #define PLANKAUDIOFILE_LAYOUT_DVD_15                    PLANKAUDIOFILE_LAYOUT_DVD_10       // L R C LFE
00363 #define PLANKAUDIOFILE_LAYOUT_DVD_16                    PLANKAUDIOFILE_LAYOUT_DVD_11       // L R C LFE Cs
00364 #define PLANKAUDIOFILE_LAYOUT_DVD_17                    PLANKAUDIOFILE_LAYOUT_DVD_12       // L R C LFE Ls Rs
00365 #define PLANKAUDIOFILE_LAYOUT_DVD_18                    ((138<<16) | 5)                       // L R Ls Rs LFE
00366 #define PLANKAUDIOFILE_LAYOUT_DVD_19                    PLANKAUDIOFILE_LAYOUT_MPEG_5_0_B   // L R Ls Rs C
00367 #define PLANKAUDIOFILE_LAYOUT_DVD_20                    PLANKAUDIOFILE_LAYOUT_MPEG_5_1_B   // L R Ls Rs C LFE
00368 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_4               PLANKAUDIOFILE_LAYOUT_QUADRAPHONIC
00369 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_5               PLANKAUDIOFILE_LAYOUT_PENTAGONAL
00370 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_6               PLANKAUDIOFILE_LAYOUT_HEXAGONAL
00371 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_8               PLANKAUDIOFILE_LAYOUT_OCTAGONAL
00372 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_5_0             PLANKAUDIOFILE_LAYOUT_MPEG_5_0_B   // L R Ls Rs C
00373 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_6_0             ((139<<16) | 6)                       // L R Ls Rs C Cs
00374 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_7_0             ((140<<16) | 7)                       // L R Ls Rs C Rls Rrs
00375 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_7_0_FRONT       ((148<<16) | 7)                       // L R Ls Rs C Lc Rc
00376 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_5_1             PLANKAUDIOFILE_LAYOUT_MPEG_5_1_A   // L R C LFE Ls Rs
00377 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_6_1             PLANKAUDIOFILE_LAYOUT_MPEG_6_1_A   // L R C LFE Ls Rs Cs
00378 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_7_1             PLANKAUDIOFILE_LAYOUT_MPEG_7_1_C   // L R C LFE Ls Rs Rls Rrs
00379 #define PLANKAUDIOFILE_LAYOUT_AUDIOUNIT_7_1_FRONT       PLANKAUDIOFILE_LAYOUT_MPEG_7_1_A   // L R C LFE Ls Rs Lc Rc
00380 #define PLANKAUDIOFILE_LAYOUT_AAC_3_0                   PLANKAUDIOFILE_LAYOUT_MPEG_3_0_B   // C L R
00381 #define PLANKAUDIOFILE_LAYOUT_AAC_QUADRAPHONIC          PLANKAUDIOFILE_LAYOUT_QUADRAPHONIC // L R Ls Rs
00382 #define PLANKAUDIOFILE_LAYOUT_AAC_4_0                   PLANKAUDIOFILE_LAYOUT_MPEG_4_0_B   // C L R Cs
00383 #define PLANKAUDIOFILE_LAYOUT_AAC_5_0                   PLANKAUDIOFILE_LAYOUT_MPEG_5_0_D   // C L R Ls Rs
00384 #define PLANKAUDIOFILE_LAYOUT_AAC_5_1                   PLANKAUDIOFILE_LAYOUT_MPEG_5_1_D   // C L R Ls Rs Lfe
00385 #define PLANKAUDIOFILE_LAYOUT_AAC_6_0                   ((141<<16) | 6)                       // C L R Ls Rs Cs
00386 #define PLANKAUDIOFILE_LAYOUT_AAC_6_1                   ((142<<16) | 7)                       // C L R Ls Rs Cs Lfe
00387 #define PLANKAUDIOFILE_LAYOUT_AAC_7_0                   ((143<<16) | 7)                       // C L R Ls Rs Rls Rrs
00388 #define PLANKAUDIOFILE_LAYOUT_AAC_7_1                   PLANKAUDIOFILE_LAYOUT_MPEG_7_1_B   // C Lc Rc L R Ls Rs Lfe
00389 #define PLANKAUDIOFILE_LAYOUT_AAC_OCTAGONAL             ((144<<16) | 8)                       // C L R Ls Rs Rls Rrs Cs
00390 #define PLANKAUDIOFILE_LAYOUT_TMH_10_2_STD              ((145<<16) | 16)                      // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
00391 #define PLANKAUDIOFILE_LAYOUT_TMH_10_2_FULL             ((146<<16) | 21)                      // TMH_10_2_std plus: Lc Rc HI VI Haptic
00392 #define PLANKAUDIOFILE_LAYOUT_AC3_1_0_1                 ((149<<16) | 2)                       // C LFE
00393 #define PLANKAUDIOFILE_LAYOUT_AC3_3_0                   ((150<<16) | 3)                       // L C R
00394 #define PLANKAUDIOFILE_LAYOUT_AC3_3_1                   ((151<<16) | 4)                       // L C R Cs
00395 #define PLANKAUDIOFILE_LAYOUT_AC3_3_0_1                 ((152<<16) | 4)                       // L C R LFE
00396 #define PLANKAUDIOFILE_LAYOUT_AC3_2_1_1                 ((153<<16) | 4)                       // L R Cs LFE
00397 #define PLANKAUDIOFILE_LAYOUT_AC3_3_1_1                 ((154<<16) | 5)                       // L C R Cs LFE
00398 #define PLANKAUDIOFILE_LAYOUT_EAC_6_0_A                 ((155<<16) | 6)                       // L C R Ls Rs Cs
00399 #define PLANKAUDIOFILE_LAYOUT_EAC_7_0_A                 ((156<<16) | 7)                       // L C R Ls Rs Rls Rrs
00400 #define PLANKAUDIOFILE_LAYOUT_EAC3_6_1_A                ((157<<16) | 7)                       // L C R Ls Rs LFE Cs
00401 #define PLANKAUDIOFILE_LAYOUT_EAC3_6_1_B                ((158<<16) | 7)                       // L C R Ls Rs LFE Ts
00402 #define PLANKAUDIOFILE_LAYOUT_EAC3_6_1_C                ((159<<16) | 7)                       // L C R Ls Rs LFE Vhc
00403 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_A                ((160<<16) | 8)                       // L C R Ls Rs LFE Rls Rrs
00404 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_B                ((161<<16) | 8)                       // L C R Ls Rs LFE Lc Rc
00405 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_C                ((162<<16) | 8)                       // L C R Ls Rs LFE Lsd Rsd
00406 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_D                ((163<<16) | 8)                       // L C R Ls Rs LFE Lw Rw
00407 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_E                ((164<<16) | 8)                       // L C R Ls Rs LFE Vhl Vhr
00408 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_F                ((165<<16) | 8)                        // L C R Ls Rs LFE Cs Ts
00409 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_G                ((166<<16) | 8)                        // L C R Ls Rs LFE Cs Vhc
00410 #define PLANKAUDIOFILE_LAYOUT_EAC3_7_1_H                ((167<<16) | 8)                        // L C R Ls Rs LFE Ts Vhc
00411 #define PLANKAUDIOFILE_LAYOUT_DTS_3_1                   ((168<<16) | 4)                        // C L R LFE
00412 #define PLANKAUDIOFILE_LAYOUT_DTS_4_1                   ((169<<16) | 5)                        // C L R Cs LFE
00413 #define PLANKAUDIOFILE_LAYOUT_DTS_6_0_A                 ((170<<16) | 6)                        // Lc Rc L R Ls Rs
00414 #define PLANKAUDIOFILE_LAYOUT_DTS_6_0_B                 ((171<<16) | 6)                        // C L R Rls Rrs Ts
00415 #define PLANKAUDIOFILE_LAYOUT_DTS_6_0_C                 ((172<<16) | 6)                        // C Cs L R Rls Rrs
00416 #define PLANKAUDIOFILE_LAYOUT_DTS_6_1_A                 ((173<<16) | 7)                        // Lc Rc L R Ls Rs LFE
00417 #define PLANKAUDIOFILE_LAYOUT_DTS_6_1_B                 ((174<<16) | 7)                        // C L R Rls Rrs Ts LFE
00418 #define PLANKAUDIOFILE_LAYOUT_DTS_6_1_C                 ((175<<16) | 7)                        // C Cs L R Rls Rrs LFE
00419 #define PLANKAUDIOFILE_LAYOUT_DTS_7_0                   ((176<<16) | 7)                        // Lc C Rc L R Ls Rs
00420 #define PLANKAUDIOFILE_LAYOUT_DTS_7_1                   ((177<<16) | 8)                        // Lc C Rc L R Ls Rs LFE
00421 #define PLANKAUDIOFILE_LAYOUT_DTS_8_0_A                 ((178<<16) | 8)                        // Lc Rc L R Ls Rs Rls Rrs
00422 #define PLANKAUDIOFILE_LAYOUT_DTS_8_0_B                 ((179<<16) | 8)                        // Lc C Rc L R Ls Cs Rs
00423 #define PLANKAUDIOFILE_LAYOUT_DTS_8_1_A                 ((180<<16) | 9)                        // Lc Rc L R Ls Rs Rls Rrs LFE
00424 #define PLANKAUDIOFILE_LAYOUT_DTS_8_1_B                 ((181<<16) | 9)                        // Lc C Rc L R Ls Cs Rs LFE
00425 #define PLANKAUDIOFILE_LAYOUT_DTS_6_1_D                 ((182<<16) | 7)                        // C L R Ls Rs LFE Cs
00426 #define PLANKAUDIOFILE_LAYOUT_DISCRETE                  ((147<<16) | 0)                        // needs to be ORed with the actual number of channels
00427 #define PLANKAUDIOFILE_LAYOUT_UNKNOWN                   0xFFFF0000                             // needs to be ORed with the actual number of channels
00428 
00429 #define PLANKAUDIOFILE_LAYOUT_OGGVORBIS_6_1           ((16384<<16) | 7) // front left, center, front right, side left, side right, rear center, LFE
00430 #define PLANKAUDIOFILE_LAYOUT_OGGVORBIS_7_1           ((16385<<16) | 8) // front left, center, front right, side left, side right, rear left, rear right, LFE
00431 #define PLANKAUDIOFILE_LAYOUT_AIFF_6_0                ((16386<<16) | 6) // left, left centre, centre, right, right centre, surround
00432 
00433 #define PLANKAUDIOFILE_LAYOUT_STEREOPAIRS               0xFFFE0000                             // needs to be ORed with the actual number of channels
00434 
00435 
00436 // custom ones.. non-CAF standard may need to update these in the future is CAF adds need formats
00437 
00438 #define PLANKAUDIOFILE_LAYOUT_MAXSTANDARDCHANNELS       21
00439 
00440 #define PLANKAUDIOFILEMETADATA_TEXTENCODING_ASCII   0
00441 #define PLANKAUDIOFILEMETADATA_TEXTENCODING_UTF8    1
00442 #define PLANKAUDIOFILEMETADATA_TEXTENCODING_UTF16   2
00443 #define PLANKAUDIOFILEMETADATA_TEXTENCODING_LATIN1  0
00444 
00445 //#define PLANKAUDIOFILEMETADATA_UNSET  INT_MIN
00446 
00447 #define PLANKAUDIOFILEMETADATA_IOFLAGS_NONE                 0x00000000
00448 #define PLANKAUDIOFILEMETADATA_IOFLAGS_CUEPOINTS            0x00000001
00449 #define PLANKAUDIOFILEMETADATA_IOFLAGS_REGIONS              0x00000002
00450 #define PLANKAUDIOFILEMETADATA_IOFLAGS_LOOPS                0x00000004
00451 #define PLANKAUDIOFILEMETADATA_IOFLAGS_TEXT                 0x00000008
00452 #define PLANKAUDIOFILEMETADATA_IOFLAGS_SAMPLER              0x00000010
00453 #define PLANKAUDIOFILEMETADATA_IOFLAGS_EXTRASAMPLERDATA     0x00000020
00454 #define PLANKAUDIOFILEMETADATA_IOFLAGS_INFO                 0x00000100
00455 #define PLANKAUDIOFILEMETADATA_IOFLAGS_NORMAL               0x0000013F
00456 
00457 #define PLANKAUDIOFILEMETADATA_IOFLAGS_OVERVIEW             0x00001000
00458 #define PLANKAUDIOFILEMETADATA_IOFLAGS_CUSTOM               0x80000000
00459 #define PLANKAUDIOFILEMETADATA_IOFLAGS_ALL                  0xFFFFFFFF
00460 
00461 typedef PlankUI PlankAudioFileMetaDataIOFlags;
00462 
00463 #define PLANKAUDIOFILE_CUEPOINTTYPE_UNKNOWN        -1
00464 #define PLANKAUDIOFILE_CUEPOINTTYPE_CUEPOINT        0
00465 #define PLANKAUDIOFILE_CUEPOINTTYPE_INSERTPOINT     1
00466 #define PLANKAUDIOFILE_CUEPOINTTYPE_PLAYPOSITION    2
00467 #define PLANKAUDIOFILE_CUEPOINTTYPE_REGIONSTART     3
00468 #define PLANKAUDIOFILE_CUEPOINTTYPE_REGIONEND       4
00469 
00470 #define PLANKAUDIOFILE_REGIONTYPE_UNKNOWN          -1
00471 #define PLANKAUDIOFILE_REGIONTYPE_REGION            0
00472 #define PLANKAUDIOFILE_REGIONTYPE_SELECTION         1
00473 #define PLANKAUDIOFILE_REGIONTYPE_LOOP              2
00474 #define PLANKAUDIOFILE_REGIONTYPE_LYRICS            3
00475 
00476 #define PLANKAUDIOFILE_WAV_LOOPTYPE_FORWARD         0
00477 #define PLANKAUDIOFILE_WAV_LOOPTYPE_PINGPONG        1
00478 #define PLANKAUDIOFILE_WAV_LOOPTYPE_REVERESE        2
00479 
00480 #define PLANKAUDIOFILE_LOOPTYPE_UNKNOWN            -1
00481 #define PLANKAUDIOFILE_LOOPTYPE_FORWARD             PLANKAUDIOFILE_WAV_LOOPTYPE_FORWARD
00482 #define PLANKAUDIOFILE_LOOPTYPE_PINGPONG            PLANKAUDIOFILE_WAV_LOOPTYPE_PINGPONG
00483 #define PLANKAUDIOFILE_LOOPTYPE_REVERESE            PLANKAUDIOFILE_WAV_LOOPTYPE_REVERESE
00484 
00485 #define PLANKAUDIOFILE_AIFF_LOOPTYPE_NOLOOP         0 
00486 #define PLANKAUDIOFILE_AIFF_LOOPTYPE_FORWARD        1 
00487 #define PLANKAUDIOFILE_AIFF_LOOPTYPE_PINGPONG       2
00488 
00489 #define PLANKAUDIOFILE_REGIONNAME_SEPARATOR         "#"
00490 
00491 
00492 #if PLANK_OGGVORBIS
00493     #ifndef OV_EXCLUDE_STATIC_CALLBACKS
00494         #define OV_EXCLUDE_STATIC_CALLBACKS
00495     #endif
00496 
00497     #include "../../../../ext/vorbis/vorbis/vorbisenc.h"
00498     #include "../../../../ext/vorbis/vorbis/codec.h"
00499     #include "../../../../ext/vorbis/vorbis/vorbisfile.h"
00500 #endif
00501 
00502 #if PLANK_OPUS
00503     #include "../../../../ext/ogg/ogg.h"
00504     #include "../../../../ext/opus/opusfile/opusfile.h"
00505     #include "../../../../ext/opus/opus_header.h"
00506     #define PLANKAUDIOFILE_OPUS_VENDOR    "libopus 1.01 in Plank " PLANK_VERSION
00507     #define PLANKAUDIOFILE_OPUS_MAXFRAMESIZE                           (960 * 6)
00508     #define PLANKAUDIOFILE_OPUS_MAXPACKETSIZE                     (1275 * 3 + 7)
00509     #define PLANKAUDIOFILE_OPUS_MAXSEGMENTS                                  255
00510     #define PLANKAUDIOFILE_OPUS_FLUSHFILLSIZE                        (255 * 255)
00511     #define PLANKAUDIOFILE_OPUS_DELAY                                        312
00512     #define PLANKAUDIOFILE_OPUS_READBYTES                                    200
00513     #define PLANKAUDIOFILE_OPUS_MINSAMPLERATE                               8000
00514     #define PLANKAUDIOFILE_OPUS_MAXSAMPLERATE                             192000
00515     #define PLANKAUDIOFILE_OPUS_DEFAULTSAMPLERATE                          48000
00516     #define PLANKAUDIOFILE_OPUS_HEAD                                  "OpusHead"
00517     #define PLANKAUDIOFILE_OPUS_TAGS                                  "OpusTags"
00518     #define PLANKAUDIOFILE_OPUS_HEAD_LEN                                       8
00519     #define PLANKAUDIOFILE_OPUS_PREROLL_MS                                    80
00520     #define PLANKAUDIOFILE_OPUS_HEADERNUMSEGSPOS                              26
00521 #endif
00522 
00523 
00524 #define PLANKAUDIOFILE_CHANNELFLAGS_ALLOFF                  0
00525 #define PLANKAUDIOFILE_CHANNELFLAGS_RECTANGULARCOORDINATES  (1<<0)
00526 #define PLANKAUDIOFILE_CHANNELFLAGS_SPHERICALCOORDINATES    (1<<1)
00527 #define PLANKAUDIOFILE_CHANNELFLAGS_METERS                  (1<<2)
00528 
00529 typedef struct PlankSpeakerPosition
00530 {
00531     PlankUI flags;
00532     PlankVec3F coords;
00533 } PlankSpeakerPosition;
00534 
00535 typedef struct PlankAudioFileFormatInfo
00536 {
00537     PlankC format;
00538     PlankC encoding;
00539     
00540     PlankI bitsPerSample;
00541     PlankI bytesPerFrame;
00542     PlankI minimumBitRate;
00543     PlankI maximumBitRate;
00544     PlankI nominalBitRate;
00545     PlankD sampleRate;
00546     PlankD frameDuration;
00547     PlankF quality;
00548     
00549     PlankChannelLayout channelLayout;
00550     PlankDynamicArray channelIdentifiers;
00551     PlankDynamicArray channelCoords;
00552     
00553 } PlankAudioFileFormatInfo;
00554 
00555 typedef struct PlankAudioFileFormatInfo* PlankAudioFileFormatInfoRef;
00556 
00557 //PlankB pl_AudioFileFormatInfo_IsChannelMapClear (const PlankAudioFileFormatInfo* info);
00558 
00559 PLANK_BEGIN_C_LINKAGE
00560 
00561 const char* pl_PlankAudioFileGetFormatName (int format);
00562 
00563 PlankResult pl_AudioFileFormatInfo_Init (PlankAudioFileFormatInfoRef formatInfo);
00564 PlankResult pl_AudioFileFormatInfo_DeInit (PlankAudioFileFormatInfoRef formatInfo);
00565 PlankChannelIdentifier* pl_AudioFileFormatInfo_GetChannelIdentifiers (PlankAudioFileFormatInfoRef formatInfo);
00566 PlankSpeakerPosition* pl_AudioFileFormatInfo_GetChannelCoords (PlankAudioFileFormatInfoRef formatInfo);
00567 PlankChannelIdentifier pl_AudioFileFormatInfo_GetChannelItentifier (PlankAudioFileFormatInfoRef formatInfo, const int channel);
00568 PlankResult pl_AudioFileFormatInfo_SetChannelItentifier (PlankAudioFileFormatInfoRef formatInfo, const int channel, const PlankChannelIdentifier channelIdentifier);
00569 PlankChannelLayout pl_AudioFileFormatInfo_GetChannelLayout (PlankAudioFileFormatInfoRef formatInfo);
00570 int pl_AudioFileFormatInfo_GetNumChannels (PlankAudioFileFormatInfoRef formatInfo);
00571 PlankResult pl_AudioFileFormatInfo_SetNumChannels (PlankAudioFileFormatInfoRef formatInfo, const int numChannels, const PlankB useCoords);
00572 void pl_AudioFileFormatInfo_CAF_ChannelMaskToFormat (PlankAudioFileFormatInfoRef formatInfo, const PlankUI channelMask);
00573 void pl_AudioFileFormatInfo_WAV_ChannelMaskToFormat (PlankAudioFileFormatInfoRef formatInfo, const PlankUI channelMask);
00574 const char* pl_AudioFileFormatInfoDiscreteIndexToName (const PlankUS discreteIndex);
00575 const char* pl_AudioFileFormatInfoChannelIdentifierToName (const PlankChannelIdentifier identifier);
00576 char* pl_AudioFileFormatInfoAbbreviateIdentifierName (const char* name, char* abbrev, const int abbrevLength);
00577 const char* pl_AudioFileFormatInfoChannelLayoutToName (const PlankChannelLayout channelLayoutTag);
00578 PlankB pl_AudioFileFormatInfoLayoutToFormatChannelIdentifiers (PlankChannelIdentifier* channelIdentifiers, const PlankChannelLayout channelLayoutTag);
00579 PlankB pl_AudioFileFormatInfo_LayoutToFormatChannelIdentifiers (PlankAudioFileFormatInfoRef formatInfo, const PlankChannelLayout channelLayoutTag);
00580 PlankB pl_AudioFileFormatInfo_ChannelIdentifiersMatchesLayout (PlankAudioFileFormatInfoRef formatInfo, const PlankChannelLayout channelLayoutTag);
00581 PlankChannelLayout pl_AudioFileFormatInfo_ChannelIdentifiersToLayout (PlankAudioFileFormatInfoRef formatInfo);
00582 PlankB pl_AudioFileFormatInfoChannelIdentifiersArePair (const PlankChannelIdentifier A, const PlankChannelIdentifier B);
00583 void pl_AudioFileFormatInfo_SetDiscreteLayout (PlankAudioFileFormatInfoRef formatInfo);
00584 void pl_AudioFileFormatInfo_SetSimpleLayout (PlankAudioFileFormatInfoRef formatInfo);
00585 void pl_AudioFileFormatInfo_WAV_SetDefaultLayout (PlankAudioFileFormatInfoRef formatInfo);
00586 void pl_AudioFileFormatInfo_AIFF_SetDefaultLayout (PlankAudioFileFormatInfoRef formatInfo);
00587 void pl_AudioFileFormatInfo_OggVorbis_SetDefaultLayout (PlankAudioFileFormatInfoRef formatInfo);
00588 void pl_AudioFileFormatInfo_Opus_SetDefaultLayout (PlankAudioFileFormatInfoRef formatInfo);
00589 
00590 PLANK_END_C_LINKAGE
00591 
00593 typedef struct PlankAudioFileMetaData* PlankAudioFileMetaDataRef;
00594 
00596 typedef struct PlankAudioFileCuePointExtra* PlankAudioFileCuePointExtraRef;
00597 
00599 typedef struct PlankAudioFileCuePoint* PlankAudioFileCuePointRef;
00600 
00602 typedef struct PlankAudioFileRegion* PlankAudioFileRegionRef;
00603 
00604 
00605 
00606 #endif // PLANK_AUDIOFILECOMMON_H
 All Classes Functions Typedefs Enumerations Enumerator Properties