iPhone: Первая песня не останавливается, прежде чем мы начнем следующую песню - PullRequest
3 голосов
/ 18 июля 2011

Я играю песню путем буферизации в моем приложении.

Я хочу воспроизвести другую песню (нажав кнопку).

Но он играет обе песни вместе. Это не останавливает первую песню, даже когда я пытаюсь остановить ее.

Я упоминал Мэтта Галлахера учебник и вот мой код:

[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 вызывает метод остановки буферизации.

В чем может быть проблема?

1 Ответ

1 голос
/ 01 августа 2011

Я сделал вам функцию, которая может убить старого игрока при запуске нового потока:

- (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 и используйте его вместо raw [[AudioStreamer alloc] initWithURL: url]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...