我正在尝试使用AVAudioPlayer的实例播放6个单独的.mp3声音文件。 声音同时播放,但它们似乎不同步或播放 速度略有不同。有谁知道为什么会这样?
以下是我初始化声音的方法:
NSURL *musicurl = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource: @"SoundLoop" ofType: @"mp3"]];
music = [[AVAudioPlayer alloc] initWithContentsOfURL: musicurl error: nil];
[musicurl release];
music.numberOfLoops = -1; // Loop indefinately
music.currentTime = 0; // start at beginning
music.volume = 1.0;
music.meteringEnabled = YES;
这是我的AudioSession代码:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setPreferredHardwareSampleRate:44100 error:nil];
[[AVAudioSession sharedInstance] setPreferredIOBufferDuration:30 error:nil];
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
Float32 hardvol = 1.0;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume, sizeof(hardvol), &hardvol);
UInt32 doSetProperty = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive:YES error: nil];
它可能与声音的比特率有关吗?或者我正在使用.mp3?
感谢。
答案 0 :(得分:5)
我通过使用AVAudioPlayer类的playAtTime:方法找到了解决这个问题的方法:
NSTimeInterval shortStartDelay = 0.5; // seconds
NSTimeInterval now = player.deviceCurrentTime;
[player playAtTime:now + shortStartDelay]; //these players are instances of AVAudioPlayer
[player2 playAtTime:now + shortStartDelay];
[player3 playAtTime:now + shortStartDelay];
使用此功能可以让所有声音异步并同步播放。
答案 1 :(得分:1)
您应该查看“多媒体编程指南”。 “使用音频”部分提供了大量有用的信息。 http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/Introduction/Introduction.html
这听起来与您的问题有关:
使用硬件辅助解码时, 该设备只能播放一个 其中一个支持的实例 一次格式化。例如,如果你 正在播放立体声MP3声音 硬件编解码器,第二个 同时MP3声音将使用 软件解码。同样,你 不能同时发挥AAC和 使用硬件的ALAC声音。如果 iPod应用程序正在播放AAC或 MP3声音在后台,它有 声称硬件编解码器;您的 然后应用程序播放AAC,ALAC和 使用软件解码的MP3音频。
以最佳方式播放多种声音 表现,或高效发挥 在iPod播放时发出声音 背景,使用线性PCM (未压缩)或IMA4(压缩) 音频。
这是另一个声称你正在做的事情应该是可能的,但似乎苹果公司在“处理器效率最高的多重播放”系列中引起了警告。我认为如果处理器过于紧张会导致无法及时完成任务。
从iOS 3.0开始,几乎所有 可以使用支持的音频格式 用于同时回放 - 即全部 那些可以玩的 软件解码,如中所述 表1-1。最多的 处理器高效的多重播放, 使用线性PCM(未压缩)或IMA4 (压缩)音频。
在调试方面,您应该从两个音频开始,看看是否有问题。然后按照你的方式直到6,并找出问题是否开始出现的明显点。我还会找到(或制作)Apple建议的格式(PCM或IMA4)的某些音轨,并对它们进行相同的测试。做这两件事应该可以帮助你缩小实际问题的范围。