@interface MainScreenViewController : UIViewController <AVAudioPlayerDelegate, UITabBarControllerDelegate> {
AVAudioPlayer *player;
CFURLRef keNURL;
SystemSoundID keNObject;
//KE LOUD
CFURLRef keLURL;
SystemSoundID keLObject;
//GE NORMAL
CFURLRef geNURL;
SystemSoundID geNObject;
//GE LOUD
CFURLRef geLURL;
SystemSoundID geLObject;
//NA NORMAL
CFURLRef naNURL;
SystemSoundID naNObject;
//NA LOUD
CFURLRef naLURL;
SystemSoundID naLObject;
//RA
CFURLRef raURL;
SystemSoundID raObject;
//DAGGA CLICK
CFURLRef daCURL;
SystemSoundID daCObject;
//TILLI CLICK
CFURLRef tiCURL;
SystemSoundID tiCObject;
}
@property (nonatomic, retain) AVAudioPlayer *player;
@property (readwrite) CFURLRef keNURL;
@property (readonly) SystemSoundID keNObject;
@property (readwrite) CFURLRef keLURL;
@property (readonly) SystemSoundID keLObject;
@property (readwrite) CFURLRef geNURL;
@property (readonly) SystemSoundID geNObject;
@property (readwrite) CFURLRef geLURL;
@property (readonly) SystemSoundID geLObject;
@property (readwrite) CFURLRef naNURL;
@property (readonly) SystemSoundID naNObject;
@property (readwrite) CFURLRef naLURL;
@property (readonly) SystemSoundID naLObject;
@property (readwrite) CFURLRef raURL;
@property (readonly) SystemSoundID raObject;
@property (readwrite) CFURLRef daCURL;
@property (readonly) SystemSoundID daCObject;
@property (readwrite) CFURLRef tiCURL;
@property (readonly) SystemSoundID tiCObject;
}
然后播放个人声音的动作
然后是.m文件,在导入.h文件并且右框架工作并合成所有变量后,编写动作的代码 这是个人行动中的最新情况。
-(IBAction)geSound{
AudioServicesPlaySystemSound (self.geNObject);
}
我只是想知道systemound是否是我创建音板的前进方向。 尤其要感谢用户在节拍之间快速交替拍打电路板。 。 如果不是什么是播放响应真的很好的声音的最佳方式?
答案 0 :(得分:8)
根据经验,AVAudioPlayer可以同时播放多种声音,也可以非常快速地播放。使用它的最佳方法是创建一个方法,您可以在NSString
中播放以播放NSString
中保存的名称的某些声音...这样,您将创建一个新的播放器对于您播放的每个声音文件。除非你知道你已经完成了它们,否则要小心释放分配的玩家。
除非你有非常大的声音文件可能需要一小段时间来缓冲(如果你能忍受任何等待时间,你必须自己弄明白),我从来没有遇到任何问题,因为它很慢。如果速度很慢,你可能会针对Apple的解决某些文件的建议做一些事情(例如,对于多个声音,Apple推荐使用CAF格式,因为它是硬件解码而不是软件解码):http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
<强>更新强>
以下是我使用shell脚本编码文件的方法。将它放在一个名为batchit.sh
的文件中,放在它自己的目录中。然后将要编码的任何.WAV文件放在该目录中作为.CAF文件。打开Mac上的Terminal
,cd
到该目录,然后输入sh batchit.sh
并让它完成。它将批量转换所有文件......这是代码:
for f in *; do
if [ "$f" != "batchit.sh" ]
then
/usr/bin/afconvert -f caff -d ima4 $f
echo "$f converted"
fi
done
以下是一个示例项目...... http://www.megaupload.com/?d=5NP6FHR1
注意我在audioPlayerDidFinishPlaying
方法中没有做任何事情,这是AVAudioPlayer
的委托方法。你需要添加代码才能在每次完成播放后正确释放播放器(嘿,我不能为你完成所有工作:)以便正确分配所有内存。否则,如果你无限制地继续创建玩家而不释放它们,你最终会耗尽。因为看起来你有一个艰难的一天..请看下面的一个大提示。
这是我能给予的所有帮助。你必须学习和学习赚取其余的
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
// do something here if you want.. you know like maybe release the old players by uncommenting the line below :)
//[player release];
}
答案 1 :(得分:2)
22/03/2014 - 更新:摆脱我过于兴奋的帖子(很久以前写过)并更新以描绘更合适的答案。
我必须对音频进行精细控制,因此选择使用OpenAL。 WOW是总结它的一种方式。一旦我自己使用OpenAL,需要一些额外的腿部工作,实现所有必需的方法并设置一切;我发现自己几乎没有明显的潜伏期。我对结果非常满意。
我完全可以实现精细控制和无延迟。我记得当我工作的时候,我喜欢跳跃。
以下是我使用的资源,这有助于简化首次实施OpenAL的努力:
如果您需要对音频进行精确控制,我谦卑地建议每个人都使用OpenAL,更重要的是,如果您需要低延迟的点播音频,特别是对于需要确保在那里播放声音然后何时播放的游戏您需要并期望它,例如,基于音频的应用程序。
答案 2 :(得分:1)
只是为了别人的利益而加入,即使这是问题发生后的两年。
我发现如果它们是短音,那么你的应用程序负载就可以了(ish)。通过运行准备播放每个声音的实例(在for循环中)来缓冲所有曲目(然后释放 - 只需要让处理器记住文件的位置)
这会消除下次到达时的初始加载时间,并让声音更快地启动
答案 3 :(得分:0)
你可以为每个声音创建AVAudioPlayer,然后暂停/播放它。
答案 4 :(得分:0)
您是否尝试在自己的线程中播放每个声音?您可以尝试基本的NSOperation