Moved Musepack to source system. Fixed MonkeysAudio bug.
parent
505b525d42
commit
53e4ef0c7b
|
@ -27,4 +27,7 @@
|
||||||
double length;
|
double length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setSource:(id<CogSource>)s;
|
||||||
|
- (id<CogSource>)source;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
int n;
|
int n;
|
||||||
sourceIO = new SourceIO(s);
|
sourceIO = new SourceIO(s);
|
||||||
|
|
||||||
|
[self setSource:s];
|
||||||
|
|
||||||
decompress = CreateIAPEDecompressEx(sourceIO, &n);
|
decompress = CreateIAPEDecompressEx(sourceIO, &n);
|
||||||
|
|
||||||
if (decompress == NULL)
|
if (decompress == NULL)
|
||||||
|
@ -76,6 +78,23 @@
|
||||||
return milliseconds;
|
return milliseconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setSource:(id<CogSource>)s
|
||||||
|
{
|
||||||
|
[s retain];
|
||||||
|
[source release];
|
||||||
|
source = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id<CogSource>)source
|
||||||
|
{
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)seekable
|
||||||
|
{
|
||||||
|
return [source seekable];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSDictionary *)properties
|
- (NSDictionary *)properties
|
||||||
{
|
{
|
||||||
return [NSDictionary dictionaryWithObjectsAndKeys:
|
return [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
@ -87,15 +106,10 @@
|
||||||
nil];
|
nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
+ (NSArray *)fileTypes
|
+ (NSArray *)fileTypes
|
||||||
{
|
{
|
||||||
return [NSArray arrayWithObject:@"ape"];
|
return [NSArray arrayWithObject:@"ape"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)seekable
|
|
||||||
{
|
|
||||||
return [source seekable];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
1745C1A40B90B57400A6768C /* MusepackPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */; };
|
1745C1A40B90B57400A6768C /* MusepackPropertiesReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */; };
|
||||||
177FCF280B90C8D00011C3B5 /* MPCDec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; };
|
177FCF280B90C8D00011C3B5 /* MPCDec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; };
|
||||||
177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; };
|
177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF270B90C8D00011C3B5 /* MPCDec.framework */; };
|
||||||
177FCF390B90C8F10011C3B5 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FCF380B90C8F10011C3B5 /* Plugin.h */; };
|
|
||||||
17ADB2020B9793FF00257CA2 /* MusepackPlugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */; };
|
17ADB2020B9793FF00257CA2 /* MusepackPlugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */; };
|
||||||
17ADB2030B9793FF00257CA2 /* MusepackPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */; };
|
17ADB2030B9793FF00257CA2 /* MusepackPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */; };
|
||||||
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
|
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
|
||||||
|
8E2B8B4B0B9B48D000F2D9E8 /* Plugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E2B8B4A0B9B48D000F2D9E8 /* Plugin.h */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */,
|
177FCF2B0B90C8D20011C3B5 /* MPCDec.framework in CopyFiles */,
|
||||||
177FCF390B90C8F10011C3B5 /* Plugin.h in CopyFiles */,
|
|
||||||
17ADB2020B9793FF00257CA2 /* MusepackPlugin.h in CopyFiles */,
|
17ADB2020B9793FF00257CA2 /* MusepackPlugin.h in CopyFiles */,
|
||||||
|
8E2B8B4B0B9B48D000F2D9E8 /* Plugin.h in CopyFiles */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
1745C1A10B90B57400A6768C /* MusepackPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackPropertiesReader.h; sourceTree = "<group>"; };
|
1745C1A10B90B57400A6768C /* MusepackPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackPropertiesReader.h; sourceTree = "<group>"; };
|
||||||
1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackPropertiesReader.m; sourceTree = "<group>"; };
|
1745C1A20B90B57400A6768C /* MusepackPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackPropertiesReader.m; sourceTree = "<group>"; };
|
||||||
177FCF270B90C8D00011C3B5 /* MPCDec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPCDec.framework; path = ../../Frameworks/MPCDec/build/Release/MPCDec.framework; sourceTree = SOURCE_ROOT; };
|
177FCF270B90C8D00011C3B5 /* MPCDec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPCDec.framework; path = ../../Frameworks/MPCDec/build/Release/MPCDec.framework; sourceTree = SOURCE_ROOT; };
|
||||||
177FCF380B90C8F10011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackPlugin.h; sourceTree = "<group>"; };
|
17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackPlugin.h; sourceTree = "<group>"; };
|
||||||
17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackPlugin.m; sourceTree = "<group>"; };
|
17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackPlugin.m; sourceTree = "<group>"; };
|
||||||
32DBCF630370AF2F00C91783 /* Musepack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Musepack_Prefix.pch; sourceTree = "<group>"; };
|
32DBCF630370AF2F00C91783 /* Musepack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Musepack_Prefix.pch; sourceTree = "<group>"; };
|
||||||
8D5B49B6048680CD000E48DA /* Musepack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Musepack.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
|
8D5B49B6048680CD000E48DA /* Musepack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Musepack.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
|
8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
8E2B8B4A0B9B48D000F2D9E8 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; };
|
||||||
D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
08FB77AFFE84173DC02AAC07 /* Classes */ = {
|
08FB77AFFE84173DC02AAC07 /* Classes */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
177FCF380B90C8F10011C3B5 /* Plugin.h */,
|
8E2B8B4A0B9B48D000F2D9E8 /* Plugin.h */,
|
||||||
17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */,
|
17ADB2000B9793FF00257CA2 /* MusepackPlugin.h */,
|
||||||
17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */,
|
17ADB2010B9793FF00257CA2 /* MusepackPlugin.m */,
|
||||||
170333090B8FB64500327265 /* MusepackDecoder.h */,
|
170333090B8FB64500327265 /* MusepackDecoder.h */,
|
||||||
|
|
|
@ -12,10 +12,8 @@
|
||||||
|
|
||||||
@interface MusepackDecoder : NSObject <CogDecoder>
|
@interface MusepackDecoder : NSObject <CogDecoder>
|
||||||
{
|
{
|
||||||
FILE *inFd;
|
id<CogSource> source;
|
||||||
mpc_decoder decoder;
|
mpc_decoder decoder;
|
||||||
mpc_reader_file reader;
|
|
||||||
mpc_streaminfo info;
|
|
||||||
|
|
||||||
char buffer[MPC_FRAME_LENGTH*4];
|
char buffer[MPC_FRAME_LENGTH*4];
|
||||||
int bufferAmount;
|
int bufferAmount;
|
||||||
|
@ -26,6 +24,7 @@
|
||||||
}
|
}
|
||||||
- (BOOL)writeSamplesToBuffer:(uint16_t *)sample_buffer fromBuffer:(const MPC_SAMPLE_FORMAT *)p_buffer ofSize:(unsigned)p_size;
|
- (BOOL)writeSamplesToBuffer:(uint16_t *)sample_buffer fromBuffer:(const MPC_SAMPLE_FORMAT *)p_buffer ofSize:(unsigned)p_size;
|
||||||
|
|
||||||
- (NSDictionary *)properties;
|
- (void)setSource:(id<CogSource>)s;
|
||||||
|
- (id<CogSource>)source;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -10,24 +10,75 @@
|
||||||
|
|
||||||
@implementation MusepackDecoder
|
@implementation MusepackDecoder
|
||||||
|
|
||||||
- (BOOL)open:(NSURL *)url
|
mpc_int32_t ReadProc(void *data, void *ptr, mpc_int32_t size)
|
||||||
{
|
{
|
||||||
NSLog(@"Decoder opening...$@", url);
|
MusepackDecoder *decoder = (MusepackDecoder *) data;
|
||||||
inFd = fopen([[url path] UTF8String], "rb");
|
|
||||||
if (inFd == 0)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
mpc_reader_setup_file_reader(&reader , inFd);
|
return [[decoder source] read:ptr amount:size];
|
||||||
|
}
|
||||||
|
|
||||||
|
mpc_bool_t SeekProc(void *data, mpc_int32_t offset)
|
||||||
|
{
|
||||||
|
MusepackDecoder *decoder = (MusepackDecoder *) data;
|
||||||
|
|
||||||
|
return [[decoder source] seek:offset whence:SEEK_SET];
|
||||||
|
}
|
||||||
|
|
||||||
|
mpc_int32_t TellProc(void *data)
|
||||||
|
{
|
||||||
|
MusepackDecoder *decoder = (MusepackDecoder *) data;
|
||||||
|
|
||||||
|
return [[decoder source] tell];
|
||||||
|
}
|
||||||
|
|
||||||
|
mpc_int32_t GetSizeProc(void *data)
|
||||||
|
{
|
||||||
|
MusepackDecoder *decoder = (MusepackDecoder *) data;
|
||||||
|
|
||||||
|
if ([[decoder source] seekable]) {
|
||||||
|
long currentPos = [[decoder source] tell];
|
||||||
|
|
||||||
|
[[decoder source] seek:0 whence:SEEK_END];
|
||||||
|
long size = [[decoder source] tell];
|
||||||
|
|
||||||
|
[[decoder source] seek:currentPos whence:SEEK_SET];
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mpc_bool_t CanSeekProc(void *data)
|
||||||
|
{
|
||||||
|
MusepackDecoder *decoder = (MusepackDecoder *) data;
|
||||||
|
|
||||||
|
return [[decoder source] seekable];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)open:(id<CogSource>)s
|
||||||
|
{
|
||||||
|
[self setSource: s];
|
||||||
|
|
||||||
|
mpc_reader reader = {
|
||||||
|
read: ReadProc,
|
||||||
|
seek: SeekProc,
|
||||||
|
tell: TellProc,
|
||||||
|
get_size: GetSizeProc,
|
||||||
|
canseek: CanSeekProc
|
||||||
|
};
|
||||||
|
|
||||||
|
mpc_streaminfo info;
|
||||||
mpc_streaminfo_init(&info);
|
mpc_streaminfo_init(&info);
|
||||||
if (mpc_streaminfo_read(&info, &reader.reader) != ERROR_CODE_OK)
|
if (mpc_streaminfo_read(&info, &reader) != ERROR_CODE_OK)
|
||||||
{
|
{
|
||||||
NSLog(@"Not a valid musepack file.");
|
NSLog(@"Not a valid musepack file.");
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* instantiate a decoder with our file reader */
|
/* instantiate a decoder with our file reader */
|
||||||
mpc_decoder_setup(&decoder, &reader.reader);
|
mpc_decoder_setup(&decoder, &reader);
|
||||||
if (!mpc_decoder_initialize(&decoder, &info))
|
if (!mpc_decoder_initialize(&decoder, &info))
|
||||||
{
|
{
|
||||||
NSLog(@"Error initializing decoder.");
|
NSLog(@"Error initializing decoder.");
|
||||||
|
@ -41,6 +92,10 @@
|
||||||
length = ((double)mpc_streaminfo_get_length_samples(&info)*1000.0)/frequency;
|
length = ((double)mpc_streaminfo_get_length_samples(&info)*1000.0)/frequency;
|
||||||
|
|
||||||
NSLog(@"Length: %lf", length);
|
NSLog(@"Length: %lf", length);
|
||||||
|
|
||||||
|
[self willChangeValueForKey:@"properties"];
|
||||||
|
[self didChangeValueForKey:@"properties"];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +183,7 @@
|
||||||
|
|
||||||
- (void)close
|
- (void)close
|
||||||
{
|
{
|
||||||
fclose(inFd);
|
[source close];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (double)seekToTime:(double)milliseconds
|
- (double)seekToTime:(double)milliseconds
|
||||||
|
@ -138,6 +193,23 @@
|
||||||
return milliseconds;
|
return milliseconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setSource:(id<CogSource>)s
|
||||||
|
{
|
||||||
|
[s retain];
|
||||||
|
[source release];
|
||||||
|
source = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id<CogSource>)source
|
||||||
|
{
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)seekable
|
||||||
|
{
|
||||||
|
return [source seekable];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSDictionary *)properties
|
- (NSDictionary *)properties
|
||||||
{
|
{
|
||||||
return [NSDictionary dictionaryWithObjectsAndKeys:
|
return [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
|
@ -150,6 +222,8 @@
|
||||||
nil];
|
nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+ (NSArray *)fileTypes
|
+ (NSArray *)fileTypes
|
||||||
{
|
{
|
||||||
return [NSArray arrayWithObject:@"mpc"];
|
return [NSArray arrayWithObject:@"mpc"];
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
|
|
||||||
@implementation MusepackPropertiesReader
|
@implementation MusepackPropertiesReader
|
||||||
|
|
||||||
- (NSDictionary *)propertiesForURL:(NSURL *)url
|
+ (NSDictionary *)propertiesForSource:(id<CogSource>)source
|
||||||
{
|
{
|
||||||
NSDictionary *properties;
|
NSDictionary *properties;
|
||||||
MusepackDecoder *decoder;
|
MusepackDecoder *decoder;
|
||||||
|
|
||||||
decoder = [[MusepackDecoder alloc] init];
|
decoder = [[MusepackDecoder alloc] init];
|
||||||
if (![decoder open:url])
|
if (![decoder open:source])
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue