如何解决将“AVSpeechSynthesizer”与“MPRemoteCommandCenter”一起使用
我需要使用 AVSpeechSynthesizer
向我的用户朗读文本。
用户将使用 AirPods 控制阅读,因此我需要使用 MPRemoteCommandCenter
。
现在,我需要使用 AVSpeechSynthesizer.write(_:toBufferCallback:)
创建我的音频文件,创建播放列表并使用 AVQueuePlayer
读取它。
它有效。但是准备音频文件需要时间。我更喜欢在后台模式下直接使用 AVSpeechSynthesizer.speak(_:)
,并通过 MPRemoteCommandCenter
命令激活它。
这可能吗?或者可能有什么解决方法?
谢谢!
解决方法
我有同样的问题,现在弄清楚 你唯一需要做的事情
try? AVAudioSession.sharedInstance().setCategory(.playback)
一开始。不要使用.duckOthers
,.mixWithOthers
将目标添加到远程命令
func addRemoteCommandCenter() {
let rcc = MPRemoteCommandCenter.shared()
//添加暂停监听
rcc.pauseCommand.addTarget(self,action: #selector(playOrPauseEvent(_:)))
//添加播放监听
rcc.playCommand.addTarget(self,action: #selector(playOrPauseEvent(_:)))
//下一首
rcc.nextTrackCommand.addTarget(self,action: #selector(nextCommandEvent(_:)))
//上一首
rcc.previousTrackCommand.addTarget(self,action: #selector(previousCammndEvent(_:)))
//耳机暂停和播放的监听
rcc.togglePlayPauseCommand.addTarget(self,action: #selector(togglePlayPauseCommand(_:)))
}
在 speechSynthesizer(_:didStart:)
和 speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
处更新 UI
let infoCenter = MPNowPlayingInfoCenter.default()
infoCenter.nowPlayingInfo = [MPMediaItemPropertyTitle:"Title",MPMediaItemPropertyArtist: "Artist",MPMediaItemPropertyAlbumTitle: "",MPMediaItemPropertyArtwork: MPMediaItemArtwork(boundsSize: CGSize(width: 120,height: 120),requestHandler: { (size) -> UIImage in
UIImage()
})]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。