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

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

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

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

Monaca

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

Q&A

解決済

1回答

1548閲覧

保存済みのwavファイルからbase64データを取り出したい

makisg

総合スコア18

JavaScript

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

Monaca

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

0グッド

0クリップ

投稿2017/11/17 12:21

###前提・実現したいこと
monacaでスマートフォンアプリを開発しています。
保存済みのwavファイル(メディア操作プラグインを利用して録音したファイル)があり、これからbase64エンコードされた文字列を取り出したいです。
保存したファイルは、 file:///foo/bar/record.wav という内部パスに保存されていることがわかっています。

Fileオブジェクトの作成の方法が悪いか、もしくはファイルのパーミッションなどに問題がある?と思っていますが、原因や解決方法を見つけられていません。

###発生している問題
wavファイルの内部パスがわかっている状況から、FileReaderのreadAsDataURLを使ってbase64エンコードされた文字列を取り出そうとしています。wavファイルそのものは読み込めていると思われるのですが、base64のデータが取得できません。

###該当のソースコードの抜粋

JavaScript

1getBase64String("file:///foo/bar/record.wav"); 2 3function getBase64String(fpath){ 4 var reader=new FileReader(); 5 window.resolveLocalFileSystemURL(fpath,dataLoadSuccess,dataLoadError); 6 function dataLoadSuccess(data) { 7 var audioFile = new window.File( 8 data.name, 9 data.nativeURL, 10 "audio/wav" 11 ); 12 reader.readAsDataURL(audioFile); 13 } 14 15 reader.onloadend = function() { 16    console.log(JSON.stringify(reader)); // 結果は下に記載 17 var result = reader.result; 18 var ary = result.split(","); 19 data64 = ary[1]; 20 } 21}

console.logの出力

1{"_readyState":2,"_error":null,"_result":"data:audio/vnd.wave;base64,","_progress":0,"_localURL":"file:///foo/bar/record.wav","_realReader":{}}

###試したこと
console.logの出力にあるように、resultが"data:audio/vnd.wave;base64,"となって、ちょうどbase64のデータが入って欲しいところが空っぽになってしまっています。

new window.File
でFileオブジェクトを作ろうとしているのですが、ここのパラメータで問題があるような気がしていますが、Fileオブジェクトを作るための説明を見つけられず、正しいのかどうかの判断ができていません。

何かおわかりの方がいらっしゃいましたら、ぜひお教えください。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。

window.resolveLocalFileSystemURL(filePath, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();

reader.onloadend = function() { console.log("Successful file write: " + this.result); }; reader.readAsDataURL(file); }, onError);

},
onError);

というコードでfilePathにローカルファイルパスを書くと、正しく this.resultにbase64を含んだ値が入るようになりました。

投稿2017/11/21 10:23

makisg

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問