<分区>
实现类似于 AppleScript 的 say "words"
的东西有多难?
也就是说,它只是一个二进制链接和一个导入,还是像 libxml 实现一样困惑的东西?
编辑:我的回答解决了这个问题。
- 阿卡佩拉
- 伊沃娜
- 网站不提供与其他网站相同的 iOS 版本
- 不感兴趣
- 语音文本
- 打开耳朵
- 开源,绝对加分
- 迄今为止我听说过的最好的离线 TTS。
- 飞来飞去
- 质量极低,不值得使用
- 照原样糟透了。 OE 对此进行了很大改进。
- 谷歌语音合成
我已经调查过了,不幸的是,这些选项要么非常昂贵,要么质量很差:
与此相关,您可以通过以下方式使用 Google 的在线 TTS(代码取自 iPhone SDK - Google TTS and encoding):
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];
}
Apple 的画外音框架是私有(private)的,只能用于辅助功能。至少如果您希望您的申请获得批准。但是,如果您想在决定使用哪个系统时使用它,这里是:
// 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];
}