0

我需要用来AVSpeechSynthesizer向我的用户阅读文本。

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

AVSpeechSynthesizer.write(_:toBufferCallback:)现在,我需要使用创建播放列表来准备我的音频文件并使用AVQueuePlayer.

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

这可能吗?或者也许有任何解决方法?

谢谢!

4

1 回答 1

2

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

try? AVAudioSession.sharedInstance().setCategory(.playback)

一开始。不要使用.duckOthers.mixWithOthers

将目标添加到 RemoteCommand

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:)UIspeechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)

        let infoCenter = MPNowPlayingInfoCenter.default()        
    infoCenter.nowPlayingInfo = [MPMediaItemPropertyTitle:"Title", MPMediaItemPropertyArtist: "Artist", MPMediaItemPropertyAlbumTitle: "", MPMediaItemPropertyArtwork: MPMediaItemArtwork(boundsSize: CGSize(width: 120, height: 120), requestHandler: { (size) -> UIImage in
           UIImage()
    })]
于 2021-02-26T09:13:50.027 回答