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

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

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

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

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

Q&A

解決済

1回答

1314閲覧

Cordova Mediaプラグインで録音したファイルを送信したいが、ファイルサイズが0になる

kgp

総合スコア0

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

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

0グッド

0クリップ

投稿2021/04/22 04:17

前提・実現したいこと

MonacaでiPhoneアプリの開発を行っています。

https://cloud6.net/so/cordova/1863708
こちらのページで紹介されている方法とほぼ同じ方法で、
Mediaプラグインで録音したファイルをFileTransferプラグインを使用して
サーバに送信しようとしています。

発生している問題・エラーメッセージ

Mediaプラグインで録音、再生には成功していますが、
送信前に音声ファイル(wav)のファイルサイズを調べると0と出ます。
送信するとサーバ上に指定したファイル名でファイルは生成されますが、
ファイルサイズは0です。

該当のソースコード

Cordova

1 var rootObj; 2 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 3 function (fileSystem) { 4 rootObj = fileSystem.root; 5 } 6 ); 7 8 rootObj.getFile($scope.item.localURL, {create: true, exclusive: false}, function(fileEntry) { 9 fileEntry.file(function (file) { 10 var uploadOptions = new FileUploadOptions(); 11 uploadOptions.fileKey = 'file'; 12 uploadOptions.chunkedMode = false; 13 uploadOptions.fileName = "test.wav"; 14 uploadOptions.mimeType = file.type; 15 console.log(file.size + ":" + file.type + ":" + fileEntry.toURL()); 16 fileTransfer.upload(fileEntry.toURL(), uri, uploadSuccess, uploadFail, uploadOptions); 17 }, uploadFail); 18 }, uploadFail);

試したこと

上記「$scope.item.localURL」について、

Cordova

1 media = new Media($scope.item.localURL); 2 media.play();

で再生は可能です。
また、Mediaプラグインで録音したファイルではなく、
適当なテキストを書き込んだテキストファイルの送信であれば、
ファイルサイズも正常だし、サーバ上に正しくファイルが送信されます。

「file.type」は「audio/vnd.wave」と出ます。
ここを直接指定で「audio/wav」「audio/wave」などとしても状況は変わりません。

なぜ再生は出来るのに、ファイルサイズが0になり送信もファイルサイズ0で送信されてしまうのでしょうか…?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
ファイル実体は
iOS:cordova.file.tempDirectory
Android:cordova.file.externalRootDirectory
の方から拾えるようで、
そちらを送信したところ、正常なファイルサイズのファイルを送信できました。

cordova

1 var tmpfile; 2 if (cordova.platformId == 'ios') { 3 tmpfile = cordova.file.tempDirectory + $scope.item.localURL; 4 } else { 5 tmpfile = cordova.file.externalRootDirectory + $scope.item.localURL; 6 } 7 8 resolveLocalFileSystemURL( 9 tmpfile, 10 function (entry) { 11 console.log(entry); 12 fileTransfer.upload(entry.toURL(), uri, uploadSuccess, uploadFail, uploadOptions); 13 }, 14 function (error) { 15 console.log('error'); 16 });

各OSのファイルシステムについて完全に理解できておらず…
まだ釈然としない思いはありますが、ひとまず実現したいことは完遂できそうなので、
本件は解決とします。

投稿2021/04/27 04:01

編集2021/04/29 09:56
kgp

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問