0

学生が外国語を学ぶのに役立つアプリを作成中です。設定のアクセシビリティメニューで「選択項目の読み上げ」をオンにすると、iPhone が Safari で外国語のテキストを読み上げることができることに気付きました。UIView に表示されている外国語 (NSString) を電話の組み込みのテキスト読み上げソフトウェアにプログラムで読み取らせることは可能ですか?

4

1 に答える 1

2

私も自分のアプリケーションに TTS を実装しようとしましたが、SDK で実装しようとしましたが、できません。今、私はGOOGLE TRANSLATE API [" http://www.translate.google.com/translate_tts?tl=en&q=%@ ",text"] を使用しています。これにより、テキストが変換され、実行する必要がある音声ファイルが提供されます。ドキュメントディレクトリに保存した後の音声ファイル [または好きなようにカスタマイズ]. このコードを使用するだけです. お役に立てれば幸いです.

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

    NSString *text = textToConvert.text;
    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];
    [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];


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


        player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&err];
//        player.delegate = self;

        [player prepareToPlay];
        [player play];
    }
于 2013-04-08T04:22:27.007 に答える