実現したいこと
スプレッドシート起動時の音声再生
前提
GASでスプレッドシート上のセルをダイアログを表示させて音声を再生させる仕組みを構築中
発生している問題・エラーメッセージ
トリガーをスプレッドシート起動時に設定したが、ダイアログが表示されるだけで音声が再生されない。
該当のソースコード
function onOpen() { var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu('音声読み上げ'); menu.addItem('読み上げる', 'speakCellContents'); menu.addToUi(); } function speakCellContents() { var spreadsheetId = "1o6vX01ZEEJhw_83hkcarsAaANPI40UEaAKnZUEw-gHI"; var sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet(); var cellAddresses = ["A2", "A4", "A6", "A8", "A10"]; // 再生したいセルのアドレスのリスト var i = 0; playNextCell(); function playNextCell() { if (i < cellAddresses.length) { var cellAddress = cellAddresses[i]; var content = sheet.getRange(cellAddress).getValue(); if (content !== "") { var script = "<script> var msg = new SpeechSynthesisUtterance('" + content + "');" + " msg.lang = 'ja-JP';" + " msg.volume = 1.5;" + " msg.rate = 0.8;" + " window.speechSynthesis.speak(msg);</script>"; var html = HtmlService.createHtmlOutput(script); SpreadsheetApp.getUi().showModalDialog(html, content); } i++; Utilities.sleep(1500); // 1.5秒待機 playNextCell(); // 次のセルを再生 } else { // SpreadsheetApp.getUi().alert("再生が完了しました。"); } } }
試したこと
CHATGPTで同様な質問をしたところ下記の回答だった
このコードでは、スプレッドシートのセルの内容を読み上げるためのトリガーを設定していますが、ダイアログが表示されるだけで音声が流れない理由は、window.speechSynthesis.speak(msg);をモーダルダイアログ内のHTMLから実行しているためです。モーダルダイアログ内ではJavaScriptが実行できますが、ブラウザのセキュリティ制約により、音声合成API (speechSynthesis) は制限されています。
補足情報(FW/ツールのバージョンなど)
スプレッドシートを更新し、ダイアログが表示される際に✖ボタンで閉じようとすると音声が再生されましたが、希望の起動方法ではない。

0 コメント