使用 AVAudioPlayer 播放多个音频文件

Posted

技术标签:

【中文标题】使用 AVAudioPlayer 播放多个音频文件【英文标题】:Play multiple audio files using AVAudioPlayer 【发布时间】:2010-04-06 15:59:28 【问题描述】:

我计划免费发布我的 10 首歌曲录音,但捆绑在一个 iPhone 应用程序中。截至目前,它们无法在网络、iTunes 或任何地方使用。

正如你想象的那样,我是 iphone sdk(最新)的新手,所以我一直在浏览开发者文档、各种论坛和 *** 来学习。

Apple 的avTouch 示例应用程序是一个很好的开始。但我希望我的应用程序能够一一播放所有 10 首曲目。所有歌曲都添加到资源文件夹中,并命名为track1,track2...track10。

在 avTouch 应用程序代码中,我可以看到以下 2 个部分,我认为我需要在这些部分进行更改以实现我想要的。但我迷路了。

// 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.当我点击播放时,播放器应该开始第一首曲目。当第一首曲目结束时,第二首曲目应该开始,其余曲目以此类推。

谢谢

【问题讨论】:

【参考方案1】:

inScript,您找到解决方案了吗?您可能想坚持使用if // do something else // do something else 语句之类的简单语句来连续播放它们。

要加载到数组中,创建一个新的 plist 文件(右键单击目录树 -> 添加 -> 新文件)并在其中找到一个属性列表;将文件命名为声音列表。接下来打开该新文件,右键单击它在默认情况下显示“字典”的位置,进入“值类型”并选择“数组”...如果您查看该行的最右侧,您会看到一个小三栏按钮,单击它添加您的第一个项目。现在您一次添加一个项目,“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,以便在程序退出时释放它。

【讨论】:

【参考方案2】:

在您的代码中,您可以调用您的播放器并在 audioPlayerDidFinishPlaying 中再次播放声音并跟踪您播放了多少曲目(通过使用计数器)。

制作条件代码你管理你的播放器反复播放 10 首曲目一次又一次.....

有关更多功能,您可以从 AVAudio 播放器类参考中获取参考...

为了更好看,你放置不同的按钮和自定义音量旋转 noob.... 使用 CoreAnimation 类 ....

祝你好运

【讨论】:

以上是关于使用 AVAudioPlayer 播放多个音频文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 播放多个音频文件

如何用AVAudioPlayer依次播放多个音频文件

如何在 AVAudioPlayer 中循环播放多个音频文件?

如何同时播放多个音频文件

多个音频文件同时 iphone

如何在 iOS 4 中在后台播放多个音频文件?