Хорошо. Итак, вот несколько довольно плохой код, который я сделал, чтобы установить новую песню и список воспроизведения для системного музыкального проигрывателя. Это работает, но это неэффективно. Под этим я подразумеваю, что хотя установка новой песни при ее воспроизведении работает нормально, если у плеера нет песни и нет плейлиста (что часто случается, даже если основное музыкальное приложение регистрирует его, очевидно, оно приостановлено), тогда потребуется около 5 секунд, чтобы установить новый список воспроизведения и получить воспроизведение песни. Мне нужно написать эффективный код, чтобы сделать это, не занимая 5 секунд. Тем не менее, мне также нужно очистить предыдущий список воспроизведения, прежде чем я начну играть новую песню, потому что, если есть играющая песня, и я просто пытаюсь заменить ее новым списком воспроизведения (это отлично работает в случае нулевого, но это все еще занимает 5 секунд), все музыкальные приложения на телефоне будут зависать, и мне придется перезагрузить телефон, прежде чем я смогу использовать их снова.
Итак, чтобы повторить, не удаляя базовую функциональность (очистите предыдущий плейлист, если он не равен нулю, добавьте новый плейлист, добавьте новую, теперь воспроизводимую песню, играйте песню), как мне сделать это более эффективным.
Спасибо.
musicController1 = [MPMusicPlayerController systemMusicPlayer]; //make the music controller
MPMediaItem *nullCHK1 = [musicController1 nowPlayingItem]; //if its empty, take evasive action!
if (nullCHK1.title == NULL){
[musicController1 setQueueWithQuery: everything];
[musicController1 setNowPlayingItem:item];
//[self changeSongValues]; //set current song (will not update but thats fine)
[musicController1 prepareToPlay];
[musicController1 play];
}
//we first need to make sure that we are not playing anything so our phone doesn't crash
MPMediaPropertyPredicate *predicate =
[MPMediaPropertyPredicate predicateWithValue: @"Non_Existant_Song_Name"
forProperty: MPMediaItemPropertyTitle];
MPMediaQuery *q = [[MPMediaQuery alloc] init];
[q addFilterPredicate: predicate];
[musicController1 setQueueWithQuery:q];
musicController1.nowPlayingItem = nil;
[musicController1 stop];
//then we set a new play state
//NSLog(@"index: %d", selectedItem);
[musicController1 setQueueWithQuery: everything];
[musicController1 setNowPlayingItem:item];
//[self changeSongValues]; //set current song (will not update but thats fine)
[musicController1 prepareToPlay];
[musicController1 play];