前提・実現したいこと
クライアント側でJavaScriptを使いwavをmp3へ圧縮したい
発生している問題
iOSで録音をするとおそらくwavになっていてファイルサイズが大きくなりすぎてしまいますが、やり方がわかりません
JavaScript
簡略化していますが以下のようにサーバーへアップロードしています。録音したデータがwavになっています var onserverfilename = null; var filefullpath = null; //録音 function recordAudioios() { //ファイル名の生成 var currentLoginUser = ncmb.User.getCurrentUser(); var uid = currentLoginUser.get("objectId"); var groupid = nowgroup.get("objectId"); filename = uid + "_" + groupid + ".wav"; console.log("filename::" + filename); filefullpath = cordova.file.tempDirectory + uid + "_" + groupid + ".wav"; console.log("filefullpath::" + filefullpath); //Mediaプラグインで録音 var src = filename; mediaRec = new Media(src, // success callback function() { //成功 console.log("recordAudio():Audio Success"); flagiOSfirstrecord = true; }, // error callback function(err) { console.log("recordAudio():Audio Error: "+ err.code); mediaRec.release(); } ); // Record audio 録音スタート mediaRec.startRecord(); // Stop recording after 30分 setTimeout(function() { mediaRec.stopRecord(); }, 1800000); } //ダウンロード function downloadRoleplaying(filename){ console.log("ダウンロード" + filename); ncmb.File.download(filename, "blob") .then(function(blob) { // ファイルリーダーにデータを渡す reader.readAsDataURL(blob); }) .catch(function(err) { console.log(err); }) } var reader = new FileReader(); reader.onload = function(e) { var dataUrl = reader.result; document.getElementsByTagName('audio')[0].src = dataUrl; $('audio').fadeOut(500,function(){$(this).fadeIn(500)}); setTimeout(function(){$('audio').fadeOut(500,function(){$(this).fadeIn(500)})},1000); } //アップロード function uploadAudio(){ if(filefullpath != null){ var xhr = new XMLHttpRequest(); xhr.open('GET', filefullpath, true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { var arrayBuffer = this.response; var blob = null; // バイトデータとコンテンツタイプからBlobを生成する blob = new Blob([arrayBuffer], {type: "audio/mp3"}); // オリジナル:var blob = new Blob([arrayBuffer], {type: "image/png"}); // FileReaderでBlobを読み取る var reader = new FileReader(); reader.readAsDataURL(blob); var fileData = blob; ncmb.File.upload(onserverfilename, fileData) .then(function(res){ // アップロード後処理 console.log("audioアップロードボタン成功"); //ファイル情報をデータベースへ書き込む var Roleplay = ncmb.DataStore("Roleplay"); var currentLoginUser = ncmb.User.getCurrentUser(); var uid = currentLoginUser.get("objectId"); var gid = nowgroup.get("objectId"); var filename = null; filename = uid + "_" + gid + ".mp3"; Roleplay.equalTo("gid", gid).equalTo("uid", uid) .count() .fetchAll() .then(function(results){ console.log(results.count); // 検索結果の件数を表示 var c = results.count; if(c == 0){ console.log("初めての登録、登録処理を始めます"); var roleplay = new Roleplay(); roleplay.set("gid", gid) .set("uid", uid) .set("filename", filename) .set("view", 0) .set("username", currentLoginUser.get("userName")) .save() .then(function(){ console.log("グループ登録されたidは::" + gid); ons.notification.alert({ message: 'ロープレ音声が共有されました', title: 'アップロード成功' }); document.querySelector('#myNavigator').popPage(); console.log("ファイルのデータも保存完了!"); document.querySelector('#menu').open(); $('#tolistingbtn').fadeOut(1300,function(){$(this).fadeIn(1300)}); setTimeout(function(){$('#tolistingbtn').fadeOut(1300,function(){$(this).fadeIn(1300)})},2600); }) .catch(function(err){ // エラー処理 console.log("error::" + err); alertDialog.hide(); ons.notification.alert({ message: 'エラー', title: '音声ファイルデータ保存中にエラーが起こりました' }); }); } else{ //既に存在する console.log("音声ファイルデータが存在する、二回目以降のアップロード"); ons.notification.alert({ message: 'ロープレ音声が共有されました', title: 'アップロード成功' }); document.querySelector('#myNavigator').popPage(); document.querySelector('#menu').open(); $('#tolistingbtn').fadeOut(1300,function(){$(this).fadeIn(1300)}); setTimeout(function(){$('#tolistingbtn').fadeOut(1300,function(){$(this).fadeIn(1300)})},2600); } }) .catch(function(err){ // エラー処理 alertDialog.hide(); ons.notification.alert({ message: 'エラー', title: '音声ファイル情報のアップロードに失敗しました' }); console.log(err); }); //t end }).catch(function(err){ // エラー処理 console.log("audioアップロードボタン6エラー"); alert('アップロード失敗'); }); } }; //送信 xhr.send(); }else{ ons.notification.alert({ message: 'さきに録音してからアップロードしてください', title: 'エラー' }); $('#startrecording').fadeOut(1300,function(){$(this).fadeIn(1300)}); setTimeout(function(){$('#startrecording').fadeOut(1300,function(){$(this).fadeIn(1300)})},2600); } }
補足情報(FW/ツールのバージョンなど)
Cordova Mediaプラグインを使って録音してます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。