iPhone:在我们开始下一首歌曲之前,第一首歌曲不会停止

标签 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方法。

可能是什么问题?

最佳答案

我已经为您制作了一个功能,可以在您开始新流时杀死旧播放器:

- (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];
}

将它安装在您的 View Controller 中并使用它代替原始的 [[AudioStreamer alloc] initWithURL:url]

关于iPhone:在我们开始下一首歌曲之前,第一首歌曲不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728644/

相关文章:

ios - iOS 中的 Google Drive 集成在调用插入时出错

ios - 如何让 iPhone 应用程序启动后崩溃?

ios - 如何在应用程序运行时释放标签栏 View ?

objective-c - 在特定位置将对象从一个数组添加到另一个数组

iphone - 如何优化quartz 2d?

iphone - 以模态方式呈现 UIImagePickerController 时出错

iphone - AVAudioPlayer 不加载声音

ios - 我的animatewithduration,完成 block 只执行一次

iphone - 如何将特定 View 的方向更改为横向?

iphone - AdMob 崩溃并显示 [GADObjectPrivate changeState :]: unrecognized selector