2015-04-17 110 views
2

我正在用我的播放列表中随机播放的声音构建SongApp。从我的可变阵列中随机播放歌曲

我现在有一个NSMutableArray其中包含歌曲。例如:

NSMutableArray *array=[NSMutableArray  
    arrayWithObjects: 
       @"Song1.mp3", 
       @"Song2.mp3", 
       @"Song3.mp3", 
       @"Song4.mp3", 
       @"Song5.mp3", 
       @"Song6.mp3", 
       @"Song7.mp3", 
       @"Song8.mp3", 
       @"Song9.mp3", 
       nil]; 

     int i=0; 
    for(i=0;i<=[array count]; i++) 
{ 

NSInteger rand=(arc4random() %9); 
[array exchangeObjectAtIndex:i  
withObjectAtIndex:rand]; 
} 

我声明它为实例方法。

现在我有很多不同颜色的按钮。每个Button都应该播放一首歌曲。但每次我打电话给新视图时,按钮都应该弹奏另一首歌曲。

我希望你明白我:)

我的问题是:

  1. 有什么办法,那个时候我想,对于例如黄色按钮饰演“松1”加班在此查看,但是当我加载视图时,它会播放“Song5”,例如?

  2. 我怎么能说每个按钮来玩我的阵列? 我只知道

    NSString *play = [[NSBundle mainBundle] 
    pathForResource:@"Song1" ofType:@"mp3"]; 
    NSURL *playURL = [NSURL fileURLWithPath:pewPewPath]; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)playURL, & self.song1); 
    AudioServicesPlaySystemSound(self.song1); 
    

希望你能理解我的问题:)

感谢&最诚挚的问候!

回答

1

您可以使用MPMediaPickerController类并实现其方法来从iPod库中获取歌曲。

如果您的应用程序中已经嵌入了文件,只需将索引处的对象传递给音频服务,同时每次都会生成一个随机索引。

1

如果您使用arc4random()。那么它会从你的数组中拾取随机索引。你没有预测到。如果您希望随机功能可以根据您的要求工作,您需要根据您的要求对其进行手动编码。

希望这对你有所帮助。

-1

首先将NSMutableArray(shuffle)添加到您的项目类别中。 互联网上有很多不同的变种。例如:https://stackoverflow.com/a/56656/1401067 http://nazcalabs.com/blog/how-to-shuffle-a-nsmutablearray-objective-c/

然后将此代码添加到您的控制器中。或者到另一个初始化位置。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.sondsArray shuffle]; 
} 

之后,为所有按钮设置不同的标签。从100(例如)到(100-1 + self.sondsArray)。

最后一步是按下按钮的动作处理。所以:

- (IBAction)songButtonPressed:(UIButton *)button 
{ 
     [self playSongWithName:sondsArray[button.tag-100]]; 
} 

所以。在你的代码好运气=)

+0

嘿,我投下来,因为我认为这表明只下载一个NSMutableArray类是不是一个伟大的方式来帮助别人学习。有更好的方法可以不涉及现有馆藏的类别,或者可以帮助他们自己写。 – Cocoadelica

+0

我看你是非常友善的人。所以......我祝你在学习中好运。请不要这么拉斯维加斯!) – ZevsVU

+0

我不能跟着你zevsVU ...我应该标记按钮? – iOSBeginner

0

一种解决方案是使用此代码在您的阵列的范围内产生随机数:

int max =5; 
int min =1; 

int randNum = rand() % (max - min) + min; 

然后你可以使用[array objectAtIndex:randNum]访问的歌曲。

在您的例子:

NSString *play = [[NSBundle mainBundle]pathForResource:[array objectAtIndex:randNum] ofType:@"mp3"]; 
+0

你能解释一下为什么最多5分钟1? – iOSBeginner

+0

你的意思是这个代码int i = 0; (i = 0; i <= [数组数]; i ++) NSInteger rand =(arc4random()%3); [array exchangeObjectAtIndex:i withObjectAtIndex:rand]; } – iOSBeginner

+0

对不起,答复功能令我疯狂,无法推入... – iOSBeginner