iPhone上的文字转语音

Thr*_*dyn 5 iphone cocoa-touch objective-c text-to-speech

实现与AppleScript类似的东西有多难say "words"
也就是说,它只是一个二进制链接和一个导入,还是一个像libxml实现一样凌乱的东西?

编辑:我的回答解决了这个问题.


  • Acapela
    • 一个严肃的ripoff
    • SDK为250欧元,而且不包括更新
  • 伊沃娜
    • 网站不会与其他网站一起展示iOS版本
    • 没兴趣
  • VoiceText
    • 网站很难看,难以浏览
    • 没兴趣
  • OpenEars
    • 开源,一定要加
    • 到目前为止,我听说过最好的离线TTS.
  • 弗莱特
    • 超低质量,不值得使用
    • 糟透了.OE改进了很多.
  • 谷歌TTS
    • 很好,但需要网络连接
    • 不理想

Jan*_*ano 7

我已经调查了这一点,不幸的是,选项要么非常昂贵,要么质量差:

与此相关的是,您可以使用Google的在线TTS(从iPhone SDK中获取的代码- Google TTS和编码):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"file.mp3"];

NSString *text = @"You are one chromosome away from being a potato.";
NSString *urlString = [NSString stringWithFormat:@"http://www.translate.google.com/translate_tts?tl=en&q=%@",text];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
[request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" forHTTPHeaderField:@"User-Agent"];
NSURLResponse* response = nil;
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request
                                     returningResponse:&response
                                                 error:&error];
[data writeToFile:path atomically:YES];

AVAudioPlayer  *player;
NSError        *err;
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) 
{    
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:
              [NSURL fileURLWithPath:path] error:&err];
    player.volume = 0.4f;
    [player prepareToPlay];
    [player setNumberOfLoops:0];
    [player play];    
}
Run Code Online (Sandbox Code Playgroud)

Apple的配音框架是私有的,只能用于访问.至少如果您希望申请获得批准.但是如果你想在决定使用什么系统时使用它,这里是:

// Not App Store safe. Only available in real devices.
// See http://arstechnica.com/apple/2010/02/iphone-voiceservices-looking-under-the-hood/

#define RTLD_LAZY 0x1
#define RTLD_NOW 0x2
#define RTLD_LOCAL 0x4
#define RTLD_GLOBAL 0x8

NSObject *voiceSynthesizer;
void *voiceServices;

-(void) say:(NSString*)text {
    if (!voiceSynthesizer)
    {
        NSString *vsLocation = @"/System/Library/PrivateFrameworks/VoiceServices.framework/VoiceServices";
        voiceServices = dlopen(vsLocation.UTF8String, RTLD_LAZY);
        voiceSynthesizer = [NSClassFromString(@"VSSpeechSynthesizer") new];
    }
    [voiceSynthesizer performSelector:@selector(startSpeakingString:) withObject:text];
}
Run Code Online (Sandbox Code Playgroud)


Thr*_*dyn 1

从关于 SO 的一些问题(忘了是哪一个,再也找不到了),我得到了OpenEars的链接。
对于这么轻的东西,我真的没什么可抱怨的。

插入起来有点混乱,但文档都是针对 Xcode 4 的。除非用户错误,否则它不会爆炸项目。有一些警告(其中一些看起来应该会导致运行时崩溃),但到目前为止看起来还不错。

编辑:最新的 OE 版本更容易安装。绝对推荐。

  • OpenEars 的质量实际上与 flite 相同。这意味着它的质量很差 (2认同)