2011-11-07 19 views
-1

嗨我想通過我的服務器播放mp3文件http://test.com/hi.mp3通過http服務器播放聲音iOS

目前代碼播放文件,如果它在代碼的目錄中。該代碼一次只能啓用1個聲音。

- (IBAction)oneSound:(id)sender; { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp3"]; 
    if (theAudio) [theAudio release]; 
    NSError *error = nil; 
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error]; 
    if (error) 
     NSLog(@"%@",[error localizedDescription]); 
    theAudio.delegate = self; 
    [theAudio play]; 


} 

但是這裏的代碼使我通過HTTP服務器播放聲音,但我可以一次播放多個聲音,我需要在會議的聲音所以只有1聲音可以播放一次。我有10個聲音。

- (IBAction)oneSound:(id)sender; { 

    AVPlayer *player = [[AVPlayer playerWithURL:[NSURL URLWithString:@"http://www.mysite.com/hi.mp3"]] retain]; 

    [player play]; 

} 
+0

你的問題是什麼? – Till

+0

我認爲你需要更清楚一點。我想你是在說你需要玩家的工作,以便一次只能播放一個聲音,但是你應該定義你想要發生的事情 - 如果聲音排隊等待播放一個又一個,如果第二個聲音被忽略,而不是如果當另一個聲音正在播放時開始播放? – iandotkelly

+0

我想用第二段代碼創建會話,因爲聲音在同時播放,我不想要。我希望聲音獨立播放。所以一旦你點擊了它播放的聲音,一旦你點擊另一個聲音,先前的聲音停止,另一個開始。使用http mp3。 –

回答

0

我的建議是您的播放器的指針在該方法被宣佈移動,這是在模塊級(在.h文件)聲明 - 要麼只是在接口中定義,或定義作爲@屬性。然後,您可以稍後使用其他方法訪問此播放器。

然後,當你想切換到一個新的聲音在另一個方法,你可以嘗試:

[player pause]; // stop the player from playing 
[player release]; // free the reference count 
// start a new plaer 
player = [[AVPlayer playerWithURL: 
     [NSURL URLWithString:@"http://www.mysite.com/nextsound.mp3"]] retain]; 

你應該小心與「留用」來電來訪。 playerWithURL將傳遞一個自動釋放對象,所以根據你在autorelease池中你在別的地方做什麼,並且取決於你是否在它的定義中使用了包含(保留)的屬性,你可能不需要在這裏調用retain。