音频文件的 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 — 音频设备休眠?
在后台使用 AVSpeechSynthesizer [关闭]