AVSpeechSynthesizer:如何在默认播放器视图中显示

问题描述

我使用AVSpeechSynthesizer通过音频播放教科书。

private lazy var synthesizer: AVSpeechSynthesizer = {
    let synthesizer = AVSpeechSynthesizer()
    synthesizer.delegate = self
    return synthesizer
  }()

let utterance = AVSpeechUtterance(string: text)
    utterance.voice = AVSpeechSynthesisVoice(
      language: languageIdentifier(from: language)
    )
    synthesizer.speak(utterance)

我想在iPhone的认播放器视图中更新信息(可能是命名错误?):

enter image description here

  • 指示正在播放章节的文字
  • 启用下一个按钮以播放下一章

我该怎么做?

解决方法

我真的不认为您希望通过这种方式来破解自己的方法。但是,如果您真的这样做,我会:

  • 听远程命令(this.navigationArray = this.navigationArray.map(({ childNodes,relativeUri }) => ({ childNodes: child,href: relativeUri })),请参阅Apple Sample Project
  • UIApplication.sharedApplication().beginReceivingRemoteControlEvents()上设置属性:MPNowPlayingInfoCenter
  • 实施MPNowPlayingInfoCenter.default().nowPlayingInfo[MPMediaItemPropertyTitle] = "Title",并尝试将委托函数映射到播放状态,并使用AVSpeechSynthesizerDelegate(如果可能,请输入idk)估算播放进度
  • 您可能必须使用speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)的{​​{1}}属性,才能更好地控制音频会话(设置类别等)