I use the new method that writes a speech utterance to file:
func write(AVSpeechUtterance, toBufferCallback: AVSpeechSynthesizer.BufferCallback)
And judging whether the write has ended by whether the buffer length is 0.
synthesis.write(utterance) { (buffer) in
guard let pcmBuffer = buffer as? AVAudioPCMBuffer else {
log("unknow buffer type: (buffer)")
return
}
if pcmBuffer.frameLength == 0 {
print("Finished")
self.writeComplete()
}
else {
self.writeToFile(buffer: pcmBuffer)
}
}
It works well on iOS 16 and early,but on iOS 17(my device is 17.2.1), no pcmBuffer callback whose frameLength is 0,so i cant know write is complete,causing my
writeComplete` method never to be called.
Is there a better (or more accurate) way to determine write completion?