我正在尝试编写一个小型 Cordova 应用程序(目前主要在 Android 6 上),它使用 Cordova Media-Plugin 记录和保存音频文件。
var media;
var mediaFile = "mediafile.wav"
[...]
media = new Media('file:///sdcard/' + mediaFile);
media.startRecord();
[...]
media.stopRecord();
media.release;
到目前为止一切顺利 - 这工作得很好。我能够记录、保存和播放文件。下一步是分析所述音频文件中有哪些主要频率。我的想法是使用 HTML5 AudioContext 和 AnalyserNode 来做到这一点。
var context;
var analyser;
var sourceNode;
[...]
// inside my onDeviceReady-function
var AudioContext = (window.AudioContext ||
window.webkitAudioContext ||
window.mozAudioContext ||
window.oAudioContext ||
window.msAudioContext);
if (AudioContext) {
context = new AudioContext();
}
else {
alert('Browser does not support Web-Audio API');
}
analyser = context.createAnalyser();
sourceNode = context.createBufferSource();
sourceNode.connect(analyser);
为了访问该文件,我使用的是 Cordova File-Plugin。
function onFileSystemSuccess(fs) {
fileSystem = fs;
[...]
}
// inside my onDeviceReady-function
window.resolveLocalFileSystemURL('file:///sdcard/', onFileSystemSuccess, errorHandler);
[...]
fileSystem.getFile(mediaFile, { create: false }, readFile, errorHandler);
但是现在我在读取和分析文件时遇到了一些问题。
function readFile(f) {
f.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (e) {
context.decodeAudioData(reader.result, function (decodedData) {
[...]
}, errorHandler);
};
reader.readAsArrayBuffer(file);
}, errorHandler);
}
decodeAudioData 抛出错误“无法解码音频文件”。当我只是加载一个随机的 .wav 文件时,它工作得很好,但不适用于我自己录制的文件。
我对这个主题很陌生,所以我不知道该怎么想……如果有人有想法,那就太好了。
谢谢你。