Ionic framework 爱奥尼亚cordova媒体录制用户音频不工作
我正在使用Ionic,希望将音频录制到一个文件中,然后对该文件执行一些操作 正在运行:Galaxy S4 首先,我创建文件:Ionic framework 爱奥尼亚cordova媒体录制用户音频不工作,ionic-framework,ionic2,cordova-media-plugin,Ionic Framework,Ionic2,Cordova Media Plugin,我正在使用Ionic,希望将音频录制到一个文件中,然后对该文件执行一些操作 正在运行:Galaxy S4 首先,我创建文件: await this.file.createFile(this.getFileDirectory(), this.getFileName(), true); 准备好后,我创建一个新的媒体实例: this.currentRecording = this.media.create(this.getFilePath()); 附加成功和错误侦听器: this.currentR
await this.file.createFile(this.getFileDirectory(), this.getFileName(), true);
准备好后,我创建一个新的媒体
实例:
this.currentRecording = this.media.create(this.getFilePath());
附加成功和错误侦听器:
this.currentRecording.onSuccess.subscribe((e) => {
console.log(this.currentRecording.getDuration());
this.file.readAsArrayBuffer(this.getFileDirectory(), this.getFileName())
.then(file => console.warn(file))
});
this.currentRecording.onError.subscribe((err) => console.error(err));
然后我开始录音:
this.currentRecording.startRecord()代码>
几秒钟后,我停止录制,this.currentRecording.stopRecord()
,并执行成功回调
在控制台中,我现在看到了
-1//console.log(this.currentRecording.getDuration())
ArrayBuffer{}//console.warn(文件)
我做错什么了吗?为什么它最终会成功,但没有文件,也没有持续时间
编辑
复制存储库:
自述文件有完整的说明@Amit,我克隆了你的回购协议,得到了与你相同的结果。我摆弄了一段时间,媒体插件确实有些奇怪的地方。我将尝试花一些时间发送一些pull请求,以添加一些特性并修复一些不良行为,就像getDuration()一样
结果是getDuration()函数不会询问插件的本机部分持续时间是多少,它会返回javascript中保存的值,并且该值仅在本机代码发送消息时更新因此您将无法获得新的当前持续时间值您可以使用cordova exec()更改插件,使其在本机代码中获得持续时间。
关于该文件,我开始使用该文件插件,但最终将其丢弃仅尝试使用媒体插件,仅传递文件名,无路径。该文件存储在/storage/emulated/0/file.3gp中它被录制,有内容,并且可以播放。我的猜测是,使用文件插件并传递完整路径字符串将使它创建您想要的文件。但是当你将相同的路径传递给媒体插件时,它并不尊重这一点,因为当我使用它时,文件被分配了,但在录制之后,它有0个字节,但我仍然可以播放录制,所以它必须将它存储在其他地方
如果只使用媒体插件就可以像我一样解决你的问题,那太好了!如果没有,并且您仍然希望继续进行这方面的工作,我建议您使用AndroidStudio中的AndroidMonitor来监视本机消息,并查看插件的代码。这就是我发现这些事情的原因
希望对您有所帮助1)您正在使用此插件吗?2) 您正在移动设备上尝试代码吗?正确,这就是插件。我在安卓设备上运行你能把TS组件的完整代码放进去吗?有一些方法,比如this.getFileName()
,我并不真正理解purpose@saperlipopette添加了整页的源代码,以及指向gist的链接。这些方法的目的是因为两个插件(文件和媒体)以不同的方式获得文件路径,所以我必须确保它们获得相同的文件。getFileDirectory
方法确保它为iOS和Android使用正确的目录。您能否提供有关测试环境的更多详细信息?你能创建一个git存储库来为你复制它,我们可以使用它吗?谢谢!我转而使用cordova插件audioinput
,这似乎效果很好。