以不同的音量同时播放两首受DRM保护的歌曲

时间:2017-08-06 22:30:09

标签: ios swift drm mpmusicplayercontroller apple-musickit

我正在尝试使用不同音量的两个不同MPMusicPlayerControllers创建效果。我可以创建一个MPMusicPlayerController并设置

的音量
let musicPlayerController = MPMusicPlayerController.systemMusicPlayer

let volumeController = MPVolumeView(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
self.view.addSubview(volumeController)

// get the UISlider for the MPVolumeView
let volumeSlider = volumeController.volumeSlider
volumeSlider.value = 0.5

musicPlayerController.play()

然而现在MPMusicPlayerController.volume is deprecated,我似乎无法找到一种方法来创建两个具有不同音量的MPMusicPlayerControllers ......我正在寻找类似这样的东西

let musicPlayerController = MPMusicPlayerController()
musicPlayerController.volume = 0.5
//set the song
musicPlayerController.play()

let otherPlayerController = MPMusicPlayerController()
otherPlayerController = 0.5
//set the song
otherPlayerController.play()

由于受DRM保护文件的限制,我无法使用AVAudioPlayer。基本上我正在尝试同时播放两个不同音量级别的受DRM保护的音乐文件。

是否有任何方法可以在iOS 10或11中的不同卷上创建(或具有相同的效果)两个不同的MPMusicPlayerControllers(类似于在同一MPMusicPlayerController上以不同的音量播放两首歌曲) ? Hacky的解决方法很受欢迎。

1 个答案:

答案 0 :(得分:1)

我联系了Apple,他们确认目前无法做到这一点。我提交了一个功能建议,希望我们将来能够看到这一点。

我的功能建议建议使用全局处理程序和委托,允许应用程序向处理程序发出命令(类似MPDRMMusicHandler.shared),然后通过委托MPDRMMusicDelegate接收对这些命令的响应,分配给音乐处理程序会话MPDRMMusicHandler

应用程序在任何时候都无法访问未加密的原始音乐数据,因为该应用程序只能发送要播放音乐的请求并设置其特征。然后,将在对这些命令的响应中调用委托函数 - 指示命令是否成功,或者如果失败则提供错误。受DRM保护的音乐的解密将全部由iOS处理,与应用程序分开(或者,至少在私人库中,开发人员“无法”访问)。