2011-07-18 10 views
3

私のアプリケーションでバッファリングして曲を再生します。iPhone:次の曲を開始する前に最初の曲が停止しない

別の曲を(ボタンをクリックして)再生したいです。

しかし、両方の曲を一緒に再生します。それをやめようとしても最初の曲は止まらない。

私はマットギャラガーtutorialを呼ばれ、ここに私のコードです:

[streamer stop]; 


- (void)stop 
{ 
     @synchronized(self) 
     { 
      if (state == AS_WAITING_FOR_DATA || state == AS_STARTING_FILE_THREAD) 
       return; 
      if (audioQueue && 
       (state == AS_PLAYING || state == AS_PAUSED || 
        state == AS_BUFFERING || state == AS_WAITING_FOR_QUEUE_TO_START)) 
    { 
     self.state = AS_STOPPING; 
     stopReason = AS_STOPPING_USER_ACTION; 
     err = AudioQueueStop(audioQueue, true); 
     if (err) 
     { 
      [self failWithErrorCode:AS_AUDIO_QUEUE_STOP_FAILED]; 
      return; 
     } 
    } 
    else if (state != AS_INITIALIZED) 
    { 
     self.state = AS_STOPPED; 
     stopReason = AS_STOPPING_USER_ACTION; 
    } 
    seekWasRequested = NO; 
} 

while (state != AS_INITIALIZED) 
{ 
    [NSThread sleepForTimeInterval:0.1]; 
} 
} 

このstreamerは、バッファリングのsto​​pメソッドを呼び出します。

何が問題なのですか?

+0

デバッガでコードを実行しましたか? AudioQueueStop呼び出しに達していますか? – onnoweb

+0

@onnoweb:はい、デバッガ&AudioQueueStopも呼び出します。 –

+1

結果コードを確認しましたか? http://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/uid/TP40005117-CH5g-RCM0127 – andreamazz

答えて

1

私はあなたが新しいストリームを開始するときに、古いプレイヤーを殺すことができる機能を作っています

- (void)playURL:(NSURL*)url { 
    if (streamer == nil) { 
     streamer = [[AudioStreamer alloc] initWithURL:url]; 
     return; 
    } 
    if ([streamer isPlaying]) { 
     [streamer stop]; 
     [streamer release]; 
    } 
    streamer = [[AudioStreamer alloc] initWithURL:url]; 
} 

あなたのViewControllerでそれをインストールし、生[[AudioStreamerのalloc] initWithURLの代わりにそれを使用します。 URL]

関連する問題