2015-04-17 112 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