2017-05-04 9 views
2

キリル文字のテキスト読み上げノードjsモジュールを作成しようとしています。Powershellノードjsを介したキリル文字入力コード

私はnode-powershellを使用して.NET TTSコマンドを実行します。そしてそれはラテンのシンボルでうまく動作しますが、キリル文字のシンボルには反応しません。

しかし、Powershellコンソールに直接コマンドを入力すると、キリル文字とラテン記号の両方でうまく動作します。 enter image description here

私は、問題点はnode.jsの出力エンコーディングであるという決定を下しました。

Node.jsのスクリプト:

var sayWin = (text) => { 
    var Shell = require('node-powershell'); 
    var shell = new Shell({ 
    inputEncoding: 'binary' //tried different endcoding 
    }); 
    shell.addCommand('Add-Type -AssemblyName System.speech'); 
    shell.addCommand('$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer'); 
    shell.addCommand('$speak.Speak("' + text + '")'); 
    shell.on('output', data => { 
    console.log("data", data); 
    }); 
    return shell.invoke(); 
} 

sayWin('latin'); //talk 

sayWin('кирилица'); //silence 

sayWin('\ufeffкирилица'); //silence trying with BOM 

、あなたは窓のTTS音声パッケージをインストールして、(私は以前にそれを行って)キリル文字のテキストを再生するには、デフォルトのシステムの声として、それを選択する必要があります注意してください。

答えて

0

可能性のある解決策の1つは、字幕をラテン語のアナログに変換することです。それは動作しますが、予想される結果からはほど遠いです(単語は発音できるほど良いとは言えません)。

var transliterate = function(word) { 
    var a = { "Ё": "YO", "Й": "I", "Ц": "TS", "У": "U", "К": "K", "Е": "E", "Н": "N", "Г": "G", "Ш": "SH", "Щ": "SCH", "З": "Z", "Х": "H", "Ъ": "'", "ё": "yo", "й": "i", "ц": "ts", "у": "u", "к": "k", "е": "e", "н": "n", "г": "g", "ш": "sh", "щ": "sch", "з": "z", "х": "h", "ъ": "'", "Ф": "F", "Ы": "I", "В": "V", "А": "a", "П": "P", "Р": "R", "О": "O", "Л": "L", "Д": "D", "Ж": "ZH", "Э": "E", "ф": "f", "ы": "i", "в": "v", "а": "a", "п": "p", "р": "r", "о": "o", "л": "l", "д": "d", "ж": "zh", "э": "e", "Я": "Ya", "Ч": "CH", "С": "S", "М": "M", "И": "yi", "Т": "T", "Ь": "'", "Б": "B", "Ю": "YU", "я": "ya", "ч": "ch", "с": "s", "м": "m", "и": "yi", "т": "t", "ь": "'", "б": "b", "ю": "yu" }; 
    return word.split('').map(function(char) { 
    return a[char] || char; 
    }).join(""); 
} 

var sayWin = (text) => { 

    text = /[а-яА-ЯЁё]/.test(text) ? transliterate(text) : text; 

    var shell = new Shell({ 
    inputEncoding: 'binary' 
    }); 
    shell.addCommand('Add-Type -AssemblyName System.speech'); 
    shell.addCommand('$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer'); 
    shell.addCommand('$speak.Speak("' + text + '")'); 
    shell.on('output', data => { 
    console.log("data", data); 
    }); 
    shell.on('err', err => { 
    console.log("err", err); 
    }); 
    shell.on('end', code => { 
    console.log("code", code); 
    }); 
    return shell.invoke().then(output => { 
    shell.dispose() 
    }); 
} 
関連する問題