为什么我无法将此音频文件转换为base64?

时间:2014-09-23 21:55:12

标签: javascript cordova base64

我正在构建一个记录音频的Phonegap应用程序,然后获取音频文件并将其转换为base64。然后,我将该base64数据url存储在变量中,然后使用该变量在警告框中显示base64数据URL。这是我到目前为止的代码。它在Android上完美运行。在Android上,我收到一条警告消息,上面写着"数据:audio / x-wav; base64,AAAAGGZ0ex"等等。显然字符串比这要大很多,但我在Android上获得了整个base64数据网址。在下面使用相同代码的ios上,我收到一条警告消息,上面只是" data:audio / wav; base64,"没有数据网址。我只是得到一条警告信息:" data:audio / wav; base64,"究竟。这是我的代码如下。我正在使用Phonegap File API

function gotFS(fileSystem) {
   fileSystem.root.getFile("myaudio.wav", {create: true, exclusive: false}, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);

}

function gotFile(file){
    readDataUrl(file);  
}

function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
    console.log("read success");
    console.log(evt.target.result);
    var thed = evt.target.result;
    alert(thed);            
        };
    reader.readAsDataURL(file);
}

function fail(evt) {
    console.log(evt.target.error.code);
}


function recordAudio() {
    var src = "myaudio.wav";
    var mediaRec = new Media(src, onSuccess, onError);
    // Record audio
    mediaRec.startRecord();

    // Stop recording after 10 sec
    var recTime = 0;
    var recInterval = setInterval(function() {
        recTime = recTime + 1;
        setAudioPosition(recTime + " sec");
        if (recTime >= 7) {
            clearInterval(recInterval);
            mediaRec.stopRecord();

            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, function fail(){});

        }
    }, 1000);
  }

1 个答案:

答案 0 :(得分:0)

使用PhoneGap API时,您需要考虑操作系统特定的怪癖。首先需要确认是否正在创建文件,并在该文件中写入音频。要做到这一点,只需播放文件(API有play())并查看音频是否播放。

幸运的是,我制作了一个记录声音的iOS特定PhoneGap应用程序。它在我的GitHub here上。

您的代码根本没有录制声音,因为在创建Media实例之前,您需要创建一个文件。请参阅我的GitHub链接,您将获得一个想法。