Cog Audio: Resampler now extrapolates into latency padding for better gapless playback

CQTexperiment
Christopher Snowhill 2022-01-11 18:19:30 -08:00
parent 7d4841b1c6
commit ed882e25cb
4 changed files with 681 additions and 304 deletions

View File

@ -13,6 +13,8 @@
#import <audio/conversion/s16_to_float.h>
#import <audio/conversion/s32_to_float.h>
#import "lpc.h"
void PrintStreamDesc (AudioStreamBasicDescription *inDesc)
{
if (!inDesc) {
@ -368,6 +370,32 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
}
}
static const int extrapolate_order = 16;
static void extrapolate(float *buffer, size_t channels, size_t frameSize, size_t size, BOOL backward)
{
const size_t delta = (backward ? -1 : 1) * channels;
float lpc[extrapolate_order];
float work[frameSize];
for (size_t ch = 0; ch < channels; ch++)
{
if (frameSize - size > extrapolate_order * 2)
{
float *chPcmBuf = buffer + ch + (backward ? frameSize : -1) * channels;
for (size_t i = 0; i < frameSize; i++) work[i] = *(chPcmBuf += delta);
vorbis_lpc_from_data(work, lpc, (int)(frameSize - size), extrapolate_order);
vorbis_lpc_predict(lpc, work + frameSize - size - extrapolate_order, extrapolate_order, work + frameSize - size, size);
chPcmBuf = buffer + ch + (backward ? frameSize : -1) * channels;
for (size_t i = 0; i < frameSize; i++) *(chPcmBuf += delta) = work[i];
}
}
}
-(void)process
{
char writeBuf[CHUNK_SIZE];
@ -384,7 +412,11 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
UInt32 ioNumberPackets;
int amountReadFromFC;
int amountRead = 0;
int extrapolateStart = 0;
int extrapolateEnd = 0;
size_t amountToSkip = 0;
BOOL inputRetry = NO;
if (emittingSilence)
{
memset(dest, 0, amount);
@ -416,6 +448,9 @@ tryagain:
if (!inputBuffer || inputBufferSize < newSize)
inputBuffer = realloc( inputBuffer, inputBufferSize = newSize * 3 );
// Pad end of track with floats. For simplicity, pad start in track
// native format.
if (stopping || [self shouldContinue] == NO || [self endOfStream] == YES)
{
if (!skipResampler && !latencyPostfill)
@ -425,6 +460,12 @@ tryagain:
if (!inputBuffer || inputBufferSize < newSize)
inputBuffer = realloc( inputBuffer, inputBufferSize = newSize * 64);
extrapolateEnd = ioNumberPackets;
// Extrapolate end samples
if (inpSize)
extrapolate( inputBuffer, floatFormat.mChannelsPerFrame, inpSize / floatFormat.mBytesPerPacket, extrapolateEnd, NO);
inpSize = newSize;
inpOffset = 0;
latencyPostfill = YES;
@ -438,13 +479,17 @@ tryagain:
}
size_t amountToWrite = ioNumberPackets * inputFormat.mBytesPerPacket;
size_t amountToSkip = 0;
if (!inputRetry) amountToSkip = 0;
BOOL isFloat = !!(inputFormat.mFormatFlags & kAudioFormatFlagIsFloat);
BOOL isUnsigned = !isFloat && !(inputFormat.mFormatFlags & kAudioFormatFlagIsSignedInteger);
if (!skipResampler)
{
if (latencyStarted < 0)
{
latencyStarted = resampler->latency(resampler_data);
extrapolateStart = (int)latencyStarted;
}
if (latencyStarted)
@ -452,8 +497,8 @@ tryagain:
size_t latencyToWrite = latencyStarted * inputFormat.mBytesPerPacket;
if (latencyToWrite > amountToWrite)
latencyToWrite = amountToWrite;
if (inputFormat.mBitsPerChannel <= 8)
if (isUnsigned)
memset(inputBuffer, 0x80, latencyToWrite);
else
memset(inputBuffer, 0, latencyToWrite);
@ -467,9 +512,15 @@ tryagain:
}
}
size_t bytesReadFromInput = [self readData:inputBuffer + amountToSkip amount:(int)amountToWrite] + amountToSkip;
size_t bytesReadFromInput = [self readData:inputBuffer + amountToSkip amount:(int)amountToWrite];
BOOL isFloat = !!(inputFormat.mFormatFlags & kAudioFormatFlagIsFloat);
if (!bytesReadFromInput)
{
inputRetry = YES;
continue;
}
bytesReadFromInput += amountToSkip;
if (bytesReadFromInput &&
(inputFormat.mFormatFlags & kAudioFormatFlagIsBigEndian))
@ -490,7 +541,6 @@ tryagain:
if (bytesReadFromInput && !isFloat)
{
size_t bitsPerSample = inputFormat.mBitsPerChannel;
BOOL isUnsigned = !(inputFormat.mFormatFlags & kAudioFormatFlagIsSignedInteger);
if (bitsPerSample <= 8) {
samplesRead = bytesReadFromInput;
if (isUnsigned)
@ -537,6 +587,13 @@ tryagain:
}
}
// Extrapolate start
if (extrapolateStart)
{
extrapolate( inputBuffer, floatFormat.mChannelsPerFrame, bytesReadFromInput / floatFormat.mBytesPerPacket, extrapolateStart, YES);
extrapolateStart = 0;
}
// Input now contains bytesReadFromInput worth of floats, in the input sample rate
inpSize = bytesReadFromInput;
inpOffset = 0;

View File

@ -43,56 +43,58 @@
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; };
17F94DD60B8D0F7000A34E87 /* PluginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.m */; };
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
832BEE90278D40F7005E1BC4 /* features_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE8F278D40F7005E1BC4 /* features_cpu.c */; };
832BEE92278D4109005E1BC4 /* s16_to_float.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE91278D4109005E1BC4 /* s16_to_float.c */; };
832BEE94278D412D005E1BC4 /* audio_resampler.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE93278D412D005E1BC4 /* audio_resampler.c */; };
832BEE96278D414A005E1BC4 /* sinc_resampler.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE95278D414A005E1BC4 /* sinc_resampler.c */; };
832BEE98278D4462005E1BC4 /* config_file_userdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE97278D4462005E1BC4 /* config_file_userdata.c */; };
832BEE9A278D4473005E1BC4 /* memalign.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE99278D4473005E1BC4 /* memalign.c */; };
832BEE9C278D451D005E1BC4 /* config_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE9B278D451D005E1BC4 /* config_file.c */; };
832BEE9E278D452C005E1BC4 /* string_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE9D278D452C005E1BC4 /* string_list.c */; };
832BEEA0278D460F005E1BC4 /* file_stream.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEE9F278D460F005E1BC4 /* file_stream.c */; };
832BEEA2278D464B005E1BC4 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEA1278D464B005E1BC4 /* config.h */; };
832BEEA4278D469D005E1BC4 /* file_path.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEA3278D469D005E1BC4 /* file_path.c */; };
832BEEA6278D4755005E1BC4 /* vfs_implementation.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEA5278D4755005E1BC4 /* vfs_implementation.c */; };
832BEEA8278D47F0005E1BC4 /* stdstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEA7278D47F0005E1BC4 /* stdstring.c */; };
832BEEAA278D47FB005E1BC4 /* file_path_io.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEA9278D47FB005E1BC4 /* file_path_io.c */; };
832BEEAC278D4848005E1BC4 /* encoding_utf.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEAB278D4848005E1BC4 /* encoding_utf.c */; };
832BEEAE278D4853005E1BC4 /* rtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEAD278D4853005E1BC4 /* rtime.c */; };
832BEEB0278D48C1005E1BC4 /* s32_to_float.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BEEAF278D48C1005E1BC4 /* s32_to_float.c */; };
832BEEDD278D4A32005E1BC4 /* utf.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEB3278D4A32005E1BC4 /* utf.h */; };
832BEEDE278D4A32005E1BC4 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEB4278D4A32005E1BC4 /* memalign.h */; };
832BEEDF278D4A32005E1BC4 /* vfs.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEB6278D4A32005E1BC4 /* vfs.h */; };
832BEEE0278D4A32005E1BC4 /* vfs_implementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEB7278D4A32005E1BC4 /* vfs_implementation.h */; };
832BEEE1278D4A32005E1BC4 /* strl.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEB9278D4A32005E1BC4 /* strl.h */; };
832BEEE2278D4A32005E1BC4 /* strcasestr.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBA278D4A32005E1BC4 /* strcasestr.h */; };
832BEEE3278D4A32005E1BC4 /* fopen_utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBB278D4A32005E1BC4 /* fopen_utf8.h */; };
832BEEE4278D4A32005E1BC4 /* posix_string.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBC278D4A32005E1BC4 /* posix_string.h */; };
832BEEE5278D4A32005E1BC4 /* msvc.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBD278D4A32005E1BC4 /* msvc.h */; };
832BEEE6278D4A32005E1BC4 /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBE278D4A32005E1BC4 /* retro_common_api.h */; };
832BEEE7278D4A32005E1BC4 /* retro_timers.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEBF278D4A32005E1BC4 /* retro_timers.h */; };
832BEEE8278D4A32005E1BC4 /* string_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC1278D4A32005E1BC4 /* string_list.h */; };
832BEEE9278D4A32005E1BC4 /* config_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC3278D4A32005E1BC4 /* config_file.h */; };
832BEEEA278D4A32005E1BC4 /* config_file_userdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC4278D4A32005E1BC4 /* config_file_userdata.h */; };
832BEEEB278D4A32005E1BC4 /* file_path.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC5278D4A32005E1BC4 /* file_path.h */; };
832BEEEC278D4A32005E1BC4 /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC6278D4A32005E1BC4 /* retro_environment.h */; };
832BEEED278D4A32005E1BC4 /* rhmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC8278D4A32005E1BC4 /* rhmap.h */; };
832BEEEE278D4A32005E1BC4 /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEC9278D4A32005E1BC4 /* retro_inline.h */; };
832BEEEF278D4A32005E1BC4 /* retro_math.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEECA278D4A32005E1BC4 /* retro_math.h */; };
832BEEF0278D4A32005E1BC4 /* file_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEECC278D4A32005E1BC4 /* file_stream.h */; };
832BEEF1278D4A32005E1BC4 /* features_cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEECE278D4A32005E1BC4 /* features_cpu.h */; };
832BEEF2278D4A32005E1BC4 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEECF278D4A32005E1BC4 /* retro_miscellaneous.h */; };
832BEEF3278D4A32005E1BC4 /* rtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED1278D4A32005E1BC4 /* rtime.h */; };
832BEEF4278D4A32005E1BC4 /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED2278D4A32005E1BC4 /* boolean.h */; };
832BEEF5278D4A32005E1BC4 /* audio_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED4278D4A32005E1BC4 /* audio_resampler.h */; };
832BEEF6278D4A32005E1BC4 /* s16_to_float.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED6278D4A32005E1BC4 /* s16_to_float.h */; };
832BEEF7278D4A32005E1BC4 /* s32_to_float.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED7278D4A32005E1BC4 /* s32_to_float.h */; };
832BEEF8278D4A32005E1BC4 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED8278D4A32005E1BC4 /* libretro.h */; };
832BEEF9278D4A32005E1BC4 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEED9278D4A32005E1BC4 /* retro_assert.h */; };
832BEEFA278D4A32005E1BC4 /* stdstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEDB278D4A32005E1BC4 /* stdstring.h */; };
832BEEFB278D4A32005E1BC4 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BEEDC278D4A32005E1BC4 /* filters.h */; };
832BEF04278DD06D005E1BC4 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 832BEF03278DD06D005E1BC4 /* AVFoundation.framework */; };
8384912718080FF100E7332D /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 8384912618080FF100E7332D /* Logging.h */; };
8389F270278E64590074164C /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F225278E64590074164C /* config.h */; };
8389F271278E64590074164C /* encoding_utf.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F228278E64590074164C /* encoding_utf.c */; };
8389F272278E64590074164C /* vfs_implementation.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F22A278E64590074164C /* vfs_implementation.c */; };
8389F273278E64590074164C /* string_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F22C278E64590074164C /* string_list.c */; };
8389F274278E64590074164C /* file_path_io.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F22E278E64590074164C /* file_path_io.c */; };
8389F275278E64590074164C /* file_path.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F22F278E64590074164C /* file_path.c */; };
8389F276278E64590074164C /* config_file_userdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F230278E64590074164C /* config_file_userdata.c */; };
8389F277278E64590074164C /* config_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F231278E64590074164C /* config_file.c */; };
8389F278278E64590074164C /* file_stream.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F233278E64590074164C /* file_stream.c */; };
8389F279278E64590074164C /* utf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F236278E64590074164C /* utf.h */; };
8389F27A278E64590074164C /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F237278E64590074164C /* memalign.h */; };
8389F27B278E64590074164C /* vfs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F239278E64590074164C /* vfs.h */; };
8389F27C278E64590074164C /* vfs_implementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F23A278E64590074164C /* vfs_implementation.h */; };
8389F27D278E64590074164C /* strl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F23C278E64590074164C /* strl.h */; };
8389F27E278E64590074164C /* strcasestr.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F23D278E64590074164C /* strcasestr.h */; };
8389F27F278E64590074164C /* fopen_utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F23E278E64590074164C /* fopen_utf8.h */; };
8389F280278E64590074164C /* posix_string.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F23F278E64590074164C /* posix_string.h */; };
8389F281278E64590074164C /* msvc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F240278E64590074164C /* msvc.h */; };
8389F282278E64590074164C /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F241278E64590074164C /* retro_common_api.h */; };
8389F283278E64590074164C /* retro_timers.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F242278E64590074164C /* retro_timers.h */; };
8389F284278E64590074164C /* string_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F244278E64590074164C /* string_list.h */; };
8389F285278E64590074164C /* config_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F246278E64590074164C /* config_file.h */; };
8389F286278E64590074164C /* config_file_userdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F247278E64590074164C /* config_file_userdata.h */; };
8389F287278E64590074164C /* file_path.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F248278E64590074164C /* file_path.h */; };
8389F288278E64590074164C /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F249278E64590074164C /* retro_environment.h */; };
8389F289278E64590074164C /* rhmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F24B278E64590074164C /* rhmap.h */; };
8389F28A278E64590074164C /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F24C278E64590074164C /* retro_inline.h */; };
8389F28B278E64590074164C /* retro_math.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F24D278E64590074164C /* retro_math.h */; };
8389F28C278E64590074164C /* file_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F24F278E64590074164C /* file_stream.h */; };
8389F28D278E64590074164C /* features_cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F251278E64590074164C /* features_cpu.h */; };
8389F28E278E64590074164C /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F252278E64590074164C /* retro_miscellaneous.h */; };
8389F28F278E64590074164C /* rtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F254278E64590074164C /* rtime.h */; };
8389F290278E64590074164C /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F255278E64590074164C /* boolean.h */; };
8389F291278E64590074164C /* audio_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F257278E64590074164C /* audio_resampler.h */; };
8389F292278E64590074164C /* s16_to_float.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F259278E64590074164C /* s16_to_float.h */; };
8389F293278E64590074164C /* s32_to_float.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F25A278E64590074164C /* s32_to_float.h */; };
8389F294278E64590074164C /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F25B278E64590074164C /* libretro.h */; };
8389F295278E64590074164C /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F25C278E64590074164C /* retro_assert.h */; };
8389F296278E64590074164C /* stdstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F25E278E64590074164C /* stdstring.h */; };
8389F297278E64590074164C /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F25F278E64590074164C /* filters.h */; };
8389F298278E64590074164C /* features_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F261278E64590074164C /* features_cpu.c */; };
8389F299278E64590074164C /* memalign.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F263278E64590074164C /* memalign.c */; };
8389F29A278E64590074164C /* rtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F265278E64590074164C /* rtime.c */; };
8389F29B278E64590074164C /* sinc_resampler.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F269278E64590074164C /* sinc_resampler.c */; };
8389F29C278E64590074164C /* audio_resampler.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F26A278E64590074164C /* audio_resampler.c */; };
8389F29D278E64590074164C /* s16_to_float.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F26C278E64590074164C /* s16_to_float.c */; };
8389F29E278E64590074164C /* s32_to_float.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F26D278E64590074164C /* s32_to_float.c */; };
8389F29F278E64590074164C /* stdstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F26F278E64590074164C /* stdstring.c */; };
8389F2A3278E646E0074164C /* lpc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8389F2A1278E646E0074164C /* lpc.h */; };
8389F2A4278E646E0074164C /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8389F2A2278E646E0074164C /* lpc.c */; };
839366671815923C006DD712 /* CogPluginMulti.h in Headers */ = {isa = PBXBuildFile; fileRef = 839366651815923C006DD712 /* CogPluginMulti.h */; };
839366681815923C006DD712 /* CogPluginMulti.m in Sources */ = {isa = PBXBuildFile; fileRef = 839366661815923C006DD712 /* CogPluginMulti.m */; };
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
@ -157,56 +159,58 @@
17F94DD40B8D0F7000A34E87 /* PluginController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PluginController.m; sourceTree = "<group>"; };
17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = "<group>"; };
832BEE8F278D40F7005E1BC4 /* features_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = features_cpu.c; path = "../ThirdParty/RetroArch/libretro-common/features/features_cpu.c"; sourceTree = "<group>"; };
832BEE91278D4109005E1BC4 /* s16_to_float.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = s16_to_float.c; path = "../ThirdParty/RetroArch/libretro-common/audio/conversion/s16_to_float.c"; sourceTree = "<group>"; };
832BEE93278D412D005E1BC4 /* audio_resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = audio_resampler.c; path = "../ThirdParty/RetroArch/libretro-common/audio/resampler/audio_resampler.c"; sourceTree = "<group>"; };
832BEE95278D414A005E1BC4 /* sinc_resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sinc_resampler.c; path = "../ThirdParty/RetroArch/libretro-common/audio/resampler/drivers/sinc_resampler.c"; sourceTree = "<group>"; };
832BEE97278D4462005E1BC4 /* config_file_userdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = config_file_userdata.c; path = "../ThirdParty/RetroArch/libretro-common/file/config_file_userdata.c"; sourceTree = "<group>"; };
832BEE99278D4473005E1BC4 /* memalign.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memalign.c; path = "../ThirdParty/RetroArch/libretro-common/memmap/memalign.c"; sourceTree = "<group>"; };
832BEE9B278D451D005E1BC4 /* config_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = config_file.c; path = "../ThirdParty/RetroArch/libretro-common/file/config_file.c"; sourceTree = "<group>"; };
832BEE9D278D452C005E1BC4 /* string_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = string_list.c; path = "../ThirdParty/RetroArch/libretro-common/lists/string_list.c"; sourceTree = "<group>"; };
832BEE9F278D460F005E1BC4 /* file_stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file_stream.c; path = "../ThirdParty/RetroArch/libretro-common/streams/file_stream.c"; sourceTree = "<group>"; };
832BEEA1278D464B005E1BC4 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../ThirdParty/RetroArch/config.h; sourceTree = "<group>"; };
832BEEA3278D469D005E1BC4 /* file_path.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file_path.c; path = "../ThirdParty/RetroArch/libretro-common/file/file_path.c"; sourceTree = "<group>"; };
832BEEA5278D4755005E1BC4 /* vfs_implementation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vfs_implementation.c; path = "../ThirdParty/RetroArch/libretro-common/vfs/vfs_implementation.c"; sourceTree = "<group>"; };
832BEEA7278D47F0005E1BC4 /* stdstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stdstring.c; path = "../ThirdParty/RetroArch/libretro-common/string/stdstring.c"; sourceTree = "<group>"; };
832BEEA9278D47FB005E1BC4 /* file_path_io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file_path_io.c; path = "../ThirdParty/RetroArch/libretro-common/file/file_path_io.c"; sourceTree = "<group>"; };
832BEEAB278D4848005E1BC4 /* encoding_utf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = encoding_utf.c; path = "../ThirdParty/RetroArch/libretro-common/encodings/encoding_utf.c"; sourceTree = "<group>"; };
832BEEAD278D4853005E1BC4 /* rtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rtime.c; path = "../ThirdParty/RetroArch/libretro-common/time/rtime.c"; sourceTree = "<group>"; };
832BEEAF278D48C1005E1BC4 /* s32_to_float.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = s32_to_float.c; path = "../ThirdParty/RetroArch/libretro-common/audio/conversion/s32_to_float.c"; sourceTree = "<group>"; };
832BEEB3278D4A32005E1BC4 /* utf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = "<group>"; };
832BEEB4278D4A32005E1BC4 /* memalign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memalign.h; sourceTree = "<group>"; };
832BEEB6278D4A32005E1BC4 /* vfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vfs.h; sourceTree = "<group>"; };
832BEEB7278D4A32005E1BC4 /* vfs_implementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vfs_implementation.h; sourceTree = "<group>"; };
832BEEB9278D4A32005E1BC4 /* strl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strl.h; sourceTree = "<group>"; };
832BEEBA278D4A32005E1BC4 /* strcasestr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strcasestr.h; sourceTree = "<group>"; };
832BEEBB278D4A32005E1BC4 /* fopen_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fopen_utf8.h; sourceTree = "<group>"; };
832BEEBC278D4A32005E1BC4 /* posix_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = posix_string.h; sourceTree = "<group>"; };
832BEEBD278D4A32005E1BC4 /* msvc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msvc.h; sourceTree = "<group>"; };
832BEEBE278D4A32005E1BC4 /* retro_common_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = "<group>"; };
832BEEBF278D4A32005E1BC4 /* retro_timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_timers.h; sourceTree = "<group>"; };
832BEEC1278D4A32005E1BC4 /* string_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_list.h; sourceTree = "<group>"; };
832BEEC3278D4A32005E1BC4 /* config_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_file.h; sourceTree = "<group>"; };
832BEEC4278D4A32005E1BC4 /* config_file_userdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_file_userdata.h; sourceTree = "<group>"; };
832BEEC5278D4A32005E1BC4 /* file_path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_path.h; sourceTree = "<group>"; };
832BEEC6278D4A32005E1BC4 /* retro_environment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = "<group>"; };
832BEEC8278D4A32005E1BC4 /* rhmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rhmap.h; sourceTree = "<group>"; };
832BEEC9278D4A32005E1BC4 /* retro_inline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = "<group>"; };
832BEECA278D4A32005E1BC4 /* retro_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_math.h; sourceTree = "<group>"; };
832BEECC278D4A32005E1BC4 /* file_stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_stream.h; sourceTree = "<group>"; };
832BEECE278D4A32005E1BC4 /* features_cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features_cpu.h; sourceTree = "<group>"; };
832BEECF278D4A32005E1BC4 /* retro_miscellaneous.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_miscellaneous.h; sourceTree = "<group>"; };
832BEED1278D4A32005E1BC4 /* rtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtime.h; sourceTree = "<group>"; };
832BEED2278D4A32005E1BC4 /* boolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = "<group>"; };
832BEED4278D4A32005E1BC4 /* audio_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_resampler.h; sourceTree = "<group>"; };
832BEED6278D4A32005E1BC4 /* s16_to_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = s16_to_float.h; sourceTree = "<group>"; };
832BEED7278D4A32005E1BC4 /* s32_to_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = s32_to_float.h; sourceTree = "<group>"; };
832BEED8278D4A32005E1BC4 /* libretro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = "<group>"; };
832BEED9278D4A32005E1BC4 /* retro_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = "<group>"; };
832BEEDB278D4A32005E1BC4 /* stdstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdstring.h; sourceTree = "<group>"; };
832BEEDC278D4A32005E1BC4 /* filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = "<group>"; };
832BEF03278DD06D005E1BC4 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
8384912618080FF100E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = "<group>"; };
8389F225278E64590074164C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
8389F228278E64590074164C /* encoding_utf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encoding_utf.c; sourceTree = "<group>"; };
8389F22A278E64590074164C /* vfs_implementation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vfs_implementation.c; sourceTree = "<group>"; };
8389F22C278E64590074164C /* string_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = string_list.c; sourceTree = "<group>"; };
8389F22E278E64590074164C /* file_path_io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = file_path_io.c; sourceTree = "<group>"; };
8389F22F278E64590074164C /* file_path.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = file_path.c; sourceTree = "<group>"; };
8389F230278E64590074164C /* config_file_userdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = config_file_userdata.c; sourceTree = "<group>"; };
8389F231278E64590074164C /* config_file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = config_file.c; sourceTree = "<group>"; };
8389F233278E64590074164C /* file_stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = file_stream.c; sourceTree = "<group>"; };
8389F236278E64590074164C /* utf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = "<group>"; };
8389F237278E64590074164C /* memalign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memalign.h; sourceTree = "<group>"; };
8389F239278E64590074164C /* vfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vfs.h; sourceTree = "<group>"; };
8389F23A278E64590074164C /* vfs_implementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vfs_implementation.h; sourceTree = "<group>"; };
8389F23C278E64590074164C /* strl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strl.h; sourceTree = "<group>"; };
8389F23D278E64590074164C /* strcasestr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strcasestr.h; sourceTree = "<group>"; };
8389F23E278E64590074164C /* fopen_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fopen_utf8.h; sourceTree = "<group>"; };
8389F23F278E64590074164C /* posix_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = posix_string.h; sourceTree = "<group>"; };
8389F240278E64590074164C /* msvc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msvc.h; sourceTree = "<group>"; };
8389F241278E64590074164C /* retro_common_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = "<group>"; };
8389F242278E64590074164C /* retro_timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_timers.h; sourceTree = "<group>"; };
8389F244278E64590074164C /* string_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_list.h; sourceTree = "<group>"; };
8389F246278E64590074164C /* config_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_file.h; sourceTree = "<group>"; };
8389F247278E64590074164C /* config_file_userdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_file_userdata.h; sourceTree = "<group>"; };
8389F248278E64590074164C /* file_path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_path.h; sourceTree = "<group>"; };
8389F249278E64590074164C /* retro_environment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = "<group>"; };
8389F24B278E64590074164C /* rhmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rhmap.h; sourceTree = "<group>"; };
8389F24C278E64590074164C /* retro_inline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = "<group>"; };
8389F24D278E64590074164C /* retro_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_math.h; sourceTree = "<group>"; };
8389F24F278E64590074164C /* file_stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_stream.h; sourceTree = "<group>"; };
8389F251278E64590074164C /* features_cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features_cpu.h; sourceTree = "<group>"; };
8389F252278E64590074164C /* retro_miscellaneous.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_miscellaneous.h; sourceTree = "<group>"; };
8389F254278E64590074164C /* rtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtime.h; sourceTree = "<group>"; };
8389F255278E64590074164C /* boolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = "<group>"; };
8389F257278E64590074164C /* audio_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_resampler.h; sourceTree = "<group>"; };
8389F259278E64590074164C /* s16_to_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = s16_to_float.h; sourceTree = "<group>"; };
8389F25A278E64590074164C /* s32_to_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = s32_to_float.h; sourceTree = "<group>"; };
8389F25B278E64590074164C /* libretro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = "<group>"; };
8389F25C278E64590074164C /* retro_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = "<group>"; };
8389F25E278E64590074164C /* stdstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdstring.h; sourceTree = "<group>"; };
8389F25F278E64590074164C /* filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = "<group>"; };
8389F261278E64590074164C /* features_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = features_cpu.c; sourceTree = "<group>"; };
8389F263278E64590074164C /* memalign.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memalign.c; sourceTree = "<group>"; };
8389F265278E64590074164C /* rtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rtime.c; sourceTree = "<group>"; };
8389F269278E64590074164C /* sinc_resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sinc_resampler.c; sourceTree = "<group>"; };
8389F26A278E64590074164C /* audio_resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = audio_resampler.c; sourceTree = "<group>"; };
8389F26C278E64590074164C /* s16_to_float.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s16_to_float.c; sourceTree = "<group>"; };
8389F26D278E64590074164C /* s32_to_float.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s32_to_float.c; sourceTree = "<group>"; };
8389F26F278E64590074164C /* stdstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stdstring.c; sourceTree = "<group>"; };
8389F2A1278E646E0074164C /* lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lpc.h; sourceTree = "<group>"; };
8389F2A2278E646E0074164C /* lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lpc.c; sourceTree = "<group>"; };
839366651815923C006DD712 /* CogPluginMulti.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogPluginMulti.h; sourceTree = "<group>"; };
839366661815923C006DD712 /* CogPluginMulti.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CogPluginMulti.m; sourceTree = "<group>"; };
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
@ -405,163 +409,12 @@
832BEE8E278D40CD005E1BC4 /* ThirdParty */ = {
isa = PBXGroup;
children = (
832BEEB1278D4A32005E1BC4 /* include */,
832BEE93278D412D005E1BC4 /* audio_resampler.c */,
832BEE97278D4462005E1BC4 /* config_file_userdata.c */,
832BEE9B278D451D005E1BC4 /* config_file.c */,
832BEEAB278D4848005E1BC4 /* encoding_utf.c */,
832BEE8F278D40F7005E1BC4 /* features_cpu.c */,
832BEEA9278D47FB005E1BC4 /* file_path_io.c */,
832BEEA3278D469D005E1BC4 /* file_path.c */,
832BEE9F278D460F005E1BC4 /* file_stream.c */,
832BEE99278D4473005E1BC4 /* memalign.c */,
832BEEAD278D4853005E1BC4 /* rtime.c */,
832BEE91278D4109005E1BC4 /* s16_to_float.c */,
832BEEAF278D48C1005E1BC4 /* s32_to_float.c */,
832BEE95278D414A005E1BC4 /* sinc_resampler.c */,
832BEEA7278D47F0005E1BC4 /* stdstring.c */,
832BEE9D278D452C005E1BC4 /* string_list.c */,
832BEEA5278D4755005E1BC4 /* vfs_implementation.c */,
832BEEA1278D464B005E1BC4 /* config.h */,
8389F2A0278E646E0074164C /* Vorbis */,
8389F224278E64590074164C /* RetroArch */,
);
name = ThirdParty;
sourceTree = "<group>";
};
832BEEB1278D4A32005E1BC4 /* include */ = {
isa = PBXGroup;
children = (
832BEEC7278D4A32005E1BC4 /* array */,
832BEED3278D4A32005E1BC4 /* audio */,
832BEED2278D4A32005E1BC4 /* boolean.h */,
832BEEB8278D4A32005E1BC4 /* compat */,
832BEEB2278D4A32005E1BC4 /* encodings */,
832BEECD278D4A32005E1BC4 /* features */,
832BEEC2278D4A32005E1BC4 /* file */,
832BEEDC278D4A32005E1BC4 /* filters.h */,
832BEED8278D4A32005E1BC4 /* libretro.h */,
832BEEC0278D4A32005E1BC4 /* lists */,
832BEEB4278D4A32005E1BC4 /* memalign.h */,
832BEED9278D4A32005E1BC4 /* retro_assert.h */,
832BEEBE278D4A32005E1BC4 /* retro_common_api.h */,
832BEEC6278D4A32005E1BC4 /* retro_environment.h */,
832BEEC9278D4A32005E1BC4 /* retro_inline.h */,
832BEECA278D4A32005E1BC4 /* retro_math.h */,
832BEECF278D4A32005E1BC4 /* retro_miscellaneous.h */,
832BEEBF278D4A32005E1BC4 /* retro_timers.h */,
832BEECB278D4A32005E1BC4 /* streams */,
832BEEDA278D4A32005E1BC4 /* string */,
832BEED0278D4A32005E1BC4 /* time */,
832BEEB5278D4A32005E1BC4 /* vfs */,
);
name = include;
path = "../ThirdParty/RetroArch/libretro-common/include";
sourceTree = "<group>";
};
832BEEB2278D4A32005E1BC4 /* encodings */ = {
isa = PBXGroup;
children = (
832BEEB3278D4A32005E1BC4 /* utf.h */,
);
path = encodings;
sourceTree = "<group>";
};
832BEEB5278D4A32005E1BC4 /* vfs */ = {
isa = PBXGroup;
children = (
832BEEB6278D4A32005E1BC4 /* vfs.h */,
832BEEB7278D4A32005E1BC4 /* vfs_implementation.h */,
);
path = vfs;
sourceTree = "<group>";
};
832BEEB8278D4A32005E1BC4 /* compat */ = {
isa = PBXGroup;
children = (
832BEEB9278D4A32005E1BC4 /* strl.h */,
832BEEBA278D4A32005E1BC4 /* strcasestr.h */,
832BEEBB278D4A32005E1BC4 /* fopen_utf8.h */,
832BEEBC278D4A32005E1BC4 /* posix_string.h */,
832BEEBD278D4A32005E1BC4 /* msvc.h */,
);
path = compat;
sourceTree = "<group>";
};
832BEEC0278D4A32005E1BC4 /* lists */ = {
isa = PBXGroup;
children = (
832BEEC1278D4A32005E1BC4 /* string_list.h */,
);
path = lists;
sourceTree = "<group>";
};
832BEEC2278D4A32005E1BC4 /* file */ = {
isa = PBXGroup;
children = (
832BEEC3278D4A32005E1BC4 /* config_file.h */,
832BEEC4278D4A32005E1BC4 /* config_file_userdata.h */,
832BEEC5278D4A32005E1BC4 /* file_path.h */,
);
path = file;
sourceTree = "<group>";
};
832BEEC7278D4A32005E1BC4 /* array */ = {
isa = PBXGroup;
children = (
832BEEC8278D4A32005E1BC4 /* rhmap.h */,
);
path = array;
sourceTree = "<group>";
};
832BEECB278D4A32005E1BC4 /* streams */ = {
isa = PBXGroup;
children = (
832BEECC278D4A32005E1BC4 /* file_stream.h */,
);
path = streams;
sourceTree = "<group>";
};
832BEECD278D4A32005E1BC4 /* features */ = {
isa = PBXGroup;
children = (
832BEECE278D4A32005E1BC4 /* features_cpu.h */,
);
path = features;
sourceTree = "<group>";
};
832BEED0278D4A32005E1BC4 /* time */ = {
isa = PBXGroup;
children = (
832BEED1278D4A32005E1BC4 /* rtime.h */,
);
path = time;
sourceTree = "<group>";
};
832BEED3278D4A32005E1BC4 /* audio */ = {
isa = PBXGroup;
children = (
832BEED4278D4A32005E1BC4 /* audio_resampler.h */,
832BEED5278D4A32005E1BC4 /* conversion */,
);
path = audio;
sourceTree = "<group>";
};
832BEED5278D4A32005E1BC4 /* conversion */ = {
isa = PBXGroup;
children = (
832BEED6278D4A32005E1BC4 /* s16_to_float.h */,
832BEED7278D4A32005E1BC4 /* s32_to_float.h */,
);
path = conversion;
sourceTree = "<group>";
};
832BEEDA278D4A32005E1BC4 /* string */ = {
isa = PBXGroup;
children = (
832BEEDB278D4A32005E1BC4 /* stdstring.h */,
);
path = string;
sourceTree = "<group>";
};
832BEF02278DD06D005E1BC4 /* Frameworks */ = {
isa = PBXGroup;
children = (
@ -570,6 +423,288 @@
name = Frameworks;
sourceTree = "<group>";
};
8389F224278E64590074164C /* RetroArch */ = {
isa = PBXGroup;
children = (
8389F225278E64590074164C /* config.h */,
8389F226278E64590074164C /* libretro-common */,
);
name = RetroArch;
path = ../ThirdParty/RetroArch;
sourceTree = "<group>";
};
8389F226278E64590074164C /* libretro-common */ = {
isa = PBXGroup;
children = (
8389F227278E64590074164C /* encodings */,
8389F229278E64590074164C /* vfs */,
8389F22B278E64590074164C /* lists */,
8389F22D278E64590074164C /* file */,
8389F232278E64590074164C /* streams */,
8389F234278E64590074164C /* include */,
8389F260278E64590074164C /* features */,
8389F262278E64590074164C /* memmap */,
8389F264278E64590074164C /* time */,
8389F266278E64590074164C /* audio */,
8389F26E278E64590074164C /* string */,
);
path = "libretro-common";
sourceTree = "<group>";
};
8389F227278E64590074164C /* encodings */ = {
isa = PBXGroup;
children = (
8389F228278E64590074164C /* encoding_utf.c */,
);
path = encodings;
sourceTree = "<group>";
};
8389F229278E64590074164C /* vfs */ = {
isa = PBXGroup;
children = (
8389F22A278E64590074164C /* vfs_implementation.c */,
);
path = vfs;
sourceTree = "<group>";
};
8389F22B278E64590074164C /* lists */ = {
isa = PBXGroup;
children = (
8389F22C278E64590074164C /* string_list.c */,
);
path = lists;
sourceTree = "<group>";
};
8389F22D278E64590074164C /* file */ = {
isa = PBXGroup;
children = (
8389F22E278E64590074164C /* file_path_io.c */,
8389F22F278E64590074164C /* file_path.c */,
8389F230278E64590074164C /* config_file_userdata.c */,
8389F231278E64590074164C /* config_file.c */,
);
path = file;
sourceTree = "<group>";
};
8389F232278E64590074164C /* streams */ = {
isa = PBXGroup;
children = (
8389F233278E64590074164C /* file_stream.c */,
);
path = streams;
sourceTree = "<group>";
};
8389F234278E64590074164C /* include */ = {
isa = PBXGroup;
children = (
8389F235278E64590074164C /* encodings */,
8389F237278E64590074164C /* memalign.h */,
8389F238278E64590074164C /* vfs */,
8389F23B278E64590074164C /* compat */,
8389F241278E64590074164C /* retro_common_api.h */,
8389F242278E64590074164C /* retro_timers.h */,
8389F243278E64590074164C /* lists */,
8389F245278E64590074164C /* file */,
8389F249278E64590074164C /* retro_environment.h */,
8389F24A278E64590074164C /* array */,
8389F24C278E64590074164C /* retro_inline.h */,
8389F24D278E64590074164C /* retro_math.h */,
8389F24E278E64590074164C /* streams */,
8389F250278E64590074164C /* features */,
8389F252278E64590074164C /* retro_miscellaneous.h */,
8389F253278E64590074164C /* time */,
8389F255278E64590074164C /* boolean.h */,
8389F256278E64590074164C /* audio */,
8389F25B278E64590074164C /* libretro.h */,
8389F25C278E64590074164C /* retro_assert.h */,
8389F25D278E64590074164C /* string */,
8389F25F278E64590074164C /* filters.h */,
);
path = include;
sourceTree = "<group>";
};
8389F235278E64590074164C /* encodings */ = {
isa = PBXGroup;
children = (
8389F236278E64590074164C /* utf.h */,
);
path = encodings;
sourceTree = "<group>";
};
8389F238278E64590074164C /* vfs */ = {
isa = PBXGroup;
children = (
8389F239278E64590074164C /* vfs.h */,
8389F23A278E64590074164C /* vfs_implementation.h */,
);
path = vfs;
sourceTree = "<group>";
};
8389F23B278E64590074164C /* compat */ = {
isa = PBXGroup;
children = (
8389F23C278E64590074164C /* strl.h */,
8389F23D278E64590074164C /* strcasestr.h */,
8389F23E278E64590074164C /* fopen_utf8.h */,
8389F23F278E64590074164C /* posix_string.h */,
8389F240278E64590074164C /* msvc.h */,
);
path = compat;
sourceTree = "<group>";
};
8389F243278E64590074164C /* lists */ = {
isa = PBXGroup;
children = (
8389F244278E64590074164C /* string_list.h */,
);
path = lists;
sourceTree = "<group>";
};
8389F245278E64590074164C /* file */ = {
isa = PBXGroup;
children = (
8389F246278E64590074164C /* config_file.h */,
8389F247278E64590074164C /* config_file_userdata.h */,
8389F248278E64590074164C /* file_path.h */,
);
path = file;
sourceTree = "<group>";
};
8389F24A278E64590074164C /* array */ = {
isa = PBXGroup;
children = (
8389F24B278E64590074164C /* rhmap.h */,
);
path = array;
sourceTree = "<group>";
};
8389F24E278E64590074164C /* streams */ = {
isa = PBXGroup;
children = (
8389F24F278E64590074164C /* file_stream.h */,
);
path = streams;
sourceTree = "<group>";
};
8389F250278E64590074164C /* features */ = {
isa = PBXGroup;
children = (
8389F251278E64590074164C /* features_cpu.h */,
);
path = features;
sourceTree = "<group>";
};
8389F253278E64590074164C /* time */ = {
isa = PBXGroup;
children = (
8389F254278E64590074164C /* rtime.h */,
);
path = time;
sourceTree = "<group>";
};
8389F256278E64590074164C /* audio */ = {
isa = PBXGroup;
children = (
8389F257278E64590074164C /* audio_resampler.h */,
8389F258278E64590074164C /* conversion */,
);
path = audio;
sourceTree = "<group>";
};
8389F258278E64590074164C /* conversion */ = {
isa = PBXGroup;
children = (
8389F259278E64590074164C /* s16_to_float.h */,
8389F25A278E64590074164C /* s32_to_float.h */,
);
path = conversion;
sourceTree = "<group>";
};
8389F25D278E64590074164C /* string */ = {
isa = PBXGroup;
children = (
8389F25E278E64590074164C /* stdstring.h */,
);
path = string;
sourceTree = "<group>";
};
8389F260278E64590074164C /* features */ = {
isa = PBXGroup;
children = (
8389F261278E64590074164C /* features_cpu.c */,
);
path = features;
sourceTree = "<group>";
};
8389F262278E64590074164C /* memmap */ = {
isa = PBXGroup;
children = (
8389F263278E64590074164C /* memalign.c */,
);
path = memmap;
sourceTree = "<group>";
};
8389F264278E64590074164C /* time */ = {
isa = PBXGroup;
children = (
8389F265278E64590074164C /* rtime.c */,
);
path = time;
sourceTree = "<group>";
};
8389F266278E64590074164C /* audio */ = {
isa = PBXGroup;
children = (
8389F267278E64590074164C /* resampler */,
8389F26B278E64590074164C /* conversion */,
);
path = audio;
sourceTree = "<group>";
};
8389F267278E64590074164C /* resampler */ = {
isa = PBXGroup;
children = (
8389F268278E64590074164C /* drivers */,
8389F26A278E64590074164C /* audio_resampler.c */,
);
path = resampler;
sourceTree = "<group>";
};
8389F268278E64590074164C /* drivers */ = {
isa = PBXGroup;
children = (
8389F269278E64590074164C /* sinc_resampler.c */,
);
path = drivers;
sourceTree = "<group>";
};
8389F26B278E64590074164C /* conversion */ = {
isa = PBXGroup;
children = (
8389F26C278E64590074164C /* s16_to_float.c */,
8389F26D278E64590074164C /* s32_to_float.c */,
);
path = conversion;
sourceTree = "<group>";
};
8389F26E278E64590074164C /* string */ = {
isa = PBXGroup;
children = (
8389F26F278E64590074164C /* stdstring.c */,
);
path = string;
sourceTree = "<group>";
};
8389F2A0278E646E0074164C /* Vorbis */ = {
isa = PBXGroup;
children = (
8389F2A1278E646E0074164C /* lpc.h */,
8389F2A2278E646E0074164C /* lpc.c */,
);
name = Vorbis;
path = ../ThirdParty/Vorbis;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@ -578,57 +713,58 @@
buildActionMask = 2147483647;
files = (
17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */,
832BEEE0278D4A32005E1BC4 /* vfs_implementation.h in Headers */,
8389F27C278E64590074164C /* vfs_implementation.h in Headers */,
17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */,
832BEEF5278D4A32005E1BC4 /* audio_resampler.h in Headers */,
832BEEDF278D4A32005E1BC4 /* vfs.h in Headers */,
832BEEF7278D4A32005E1BC4 /* s32_to_float.h in Headers */,
8389F291278E64590074164C /* audio_resampler.h in Headers */,
8389F27B278E64590074164C /* vfs.h in Headers */,
8389F293278E64590074164C /* s32_to_float.h in Headers */,
17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */,
832BEEE7278D4A32005E1BC4 /* retro_timers.h in Headers */,
8389F283278E64590074164C /* retro_timers.h in Headers */,
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */,
832BEEFA278D4A32005E1BC4 /* stdstring.h in Headers */,
832BEEE3278D4A32005E1BC4 /* fopen_utf8.h in Headers */,
832BEEE2278D4A32005E1BC4 /* strcasestr.h in Headers */,
832BEEEB278D4A32005E1BC4 /* file_path.h in Headers */,
832BEEA2278D464B005E1BC4 /* config.h in Headers */,
8389F296278E64590074164C /* stdstring.h in Headers */,
8389F27F278E64590074164C /* fopen_utf8.h in Headers */,
8389F27E278E64590074164C /* strcasestr.h in Headers */,
8389F287278E64590074164C /* file_path.h in Headers */,
8389F270278E64590074164C /* config.h in Headers */,
17D21CC50B8BE4BA00D1EBDE /* OutputCoreAudio.h in Headers */,
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */,
832BEEF2278D4A32005E1BC4 /* retro_miscellaneous.h in Headers */,
832BEEE4278D4A32005E1BC4 /* posix_string.h in Headers */,
832BEEF1278D4A32005E1BC4 /* features_cpu.h in Headers */,
8389F28E278E64590074164C /* retro_miscellaneous.h in Headers */,
8389F280278E64590074164C /* posix_string.h in Headers */,
8389F28D278E64590074164C /* features_cpu.h in Headers */,
17D21CDF0B8BE5B400D1EBDE /* VirtualRingBuffer.h in Headers */,
832BEEE6278D4A32005E1BC4 /* retro_common_api.h in Headers */,
832BEEF3278D4A32005E1BC4 /* rtime.h in Headers */,
8389F282278E64590074164C /* retro_common_api.h in Headers */,
8389F28F278E64590074164C /* rtime.h in Headers */,
17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */,
832BEEE9278D4A32005E1BC4 /* config_file.h in Headers */,
8389F285278E64590074164C /* config_file.h in Headers */,
17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */,
832BEEE8278D4A32005E1BC4 /* string_list.h in Headers */,
832BEEDE278D4A32005E1BC4 /* memalign.h in Headers */,
8389F284278E64590074164C /* string_list.h in Headers */,
8389F27A278E64590074164C /* memalign.h in Headers */,
17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */,
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */,
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */,
17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */,
832BEEE1278D4A32005E1BC4 /* strl.h in Headers */,
832BEEE5278D4A32005E1BC4 /* msvc.h in Headers */,
832BEEF4278D4A32005E1BC4 /* boolean.h in Headers */,
832BEEF9278D4A32005E1BC4 /* retro_assert.h in Headers */,
832BEEEE278D4A32005E1BC4 /* retro_inline.h in Headers */,
8389F27D278E64590074164C /* strl.h in Headers */,
8389F281278E64590074164C /* msvc.h in Headers */,
8389F2A3278E646E0074164C /* lpc.h in Headers */,
8389F290278E64590074164C /* boolean.h in Headers */,
8389F295278E64590074164C /* retro_assert.h in Headers */,
8389F28A278E64590074164C /* retro_inline.h in Headers */,
17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */,
832BEEF8278D4A32005E1BC4 /* libretro.h in Headers */,
8389F294278E64590074164C /* libretro.h in Headers */,
17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */,
832BEEEA278D4A32005E1BC4 /* config_file_userdata.h in Headers */,
8389F286278E64590074164C /* config_file_userdata.h in Headers */,
839366671815923C006DD712 /* CogPluginMulti.h in Headers */,
17ADB13C0B97926D00257CA2 /* AudioSource.h in Headers */,
832BEEF6278D4A32005E1BC4 /* s16_to_float.h in Headers */,
832BEEDD278D4A32005E1BC4 /* utf.h in Headers */,
832BEEEC278D4A32005E1BC4 /* retro_environment.h in Headers */,
8389F292278E64590074164C /* s16_to_float.h in Headers */,
8389F279278E64590074164C /* utf.h in Headers */,
8389F288278E64590074164C /* retro_environment.h in Headers */,
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */,
832BEEF0278D4A32005E1BC4 /* file_stream.h in Headers */,
8389F28C278E64590074164C /* file_stream.h in Headers */,
8384912718080FF100E7332D /* Logging.h in Headers */,
832BEEFB278D4A32005E1BC4 /* filters.h in Headers */,
8389F297278E64590074164C /* filters.h in Headers */,
8E8D3D2F0CBAEE6E00135C1B /* AudioContainer.h in Headers */,
832BEEED278D4A32005E1BC4 /* rhmap.h in Headers */,
832BEEEF278D4A32005E1BC4 /* retro_math.h in Headers */,
8389F289278E64590074164C /* rhmap.h in Headers */,
8389F28B278E64590074164C /* retro_math.h in Headers */,
B0575F2D0D687A0800411D77 /* Helper.h in Headers */,
07DB5F3E0ED353A900C2E3EF /* AudioMetadataWriter.h in Headers */,
);
@ -704,41 +840,42 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8389F275278E64590074164C /* file_path.c in Sources */,
17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */,
17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */,
832BEEAA278D47FB005E1BC4 /* file_path_io.c in Sources */,
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */,
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */,
832BEEB0278D48C1005E1BC4 /* s32_to_float.c in Sources */,
8389F298278E64590074164C /* features_cpu.c in Sources */,
8389F29E278E64590074164C /* s32_to_float.c in Sources */,
17D21CC60B8BE4BA00D1EBDE /* OutputCoreAudio.m in Sources */,
832BEEA8278D47F0005E1BC4 /* stdstring.c in Sources */,
832BEEA0278D460F005E1BC4 /* file_stream.c in Sources */,
17D21CE00B8BE5B400D1EBDE /* VirtualRingBuffer.m in Sources */,
8389F29D278E64590074164C /* s16_to_float.c in Sources */,
8389F277278E64590074164C /* config_file.c in Sources */,
8389F276278E64590074164C /* config_file_userdata.c in Sources */,
8389F29B278E64590074164C /* sinc_resampler.c in Sources */,
8389F273278E64590074164C /* string_list.c in Sources */,
8389F299278E64590074164C /* memalign.c in Sources */,
8389F278278E64590074164C /* file_stream.c in Sources */,
8389F272278E64590074164C /* vfs_implementation.c in Sources */,
17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */,
832BEE9C278D451D005E1BC4 /* config_file.c in Sources */,
832BEEA6278D4755005E1BC4 /* vfs_implementation.c in Sources */,
8389F29A278E64590074164C /* rtime.c in Sources */,
17D21DC80B8BE79700D1EBDE /* CoreAudioUtils.m in Sources */,
839366681815923C006DD712 /* CogPluginMulti.m in Sources */,
832BEE90278D40F7005E1BC4 /* features_cpu.c in Sources */,
832BEE9E278D452C005E1BC4 /* string_list.c in Sources */,
832BEEAC278D4848005E1BC4 /* encoding_utf.c in Sources */,
832BEE9A278D4473005E1BC4 /* memalign.c in Sources */,
17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */,
8389F274278E64590074164C /* file_path_io.c in Sources */,
17F94DD60B8D0F7000A34E87 /* PluginController.m in Sources */,
832BEEA4278D469D005E1BC4 /* file_path.c in Sources */,
17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */,
17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */,
17B619310B909BC300BC003F /* AudioPropertiesReader.m in Sources */,
8389F29F278E64590074164C /* stdstring.c in Sources */,
17ADB13D0B97926D00257CA2 /* AudioSource.m in Sources */,
8EC122600B993BD500C5B3AD /* ConverterNode.m in Sources */,
8389F271278E64590074164C /* encoding_utf.c in Sources */,
8E8D3D300CBAEE6E00135C1B /* AudioContainer.m in Sources */,
832BEEAE278D4853005E1BC4 /* rtime.c in Sources */,
832BEE96278D414A005E1BC4 /* sinc_resampler.c in Sources */,
B0575F300D687A4000411D77 /* Helper.m in Sources */,
832BEE98278D4462005E1BC4 /* config_file_userdata.c in Sources */,
8389F2A4278E646E0074164C /* lpc.c in Sources */,
8389F29C278E64590074164C /* audio_resampler.c in Sources */,
07DB5F3F0ED353A900C2E3EF /* AudioMetadataWriter.m in Sources */,
832BEE94278D412D005E1BC4 /* audio_resampler.c in Sources */,
832BEE92278D4109005E1BC4 /* s16_to_float.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

156
ThirdParty/Vorbis/lpc.c vendored Normal file
View File

@ -0,0 +1,156 @@
/********************************************************************
* *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
* by the Xiph.Org Foundation http://www.xiph.org/ *
* *
********************************************************************
function: LPC low level routines
last mod: $Id: lpc.c 16227 2009-07-08 06:58:46Z xiphmont $
********************************************************************/
/* Some of these routines (autocorrelator, LPC coefficient estimator)
are derived from code written by Jutta Degener and Carsten Bormann;
thus we include their copyright below. The entirety of this file
is freely redistributable on the condition that both of these
copyright notices are preserved without modification. */
/* Preserved Copyright: *********************************************/
/* Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
Technische Universita"t Berlin
Any use of this software is permitted provided that this notice is not
removed and that neither the authors nor the Technische Universita"t
Berlin are deemed to have made any representations as to the
suitability of this software for any purpose nor are held responsible
for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR
THIS SOFTWARE.
As a matter of courtesy, the authors request to be informed about uses
this software has found, about bugs in this software, and about any
improvements that may be of general interest.
Berlin, 28.11.1994
Jutta Degener
Carsten Bormann
*********************************************************************/
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "lpc.h"
/* Autocorrelation LPC coeff generation algorithm invented by
N. Levinson in 1947, modified by J. Durbin in 1959. */
/* Input : n elements of time doamin data
Output: m lpc coefficients, excitation energy */
float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){
double aut[m+1];
double lpc[m];
double error;
double epsilon;
int i,j;
/* autocorrelation, p+1 lag coefficients */
j=m+1;
while(j--){
double d=0; /* double needed for accumulator depth */
for(i=j;i<n;i++)d+=(double)data[i]*data[i-j];
aut[j]=d;
}
/* Generate lpc coefficients from autocorr values */
/* set our noise floor to about -100dB */
error=aut[0] * (1. + 1e-10);
epsilon=1e-9*aut[0]+1e-10;
for(i=0;i<m;i++){
double r= -aut[i+1];
if(error<epsilon){
memset(lpc+i,0,(m-i)*sizeof(*lpc));
goto done;
}
/* Sum up this iteration's reflection coefficient; note that in
Vorbis we don't save it. If anyone wants to recycle this code
and needs reflection coefficients, save the results of 'r' from
each iteration. */
for(j=0;j<i;j++)r-=lpc[j]*aut[i-j];
r/=error;
/* Update LPC coefficients and total error */
lpc[i]=r;
for(j=0;j<i/2;j++){
double tmp=lpc[j];
lpc[j]+=r*lpc[i-1-j];
lpc[i-1-j]+=r*tmp;
}
if(i&1)lpc[j]+=lpc[j]*r;
error*=1.-r*r;
}
done:
/* slightly damp the filter */
{
double g = .99;
double damp = g;
for(j=0;j<m;j++){
lpc[j]*=damp;
damp*=g;
}
}
for(j=0;j<m;j++)lpci[j]=(float)lpc[j];
/* we need the error value to know how big an impulse to hit the
filter with later */
return error;
}
void vorbis_lpc_predict(float *coeff,float *prime,int m,
float *data,long n){
/* in: coeff[0...m-1] LPC coefficients
prime[0...m-1] initial values (allocated size of n+m-1)
out: data[0...n-1] data samples */
long i,j,o,p;
float y;
float work[m+n];
if(!prime)
for(i=0;i<m;i++)
work[i]=0.f;
else
for(i=0;i<m;i++)
work[i]=prime[i];
for(i=0;i<n;i++){
y=0;
o=i;
p=m;
for(j=0;j<m;j++)
y-=work[o++]*coeff[--p];
data[i]=work[o]=y;
}
}

27
ThirdParty/Vorbis/lpc.h vendored Normal file
View File

@ -0,0 +1,27 @@
/********************************************************************
* *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
* by the Xiph.Org Foundation http://www.xiph.org/ *
* *
********************************************************************
function: LPC low level routines
last mod: $Id: lpc.h 16037 2009-05-26 21:10:58Z xiphmont $
********************************************************************/
#ifndef _V_LPC_H_
#define _V_LPC_H_
/* simple linear scale LPC code */
extern float vorbis_lpc_from_data(float *data,float *lpc,int n,int m);
extern void vorbis_lpc_predict(float *coeff,float *prime,int m,
float *data,long n);
#endif