0

http://zaldzbugz.posterous.com/how-to-search-a-string-inside-uiwebviewのjavascriptプログラムを使用して、htmlページと次のメソッドを解析しています。

-(void)speakText:(NSString *)text
{


    NSString *filePath  = [[NSBundle mainBundle] pathForResource:@"UIWebViewSearch" ofType:@"js" inDirectory:@""];
    NSData *fileData    = [NSData dataWithContentsOfFile:filePath];
    NSString *jsString  = [[NSMutableString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
    text =jsString;
    NSMutableString *cleanString;
    cleanString = [NSMutableString stringWithString:@""];
    if([text length] > 1)
    {
        int x = 0;
        while (x < [text length])
        {
            unichar ch = [text characterAtIndex:x];
            [cleanString appendFormat:@"%c", ch];
            x++;
        }
    }
    if(cleanString == nil)
    {   // string is empty
        cleanString = [NSMutableString stringWithString:@""];
    }
    sound = flite_text_to_wave([cleanString UTF8String], voice);
    NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *recordingDirectory = [filePaths objectAtIndex: 0];
    // Pick a file name
    NSString *tempFilePath = [NSString stringWithFormat: @"%@/%s", recordingDirectory, "temp.wav"];
    // save wave to disk
    char *path; 
    path = (char*)[tempFilePath UTF8String];
    cst_wave_save_riff(sound, path);
    // Play the sound back.
    NSError *err;
    [audioPlayer stop];
    audioPlayer =  [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:tempFilePath] error:&err];
    [audioPlayer setDelegate:self];
    //[audioPlayer prepareToPlay];
    [audioPlayer play];
    // Remove file
    [[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];
    delete_wave(sound);

}

テキストを文字列入力の音声に変換するには、htmlテキストの代わりにテキストフィールドでエンコードされた形式を聞いています(NSLog(jsstring)を実行すると、JavaScriptコード全体が取得され、音声出力でも同じだと思います)。解決する時間が非常に短いので、助けてください...よろしくお願いします。

4

1 に答える 1

1

コードはJavaScriptファイルを音声に変換します。コード内のどの時点でもHTMLファイルをロードすることはなく、テキストをフィルターから除外することもできません。また、あなたが参照しているJavaScriptプログラムが実際にそれを達成するのに役立つとは思えません。私には、あなたがすでに知っているページ上のテキストの一部を見つけて強調表示することだけが適しているように見えます。

NSScannerApple docs )を調べることをお勧めします。これを使用すると、外部のJavaScriptプログラムを使用せずに、関連するビットのHTMLファイルをフィルタリングできます。ただし、多少の手間がかかります。完璧なHTMLがあればNSXMLParser、より簡単な解決策になりますが、それを信頼できるかどうかはわかりません。サードパーティのフレームワークを使用した既製のソリューションがあるかもしれませんが、残念ながら、これについてアドバイスすることはできません。StackExchangeに関するこの質問も役立つ場合があります。ObjectiveCのHTMLコンテンツからのみテキストを抽出します。

HTMLの解析に関係なく、とにかくコードでいくつかの奇妙なことが起こっています。たとえば、後で4行を変更せずに上書きするときに、メソッド(NSString *) textのパラメーターとして使用するのはなぜですか。そして、なぜ面倒な文字ごとのコピーをにするのですか?speakText:texttextcleanString

于 2012-05-29T14:40:23.930 に答える