使用AVAudioPlayer播放多个音频文件

7
我计划将我的10首歌曲录音免费发布,但是打包在iPhone应用程序中。目前还没有在网站或iTunes或任何其他地方提供这些歌曲。
我对iPhone SDK(最新版本)还不熟悉,所以我一直在查阅开发者文档、各种论坛和Stack Overflow来学习。
苹果的avTouch示例应用程序是一个很好的起点。但我想让我的应用程序按顺序播放所有10个曲目。所有歌曲都添加到资源文件夹中,并且命名为track1、track2…track10。
在avTouch应用程序代码中,我可以看到以下两个部分,这就是我认为需要进行更改以实现我要求的内容的地方。但我很迷茫。
// Load the array with the sample file
NSURL *fileURL = [[NSURL alloc] 
                 initFileURLWithPath: 
                 [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"m4a"]];


- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag == NO)
    NSLog(@"Playback finished unsuccessfully");

[player setCurrentTime:0.];
[self updateViewForPlayerState];
}

请问有人能够帮我:

1. 如何将资源文件夹中的所有10个音轨加载到数组中?

2. 当我点击播放时,播放器应该开始播放第一首曲子。当第一首曲子结束后,第二首曲子应该开始播放,以此类推,直到播放完所有曲子。

谢谢你!

2个回答

8

inScript,您解决这个问题了吗?您可能希望使用类似于 if { // do something } else { // do something else } 的简单语句依次播放它们。

如果要加载到数组中,请创建一个新的 plist 文件(右键单击目录树 -> 添加 -> 新建文件",在其中找到一个属性列表;将文件命名为 soundslist。接下来打开该新文件,在“字典”默认显示的位置右键单击,下拉至“值类型”,选择“数组”... 如果您从该行最右边看过去,您会看到一个类似于三条杠的按钮,请点击它以添加第一项。现在逐行添加一项,“track01”,“track02”等等...

此代码放在您的 .h 文件中:

NSArray* soundsList;

将以下代码放入您的 .m 文件中:

NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist" ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];

数组总是从索引#0开始...因此,如果您有5个轨道,则track01将是索引0,track02将是索引1,依此类推。如果您想快速轮询数组以查看其中的内容,可以添加以下代码:

int i = 0;

for (i; i <= ([soundsList count] - 1); i++) {

    NSLog(@"soundsList contains %@", [soundsList objectAtIndex:i]);

}

这只是计算数组中有多少项(例如5或10首歌曲),objectAtIndex:会返回您发送到其中的任何索引号的对象。

如果要连续播放,只需将if-then语句放在audioPlayerDidFinishPlaying方法中即可。

如果要播放文件,可以执行以下操作:

NSString* filename = [soundsList objectAtIndex:YOURINDEXNUMBER];
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"mp3"];  

AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
self.theAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded

[newAudio release]; // release the audio safely

theAudio.delegate = self; 
[theAudio prepareToPlay];
[theAudio setNumberOfLoops:0];
[theAudio play];

其中YOURINDEXNUMBER是您想要播放的曲目号(请记住,0 = track01,1 = track02等)

如果您需要帮助设置.h文件中的变量,请告诉我,我可以为您提供指导。同时,请记得在dealloc方法中释放theAudio,这样程序退出时它就会被释放。


0
在你的代码中,你可以在 audioPlayerDidFinishPlaying 中重新调用你的播放器并再次播放声音,并通过使用计数器跟踪你播放了多少曲目。
制作调节代码,您可以使您的播放器重复播放10个曲目......
要获取更多功能,请参考 AVAudio player 类参考文献...
为了更好的外观,您可以使用 CoreAnimation 类放置不同的按钮和自定义音量旋转....
祝你好运

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接