从我的Mutable Array中随机播放歌曲一次

时间:2015-04-17 11:54:03

标签: ios objective-c xcode

我正在使用我的播放列表中的随机声音构建一个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];
}

我将其声明为实例方法。

现在我有很多不同颜色的按钮。每个按钮都应该弹奏一首歌。但每当我调用新视图时,按钮应播放另一首歌。

我希望你理解我:)。

我的问题是:

  1. 有什么办法,当我想要时,例如黄色按钮在此视图中超时播放“Song1”,但是当我再次加载View时它会播放“Song5”吗?

  2. 我如何说每个按钮播放我的数组? 我只知道

    NSString *play = [[NSBundle mainBundle] 
    pathForResource:@"Song1" ofType:@"mp3"];
    NSURL *playURL = [NSURL fileURLWithPath:pewPewPath];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)playURL, & self.song1);
    AudioServicesPlaySystemSound(self.song1);
    
  3. 希望您理解我的问题:)

    谢谢&amp;最好的问候!

4 个答案:

答案 0 :(得分:1)

您可以使用MPMediaPickerController类并使用它的方法从iPod库中获取歌曲。

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

答案 1 :(得分:1)

如果您使用arc4random()。然后它会从你的数组中拾取随机索引。你不是预测的。如果你想随机功能将根据你的要求工作,你需要根据你的要求手动编码。

希望这对你有所帮助。

答案 2 :(得分: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"];

答案 3 :(得分:-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]];
}

因此。祝你好运代码=)