以编程方式将文本保存为音频文件

5

如图所示,可以将文本保存为音频文件。现在我的问题是如何以编程方式实现相同的功能。

非常感谢任何帮助。

2个回答

4

NSSpeechSynthesizer可以完成这项工作。

假设我们有以下属性:

@property  NSSpeechSynthesizer *synth;

我们可以这样初始化:

...

synth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];

我们可以做到以下事情:
NSURL *saveURL = [NSURL fileURLWithPath:[@"~/Desktop/SpokenText.aiff" stringByExpandingTildeInPath]];
[synth startSpeakingString:@"A spoken short text" toURL:saveURL];

在保存之前,我们可能需要更改语音或音量:

[synth setVolume:0.5f];
[synth setVoice:voiceID];

其中volume的值用浮点数表示,范围从0.0到1.0,voiceID是一个语音识别符




查看所有可用的语音识别符:

NSArray *voiceIdentifiers = [NSSpeechSynthesizer availableVoices];
NSLog(@"%li %@",voiceIdentifiers.count,voiceIdentifiers);

在安装了所有语音的 OS X 10.10.3 上的输出结果:
101 (
    "com.apple.speech.synthesis.voice.Agnes",
    "com.apple.speech.synthesis.voice.Albert",
    "com.apple.speech.synthesis.voice.Alex",
    "com.apple.speech.synthesis.voice.alice.premium",
    "com.apple.speech.synthesis.voice.allison.premium",
    "com.apple.speech.synthesis.voice.alva.premium",
    "com.apple.speech.synthesis.voice.amelie.premium",
    "com.apple.speech.synthesis.voice.angelica.premium",
    "com.apple.speech.synthesis.voice.anna.premium",
    "com.apple.speech.synthesis.voice.audrey.premium",
    "com.apple.speech.synthesis.voice.aurelie.premium",
    "com.apple.speech.synthesis.voice.ava.premium",
    "com.apple.speech.synthesis.voice.BadNews",
    "com.apple.speech.synthesis.voice.Bahh",
    "com.apple.speech.synthesis.voice.Bells",
    "com.apple.speech.synthesis.voice.Boing",
    "com.apple.speech.synthesis.voice.Bruce",
    "com.apple.speech.synthesis.voice.Bubbles",
    "com.apple.speech.synthesis.voice.carlos.premium",
    "com.apple.speech.synthesis.voice.carmit.premium",
    "com.apple.speech.synthesis.voice.catarina.premium",
    "com.apple.speech.synthesis.voice.Cellos",
    "com.apple.speech.synthesis.voice.cem.premium",
    "com.apple.speech.synthesis.voice.chantal.premium",
    "com.apple.speech.synthesis.voice.claire.premium",
    "com.apple.speech.synthesis.voice.damayanti.premium",
    "com.apple.speech.synthesis.voice.daniel.premium",
    "com.apple.speech.synthesis.voice.Deranged",
    "com.apple.speech.synthesis.voice.diego.premium",
    "com.apple.speech.synthesis.voice.ellen.premium",
    "com.apple.speech.synthesis.voice.ewa.premium",
    "com.apple.speech.synthesis.voice.federica.premium",
    "com.apple.speech.synthesis.voice.felipe.premium",
    "com.apple.speech.synthesis.voice.fiona.premium",
    "com.apple.speech.synthesis.voice.Fred",
    "com.apple.speech.synthesis.voice.GoodNews",
    "com.apple.speech.synthesis.voice.henrik.premium",
    "com.apple.speech.synthesis.voice.Hysterical",
    "com.apple.speech.synthesis.voice.ioana.premium",
    "com.apple.speech.synthesis.voice.iveta.premium",
    "com.apple.speech.synthesis.voice.joana.premium",
    "com.apple.speech.synthesis.voice.jorge.premium",
    "com.apple.speech.synthesis.voice.juan.premium",
    "com.apple.speech.synthesis.voice.Junior",
    "com.apple.speech.synthesis.voice.kanya.premium",
    "com.apple.speech.synthesis.voice.karen.premium",
    "com.apple.speech.synthesis.voice.kate.premium",
    "com.apple.speech.synthesis.voice.Kathy",
    "com.apple.speech.synthesis.voice.katya.premium",
    "com.apple.speech.synthesis.voice.klara.premium",
    "com.apple.speech.synthesis.voice.kyoko.premium",
    "com.apple.speech.synthesis.voice.laura.premium",
    "com.apple.speech.synthesis.voice.lee.premium",
    "com.apple.speech.synthesis.voice.lekha.premium",
    "com.apple.speech.synthesis.voice.luca.premium",
    "com.apple.speech.synthesis.voice.luciana.premium",
    "com.apple.speech.synthesis.voice.magnus.premium",
    "com.apple.speech.synthesis.voice.mariska.premium",
    "com.apple.speech.synthesis.voice.markus.premium",
    "com.apple.speech.synthesis.voice.mei-jia.premium",
    "com.apple.speech.synthesis.voice.melina.premium",
    "com.apple.speech.synthesis.voice.milena.premium",
    "com.apple.speech.synthesis.voice.moira.premium",
    "com.apple.speech.synthesis.voice.monica.premium",
    "com.apple.speech.synthesis.voice.nicolas.premium",
    "com.apple.speech.synthesis.voice.nikos.premium",
    "com.apple.speech.synthesis.voice.nora.premium",
    "com.apple.speech.synthesis.voice.oliver.premium",
    "com.apple.speech.synthesis.voice.oskar.premium",
    "com.apple.speech.synthesis.voice.otoya.premium",
    "com.apple.speech.synthesis.voice.paola.premium",
    "com.apple.speech.synthesis.voice.paulina.premium",
    "com.apple.speech.synthesis.voice.petra.premium",
    "com.apple.speech.synthesis.voice.Organ",
    "com.apple.speech.synthesis.voice.Princess",
    "com.apple.speech.synthesis.voice.Ralph",
    "com.apple.speech.synthesis.voice.samantha.premium",
    "com.apple.speech.synthesis.voice.sara.premium",
    "com.apple.speech.synthesis.voice.satu.premium",
    "com.apple.speech.synthesis.voice.serena.premium",
    "com.apple.speech.synthesis.voice.sin-ji.premium",
    "com.apple.speech.synthesis.voice.soledad.premium",
    "com.apple.speech.synthesis.voice.susan.premium",
    "com.apple.speech.synthesis.voice.tarik.premium",
    "com.apple.speech.synthesis.voice.tessa.premium",
    "com.apple.speech.synthesis.voice.thomas.premium",
    "com.apple.speech.synthesis.voice.ting-ting.premium",
    "com.apple.speech.synthesis.voice.tom.premium",
    "com.apple.speech.synthesis.voice.Trinoids",
    "com.apple.speech.synthesis.voice.veena.premium",
    "com.apple.speech.synthesis.voice.Vicki",
    "com.apple.speech.synthesis.voice.Victoria",
    "com.apple.speech.synthesis.voice.Whisper",
    "com.apple.speech.synthesis.voice.xander.premium",
    "com.apple.speech.synthesis.voice.yannick.premium",
    "com.apple.speech.synthesis.voice.yelda.premium",
    "com.apple.speech.synthesis.voice.yuna.premium",
    "com.apple.speech.synthesis.voice.yuri.premium",
    "com.apple.speech.synthesis.voice.Zarvox",
    "com.apple.speech.synthesis.voice.zosia.premium",
    "com.apple.speech.synthesis.voice.zuzana.premium"
)

尝试过了,但是bool b = [synthesizer startSpeakingString:@"I have started speaking" toURL:[NSURL URLWithString:@"/Desktop"]]; 返回true,但找不到文件。 - Rajesh
太酷了,谢谢。我还将URL创建的代码添加进去,这样答案更清晰明了。 - user3577225
1
太好了!那么针对同样的情况,iOS 有什么解决方案吗? - Rajesh

0

我的问题是将其保存为音频文件而不是通过扬声器播放。我需要Mac支持。 - Rajesh
录制音频不是一个好主意。 - Rajesh
如何进行转换是我的问题。 - Rajesh
让我们在聊天中继续这个讨论 - Rahul Mayani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接