PC で入力を補助するツールです。 音声認識したテキストをクリップボードにコピーします。 アプリのテキスト入力のところで Ctrl-V ペースト(貼り付け)できます。
音声認識入力機能が無いアプリでの PC 初心者やキーボード入力が苦手な方 向けに作りました。
PC の Chrome や Edge で動きます。
ローカルだけで(スタンドアロンで)も動きますので、HTML ファイルをダウンロードしてPC のファイル エクスプローラでダブルクリックすれば、インターネットにつないでいなくても動きます。
- 音声認識&クリップボードコピー.htm (すぐ試せます)
https://jocular-pasca-94f581.netlify.app/
(下にあるソースプログラムと同じものです。)
広告なし。 通信なし。 情報取集なし。 インストールなし。 もちろん無料。
Windows10 , Windos11 で動作確認しています。
実行画面例
音声認識&クリップボードコピーアプリ ソースプログラム
音声認識&クリップボードコピー.htm (UTF-8 で保存)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>音声認識&クリップボードコピー</title>
<style>
body {
font-family: sans-serif;
max-width: 600px;
margin: 20px auto;
padding: 0 10px;
}
textarea {
width: 100%;
height: 200px;
margin-top: 10px;
box-sizing: border-box;
font-size: 16px;
}
.controls {
margin-top: 10px;
display: flex;
gap: 10px;
}
button {
color: white;
background: #88e;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border-radius: 6px;
}
button:hover {
transform: translateY(-4px);
color: #ccc;
background: #77e;
}
button:active {
transform: scale(0.9);
}
#status {
margin-top: 4px;
color: #555;
font-size: 1rem;
}
</style>
</head>
<body>
<h3>音声認識&クリップボードコピー</h3>
<div id="status">停止中</div>
<textarea id="resultText" placeholder="ここに認識されたテキストが表示されます..."></textarea>
<div class="controls">
<button id="startBtn">認識開始</button>
<button id="stopBtn" disabled>停止&コピー</button>
</div>
<script>
const startBtn = document.getElementById('startBtn');
const stopBtn = document.getElementById('stopBtn');
const resultText = document.getElementById('resultText');
const status = document.getElementById('status');
// Web Speech APIの初期化(ブラウザ互換性対応)
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
if (!SpeechRecognition) {
alert('お使いのブラウザは音声認識(Web Speech API)に対応していません。ChromeやSafariでお試しください。');
} else {
const recognition = new SpeechRecognition();
recognition.lang = 'ja-JP'; // 日本語設定
recognition.continuous = true; // 連続認識を有効化
recognition.interimResults = true; // 認識途中の結果も取得
let finalTranscript = '';
// リアルタイムでテキストを更新
recognition.onresult = (event) => {
let interimTranscript = '';
for (let i = event.resultIndex; i < event.results.length; i++) {
const transcript = event.results[i][0].transcript;
if (event.results[i].isFinal) {
finalTranscript += transcript + '\n';
} else {
interimTranscript += transcript;
}
}
resultText.value = finalTranscript + interimTranscript;
};
recognition.onerror = (event) => {
status.textContent = 'エラーが発生しました: ' + event.error;
};
recognition.onend = () => {
// 停止ボタンを押していないのに勝手に終了した場合の表示更新
if (!stopBtn.disabled) {
status.textContent = '認識が中断されました';
startBtn.disabled = false;
stopBtn.disabled = true;
}
};
// 開始ボタンを押したとき
startBtn.addEventListener('click', () => {
finalTranscript = resultText.value; // 既存テキストがあれば引き継ぐ
recognition.start();
status.textContent = '音声認識中... マイクに向かって話してください';
startBtn.disabled = true;
stopBtn.disabled = false;
});
// 停止ボタンを押したとき
stopBtn.addEventListener('click', async () => {
recognition.stop();
status.textContent = '停止しました。クリップボードにコピー中...';
startBtn.disabled = false;
stopBtn.disabled = true;
// テキストボックスの内容をクリップボードにコピー
try {
await navigator.clipboard.writeText(resultText.value);
status.textContent = '停止しました。テキストをクリップボードにコピーしました!';
} catch (err) {
status.textContent = 'クリップボードへのコピーに失敗しました';
console.error('コピー失敗:', err);
}
});
}
</script>
</body>
</html>
