AVSpeechSynthesizer发音音频文件

时间:2013-12-16 00:46:47

标签: ios ios7 avspeechsynthesizer

我在我的应用程序中使用AVSpeechSynthesizer,我希望将语音文本保存到音频文件或AVAsset。我浏览了Apple的文档并没有看到任何内容,但我发现了一个问题以确定。以下是我目前的代码。

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

1 个答案:

答案 0 :(得分:4)

可以录制您的应用生成的音频(而不是其他应用)。虽然AVSpeech不提供用于保存生成的音频的API,但Apple还有其他可以执行此操作的API。解决方案可能不像你想的那样干净,但它应该有效。

Apple提供了一个名为Audio Unit Framework的框架来管理高级音频处理和录制。这是iOS SDK(据我所知)中唯一可以同时播放和录制音频的框架。 Audio Unit Hosting Guide看起来很有希望,Audio Mixer Sample App也是如此。

注意:我没有尝试过使用AVSpeechSynthesizer的音频单元框架(它可能也可能不起作用)。但是,考虑到AVSpeechSynthesizer与CoreAudio的搭配很好,那么它很可能适用于AudioUnits。


如果上述解决方案不起作用,那么一个简单的解决方法就可以解决问题。 AVSpeechSynthesizer不需要任何网络连接即可正常运行,因此在许多情况下,您可能需要来保存音频。相反,您可以使用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即可。我确实意识到这个解决方案不适用于所有情况(例如,如果您需要将音频文件发送给某人)。


这些只是针对该问题的几种可能的解决方案,这两种解决方案都是解决方法,根据您的具体情况,可能会也可能不会起作用。因人而异。祝你好运!