音频文件的 AVSpeechSynthesizer 话语

Posted

技术标签:

【中文标题】音频文件的 AVSpeechSynthesizer 话语【英文标题】:AVSpeechSynthesizer utterance to audio file 【发布时间】:2013-12-16 00:46:46 【问题描述】:

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

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

【问题讨论】:

此 API 是新的,因此它可能缺少某些稍后可能会添加的功能。也许研究一种录制正在播放的音频的方法? 是的,我已经设置了一个 AVAudioRecoder,但只是想看看是否有更清洁的解决方案 您找到了适合这个问题的解决方案吗?我正在寻找类似的东西。 我也在寻找解决方案。如果你找到了,请告诉我。谢谢 我也尝试过 AVAudioRecorder 方法,但是它不适合,因为外部的噪音也会被捕获。我希望有一种更相关的方法来实现这一目标。您可以从 AVSpeechUtterance 静默创建音频文件。 【参考方案1】:

可以录制您的应用程序(而不是其他应用程序)生成的音频。虽然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。祝你好运!

【讨论】:

Sam 回答的第一部分很好——Apple 确实提供了使用音频单元和音频处理队列来操作、录制和播放音频的资源,但是它使用起来非常复杂,可能比你愿意投资。但是,如果您觉得这是您唯一的选择,您应该研究一下 The Amazing Audio Engine,它为 Apple 的 Core Audio 框架提供了一个更易于使用的界面。 Amazing Audio Engine Website

以上是关于音频文件的 AVSpeechSynthesizer 话语的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 avspeechsynthesizer 保存音频?

AVSpeechSynthesizer 和 AirPlay — 音频设备休眠?

将音频流保存到 mp3 文件 (iOS)

在后台使用 AVSpeechSynthesizer [关闭]

如何通过呼叫接收扬声器播放 AVSpeechSynthesizer?

后台模式下的 AVSpeechSynthesizer