0

AVSpeechSynthesizerユーザーにテキストを読むために使用する必要があります。

ユーザーは AirPods で読み取りを制御するため、 を使用する必要がありますMPRemoteCommandCenter

AVSpeechSynthesizer.write(_:toBufferCallback:)今のところ、プレイリストの作成を使用してオーディオ ファイルを準備し、AVQueuePlayer.

できます。ただし、音声ファイルの準備には時間がかかります。AVSpeechSynthesizer.speak(_:)バックグラウンド モードで直接使用し、コマンド経由でアクティブ化することを好みMPRemoteCommandCenterます。

これは可能ですか?または、おそらく回避策はありますか?

ありがとうございました!

4

1 に答える 1

2

私は同じ問題を抱えており、今あなたがする必要がある唯一のことを理解しています

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

はじまりに。使用しない.duckOthersでください。.mixWithOthers

addTarget に 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(_:)))
}

UIを更新しますspeechSynthesizer(_:didStart:)speechSynthesizer(_: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 に答える