19

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

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

1 回答 1

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. 我确实意识到这个解决方案不会在所有情况下都有效或适用(例如,如果您需要将音频文件发送给某人)。


这些只是该问题的一些可能的解决方案,它们都是变通方法,可能会或可能不会根据您的具体情况起作用。YMMV。祝你好运!

于 2014-07-20T21:09:46.713 回答