iPhone:在我们开始下一首歌之前,第一首歌并没有停止

时间:2011-07-18 04:31:46

标签: iphone objective-c cocoa-touch ios4

我通过在我的应用程序中缓冲来播放一首歌。

我想播放另一首歌(点击按钮)。

但它一起播放两首歌。即使我试图阻止它,它也不会停止第一首歌。

我提到了matt gallagher 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调用了缓冲的stop方法。

可能是什么问题?

1 个答案:

答案 0 :(得分: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]