iOS музыка началась с фона - PullRequest
0 голосов
/ 27 августа 2018

Я думаю о приложении для будильника iOS. Во время будильника я хочу воспроизводить музыку из Apple Music или другого источника.

К сожалению, фоновые операции приложения действительно ограничены, а уведомления позволяют воспроизводить только связанные музыкальные файлы. Есть ли способ достичь моей цели, используя фоновые задачи или что-то еще?

1 Ответ

0 голосов
/ 27 августа 2018

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

Изменить звук уведомления.

1. Импорт аудиофайлов.

  • Посетите музыкальную библиотеку iPod

    let mediaquery = MPMediaQuery()
    // MPMusicPlayerControllerNowPlayingItemDidChangeNotification
    if let musics = mediaquery.items {
        for music in musics {
            let title = music.valueForProperty(MPMediaItemPropertyTitle) as? String
    
            if let url = music.assetURL {
                saveNotificationSound(url,name: title,isLast: music == musics.last)
            }
        }
    }
    

    Важным параметром является assetURL, по нему можно получить аудиофайл. ВНИМАНИЕ: Если музыка загружается из Apple Music или в iCloud, она assertURL равна нулю.

  • Использовать общий доступ к файлам
    Как включить общий доступ к файлам для моего приложения

2. Обрезать звук до 30 с и указать формат для уведомления

Поскольку уведомление ограничено: 1. Продолжительность не более 30 с; 2. Формат ограничен, мы сокращаем его до m4a.

/**
 Cut the duration and convert to m4a, than save it. 

 - parameter audioPath:  Source file path 
 - parameter startTime:  Cut start time
 - parameter endTime:    Cut end time 
 - parameter saveDirect: ... 
 - parameter handler:    ...
 */
func cutoffAudio(audioPath: NSURL, startTime: Int64, endTime: Int64, saveDirect:NSURL, handler: (succeed: Bool) -> Void){

    let audioAsset = AVURLAsset(URL: audioPath, options: nil)

    if let exportSession = AVAssetExportSession(asset: audioAsset, presetName: AVAssetExportPresetAppleM4A){

        let startTime = CMTimeMake(startTime, 1)
        let stopTime = CMTimeMake(endTime, 1)

        exportSession.outputURL = saveDirect
        // Output is m4a
        exportSession.outputFileType = AVFileTypeAppleM4A
        exportSession.timeRange = CMTimeRangeFromTimeToTime(startTime, stopTime)

        exportSession.exportAsynchronouslyWithCompletionHandler({ 
            handler(succeed: exportSession.status == .Completed)
        })
    }
}

3. Установить как звук уведомления

Внимание: Пользовательские аудиофайлы можно поместить только в /Library/Sounds в приложении Песочница , тогда как soundName необходимо указать только имя файла (включая расширение) , аудио файлы, как в основном комплекте.

Вот демоверсия от github.com/ToFind1991

Код не совместим с текущей версией Swift, его необходимо настроить.

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