音声認識APIを叩いてテキストを表示させるプログラムですが以下のようなエラーが出てしまいます。
deviceready has not fired after 5 seconds
Channel not fired onFileSystemPathsReady
Channel not fired onCordovaInfoReady
Channel not fired onCordovaConnectionReady
以下がプログラムです、よろしくお願いします。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
<script src="components/loader.js"></script>
<script src="lib/onsenui/js/onsenui.min.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="lib/onsenui/css/onsenui.css">
<link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css">
<link rel="stylesheet" href="css/style.css">
<script>
// Google Cloud Speech APIで使うAPIキー
var key = "AIzaSyCpWZ-vhQ3L6a7xM70tO9pjpWcINdwHYKU";
ons.ready(function() {
var app = {
// ファイルを読み込むためのオブジェクトです
reader: new FileReader(),
// キャプチャ成功時のコールバックです
success: function(files) {
var file = files[0];
$("#audio").attr("src", file.fullPath);
// ファイルを読み込んだ時のコールバックを指定
app.reader.onloadend = app.load_file;
// Fileオブジェクトを作成します
audioFile = new window.File(
file.name,
file.localURL,
file.type,
file.lastModifiedDate,
file.size
);
// ファイルを読み込みます(Base64で取得できます)
app.reader.readAsDataURL(audioFile);
},
// ファイルを読み込むと呼ばれるコールバックです
load_file: function() {
// base64文字列を取得
var result = app.reader.result;
var encoding;
var sample_rate;
if(result.indexOf("data:audio/amr;") === 0) {
// 音声データがamrの場合
encoding = "AMR";
sample_rate = 8000;
} else {
// 音声データがwavの場合
encoding = "LINEAR16";
sample_rate = 44100;
}
// data:audio/wav;base64,aaa... といった形式で取得
// されるので、,以降だけにします
var ary = result.split(",");
// Google Cloud Speech APIに投げるデータフォーマットを作成
var json = {
"config": {
"encoding": encoding,
"sample_rate": sample_rate,
"language_code": "ja_JP"
},
"audio": {
"content": ary[1]
}
};
// 音声認識処理を実行します
app.voice_recognition(json);
},
// Google Cloud Speech APIをコールします
voice_recognition: function(json) {
// AjaxでPOST処理
$.ajax({
type: 'POST',
url: 'https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=' + key,
data: JSON.stringify(json),
dataType:'json',
contentType: 'application/json'
}).done(function(data) {
// 処理結果をテキストエリアに表示
$("#result").val(data.results[0].alternatives[0].transcript);
}).fail(function(error) {
alert("Speech API Error:" + JSON.stringify(error));
});
},
// キャプチャ失敗時のコールバックです
error: function(error) {
alert("Capture Error:" + error);
}
};
$("#capture").on("click", function() {
alert("開始");
navigator.device.capture.captureAudio(app.success, app.error, {limit:15});
});
});
</script>
</head>
<body>
<ons-page>
<ons-toolbar>
<div class="center">音声認識</div>
</ons-toolbar>
<section style="padding: 8px">
<p></p><br><br>
<ons-button id="capture" modifier="large">音声キャプチャ</ons-button>
<p></p>
<p><audio id="audio" controls></audio></p>
<textarea id="result" class="textarea"></textarea>
</section>
</ons-page>
</body>
</html>