首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“`MPRemoteCommandCenter`”中使用“`AVSpeechSynthesizer`”

在“`MPRemoteCommandCenter`”中使用“`AVSpeechSynthesizer`”
EN

Stack Overflow用户
提问于 2021-02-24 09:48:51
回答 1查看 158关注 0票数 0

我需要使用AVSpeechSynthesizer来读取文本给我的用户。

用户将使用AirPods控制读取,所以我需要使用MPRemoteCommandCenter

现在,我需要使用AVSpeechSynthesizer.write(_:toBufferCallback:)准备我的音频文件--创建一个播放列表,并使用AVQueuePlayer读取它。

它起作用了。但是准备音频文件需要时间。我更喜欢在后台模式下直接使用AVSpeechSynthesizer.speak(_:),并通过MPRemoteCommandCenter命令激活它。

这个是可能的吗?或者有什么解决办法?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 09:13:50

我也有同样的问题,现在想出你唯一需要做的事

代码语言:javascript
复制
try? AVAudioSession.sharedInstance().setCategory(.playback)

刚开始的时候。不要使用.duckOthers.mixWithOthers

addTarget到RemoteCommand

代码语言:javascript
复制
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

代码语言:javascript
复制
        let infoCenter = MPNowPlayingInfoCenter.default()        
    infoCenter.nowPlayingInfo = [MPMediaItemPropertyTitle:"Title", MPMediaItemPropertyArtist: "Artist", MPMediaItemPropertyAlbumTitle: "", MPMediaItemPropertyArtwork: MPMediaItemArtwork(boundsSize: CGSize(width: 120, height: 120), requestHandler: { (size) -> UIImage in
           UIImage()
    })]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66348374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档