AVSpeechSynthesizer发音到audio文件

我正在使用AVSpeechSynthesizer在我的应用程序,我正在寻找将口头文本保存到audio文件或AVAsset。 我浏览了苹果公司的文档,没有看到任何东西,但认为我会发布一个问题,以确保。 以下是我目前的代码。

AVSpeechUtterance * utterance = [AVSpeechUtterance speechUtteranceWithString:textView.text]; float rate = [speedSlider value]/1.5; utterance.rate = rate; [speechSynthesizer speakUtterance:utterance]; 

可以录制由您的应用程序生成的audio(而不是从其他应用程序)。 尽pipeAVSpeech没有提供API来保存生成的audio,但苹果公司还有其他的API可以完成这项工作。 解决scheme可能不是你想要的那么干净,但它应该工作。

Apple提供了一个名为Audio Unit Framework的框架来pipe理高级audio处理和logging。 这是iOS SDK中唯一可以同时播放和录制audio的框架(据我所知)。 audio单元主机指南看起来很有希望, audio混音器示例应用程序也是如此。

注意:我还没有尝试使用audio单元框架与AVSpeechSynthesizer(它可能会或可能不会工作)。 不过,考虑到AVSpeechSynthesizer与CoreAudio的搭配很好,那么它很可能会与AudioUnits一起工作。


如果上述解决scheme不起作用,那么一个简单的解决方法可能会诀窍。 AVSpeechSynthesizer不需要任何networking连接就可以正常工作,所以在很多情况下你可能不需要保存audio。 相反,您可以使用NSFileManager保存文本以供日后使用:

 NSString *textToSynthesize = @"Just what do you think you are doing, Dave?"; NSError *error; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths firstObject]; [textToSynthesize writeToFile:[documentsDirectory stringByAppendingPathComponent:@"synthText.txt"] atomically:YES encoding:NSUTF8StringEncoding error:&error]; 

当您准备合成文本时,只需从文件中读取文件并将其插回到AVSpeechSynthesizer 。 我意识到这个解决scheme在所有情况下都不起作用或应用(例如,如果您需要将audio文件发送给某人)。


这些只是这个问题的一些可能的解决scheme,两者都是解决方法,根据您的具体情况可能会或可能不会。 因人而异。 祝你好运!