この記事は公開から3年以上経過しています。
過去のエントリで紹介したVSCode Macros拡張を使って、Windows10上のVSCodeでエディタで選択されているテキストを音声で読み上げるマクロの作り方を紹介します。
本マクロは.NET FrameworkのライブラリをNode.js(javascript)から呼び出してVSCodeのwaitProgressからプロセスを終了させるサンプルです。あまり長いテキストを読み上げさせるとchild_process
側でエラーとなってしまいます。
2024.10.2追記:
本格的に読み上げたい場合はVS Code Speech拡張が良さそうです(VS Code Speechの日本語言語サポート拡張で日本語も対応可能)。
サンプルソースコード
Node.jsのchild_process.spawn()
を使ってpowershell
コマンドを起動することで.NETの音声合成エンジンライブラリを実行します。音声再生はプログレスダイアログのキャンセルボタンを押下することで終了可能です。
※マクロコンフィギュレーション部分のマクロ名と順番は、現在お使い頂いているマクロファイルに合わせてご利用ください。
const vscode = require('vscode');
const cp = require('child_process');
/**
* マクロコンフィギュレーション
*/
module.exports.macroCommands = {
テキスト読み上げ: {
no: 1,
func: speak,
},
};
/**
* テキスト読み上げ
*/
async function speak() {
const editor = vscode.window.activeTextEditor;
if (editor) {
const document = editor.document;
const selection = editor.selection;
const text = document.getText(selection);
if (text.length > 0) {
// 選択テキストのダブルクォーテーションをエスケープ
const message = text.replace(/["]+/g, '""');
// プログレスダイアログ表示
await vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
title: 'ReadTextAloud',
cancellable: true,
},
async (progress, token) => {
return new Promise((resolve) => {
// PowerShellコマンドでテキスト読み上げ
const childProcess = cp.spawn('powershell.exe', ['-Command', `Add-Type -AssemblyName System.Speech;(New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak("${message}");`]);
childProcess.on('close', () => resolve());
// プログレスダイアログでキャンセルを押下したらPowerShellの読み上げプロセスを終了
token.onCancellationRequested(() => childProcess.kill());
});
}
);
}
}
}
参考ウェブサイトなど
- Microsoft Docs
SpeechSynthesizer Class
以上です。