【发布时间】:2011-12-28 23:25:58
【问题描述】:
我第一次调用此方法时,file1 将为零,file2 将被返回。当这种情况发生时,文件将正常播放(因此调用此方法应该没问题)。但是当我第二次调用它时,它会返回一个NSURL AVAudioPlayer 不会播放。我的猜测是我错过了标题中的某些内容。在调试模式下,我看到totalLength 与数据长度完全相同。
+(NSURL *)mergeFile1:(NSURL *)file1 withFile2:(NSURL *)file2 {
if(file1 == nil) {
return [file2 copy];
}
NSData * wav1Data = [NSData dataWithContentsOfURL:file1];
NSData * wav2Data = [NSData dataWithContentsOfURL:file2];
int wav1DataSize = [wav1Data length] - 46;
int wav2DataSize = [wav2Data length] - 46;
if (wav1DataSize <= 0 || wav2DataSize <= 0) {
return nil;
}
NSMutableData * soundFileData = [NSMutableData dataWithData:[wav1Data subdataWithRange:NSMakeRange(0, 46)]];
[soundFileData appendData:[wav1Data subdataWithRange:NSMakeRange(46, wav1DataSize)]];
[soundFileData appendData:[wav2Data subdataWithRange:NSMakeRange(46, wav2DataSize)]];
unsigned int totalLength = [soundFileData length];
NSLog(@"Calculated: %d - Real: %d", totalLength, [soundFileData length]);
[soundFileData replaceBytesInRange:NSMakeRange(4, 4)
withBytes:&(UInt32){NSSwapHostIntToLittle(totalLength-8)}];
[soundFileData replaceBytesInRange:NSMakeRange(42, 4)
withBytes:&(UInt32){NSSwapHostIntToLittle(totalLength)}];
[soundFileData writeToURL:file1 atomically:YES];
return [file1 copy];
}
如果有人看到可以提供帮助的东西,将不胜感激! 任何问题都会尽快回复。
编辑
我知道有 2 种 wav 标头:44 字节或 46 字节。我都试过了。
编辑
我查看了Audio File Services Reference,其中包含很多我可能想要使用的好东西,但我不知道如何使用所有这些。我真的不知道c。希望任何人都可以帮助我解决这个问题。
编辑
在这里可以找到合并的 wav 文件的示例:7--443522512
【问题讨论】:
-
您是否尝试过在模拟器中运行时将 wav 保存到文件中,然后尝试在其他播放器中播放?
-
@MattiasWadman 这不是一个转贴,因为我试图找到一种方法来解决内存问题,但是这个已经全部修复了,我正试图让 wav玩。好像一样,不一样。我没试过,现在试试。
-
不,它也不会让我在音乐播放器中播放。知道问题可能是什么吗?
-
然后使用十六进制编辑器检查 wav 文件,在终端等中运行
file file.wav并尝试发现任何错误。如果您没有找到任何东西,请发布一个人们可以帮助您检查的合并 wav 文件的示例。
标签: objective-c c avaudioplayer wav