質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

5277閲覧

JavaScriptでwavファイルをmp3に圧縮する方法

torao_tanabe

総合スコア18

ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

1クリップ

投稿2019/04/22 13:57

前提・実現したいこと

クライアント側で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プラグインを使って録音してます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://github.com/akrennmair/libmp3lame-js
https://github.com/zhuker/lamejs

こういうのですかね?lameを移植したもののようです。

https://blog.addpipe.com/recording-mp3-audio-in-html5-using-vmsg-a-webassembly-library-based-on-lame/

こちらはWebAssemblyで動かすエンコーダーの話っぽい。

投稿2019/04/27 06:44

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問