从Cordova Media插件录制的音频文件中获取频率(HTML5 AnalyserNode)

时间:2016-04-22 14:05:59

标签: android html5 cordova audiocontext

我正在尝试编写一个小型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文件插件。

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文件时,它工作得很好,但不能用我自己记录的文件。

我对这个主题很陌生,所以我不知道该怎么想...... 如果有人有想法,那就太棒了。

谢谢。

0 个答案:

没有答案