iPhone应用程序中的多个音频声音?

时间:2009-01-06 22:59:14

标签: iphone

我已经开始在iPhone应用程序中播放单个声音,但我现在希望基于按钮播放多个声音。为每个音频声音创建一组单独的.m和.h文件,然后将它们全部包括在内,似乎不是解决编码方面最有效的方法......然后,我刚刚开始与Cocoa一起,我刚刚完成了我的第一个应用程序。

感谢任何帮助。这里的关键是多个声音,每个声音都由自己的按钮或图像触发。感谢。

5 个答案:

答案 0 :(得分:8)

如果文件是MP3或AAC格式,那么您一次只能播放一个。这是iPhone上核心音频的限制。

就一次播放多个声音而言,这很容易,只需为你想玩的每一个创建一个新的播放器实例(并记得在你完成时释放它们)

NSString *path = [[NSBundle mainBundle] pathForResource:@"dream" ofType:@"m4a"];  
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
theAudio.delegate = self;  
[theAudio play];

要将MP3转换为类似IMA4(您可以同时播放多个)的内容,您可以运行以下内容(在终端中,在豹子中):

/usr/bin/afconvert -f caff -d ima4 sound.mp3 sound.caf

以上代码仅适用于固件2.2,但如果您想支持较旧的固件,则可以对AudioQueue文件执行相同的操作(这只是复杂得多,所以我没有在此列出代码)。

答案 1 :(得分:4)

如果您可以访问iPhone开发者网络,则there are a bunch of code samples that show you how to play audio

您需要做的就是创建一个具有名为

的函数的类
-(void)Play:(NSString*)sSoundFile {
    // play sound file here
}

答案 2 :(得分:2)

我对iPhone开发没有任何直接经验,但理论上你可以创建一个包含所有声音的单个大型声音文件吗?每个声音可以通过足够的静音分开,以便通过时间索引单独访问。当然,缺点是你必须将整个文件加载到内存中,除非你能想出一种以随机访问方式加载块的方法......

答案 3 :(得分:1)

@rustyshelf - 这在模拟器中有效吗?我正在使用该代码,并使用#import,但不会调用audioPlayerDidFinishPlaying和audioPlayerDecodeErrorDidOccur。尝试调试非常烦人。

答案 4 :(得分:0)

http://www.icodeblog.com/2009/05/04/iphone-game-programming-tutorial-part-4-basic-game-audio/

在ios5的这个例子中你必须放 CFURLRef soundurl =(__ bridge CFURLRef)[NSURL fileURLWithPath:objstring];

取代

CFURLRef soundurl =(CFURLRef)[NSURL fileURLWithPath:objstring];

Hardik Mamtora

相关问题