7

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

如您所想,我是 iphone sdk(最新)的新手,所以我一直在浏览开发人员文档、各种论坛和 stackoverflow 来学习。

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

谢谢你

4

2 回答 2

8

inScript,你找到解决方案了吗?您可能想坚持使用简单的if { // do something } else { // do something else }语句,例如背靠背播放它们。

要加载到数组中,请创建一个新的 plist 文件(右键单击目录树 -> 添加 -> 新文件“并在其中找到一个属性列表;将文件命名为soundlist。接下来打开该新文件,右键单击它所在的位置默认情况下显示“字典”,进入“值类型”并选择“数组”...如果您查看该行的最右侧,您会看到一个 3 条小按钮,单击该按钮以添加您的第一项。现在您一次添加一项,“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 文件中的变量时需要帮助,请告诉我,我可以指导您完成。另外,请记住theAudio在您的 dealloc 方法中释放,以便在程序退出时释放它。

于 2010-04-27T17:56:40.410 回答
0

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

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

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

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

祝你好运

于 2011-04-15T04:58:12.713 回答