GoogleのText-to-Speachで作成した音声を一時停止させる方法が知りたいです。
下記のコードで、一時停止ボタンを押した時に流れている音声を途中で止めたいです。
html
1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4</head> 5<body> 6 <button onclick="speak(this, '日本で一番高い山は何でしょう?')">スタート</button> 7 <button>一時停止</button> 8 <ul id="output"></ul> 9 10 <script src="./api_key.js"></script> 11 <script src="./main.js"></script> 12</body> 13</html> 14
javascript
1// スタート 2function speak(button, text) { 3 const url = "https://texttospeech.googleapis.com/v1/text:synthesize?key=" + apiKey; 4 const data = { 5 "input": { 6 "text": text 7 }, 8 "voice": { 9 "languageCode": "ja-JP", 10 "name": "ja-JP-Standard-D" 11 }, 12 "audioConfig": { 13 "audioEncoding": "MP3", 14 "speaking_rate": "1.00", 15 "pitch": "0.00" 16 } 17 } 18 const otherparam={ 19 headers: { 20 "content-type": "application/json; charset=UTF-8" 21 }, 22 body: JSON.stringify(data), 23 method: "POST" 24 } 25 fetch(url, otherparam) 26 .then(data=>{return data.json()}) 27 .then(res=>{ 28 try { 29 var blobUrl = base64ToBlobUrl(res.audioContent) 30 var audio = new Audio() 31 audio.src = blobUrl 32 audio.play() 33 } catch(e) { 34 console.log(e) 35 } 36 }) 37 .catch(error=>alert(error)) 38} 39 40// Base64 → BlobUrl 41function base64ToBlobUrl(base64) { 42 var bin = atob(base64.replace(/^.*,/, '')) 43 var buffer = new Uint8Array(bin.length) 44 for (var i = 0; i < bin.length; i++ ) { 45 buffer[i] = bin.charCodeAt(i) 46 } 47 return window.URL.createObjectURL(new Blob([buffer.buffer], {type: "audio/wav"})) 48} 49
あなたの回答
tips
プレビュー