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

时间:2015-04-17 05:11:57

标签: objective-c macos

可以将文本保存为音频文件,如屏幕截图所示。现在我的问题是如何以编程方式执行相同操作。 enter image description here

任何帮助非常感谢。

2 个答案:

答案 0 :(得分:3)

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];

其中value for volume以浮点为单位表示,范围从0.0到1.0,voiceIDvoice identifier




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

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"
)

答案 1 :(得分:0)

从iOS 7 Apple开始提供以下API ...

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVSpeechSynthesizer_Ref/Reference/Reference.html

请参阅此回答https://stackoverflow.com/a/17465494/215748

#import <AVFoundation/AVFoundation.h>
…
AVSpeechUtterance *utterance = [AVSpeechUtterance 
                            speechUtteranceWithString:@"Hello world"];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];