1

我已经使用 phonegap/cordova 1.7 在 IOS 上实现了音频记录插件。IOS5.1

我在标准 media.startrecord() 函数上使用它,因为我想更改比特率以减小文件的大小。

它在模拟器中运行良好。

在真正的 iphone 上,它成功记录一次,但随后拒绝.. 它似乎可以工作,但在播放时我收到错误 4 MediaError.MEDIA_ERR_NONE_SUPPORTED

我创建了一个只有基本记录和播放的新项目,但我仍然遇到同样的问题。

这是测试代码 - 它非常基本 - 只需几个链接即可记录两个单独的文件并播放它们。setTimeout 每次只记录几秒钟的音频。

我用谷歌搜索,直到我的指纹磨损了,但还没有找到解决办法。

您可以提供的任何见解都将非常感激。

我想知道我是否未能正确关闭录制/播放?还是在 sim v iPhone 上引用的文件不同?

非常感谢!

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
<meta charset="utf-8">
<link rel="stylesheet" media="only screen and (max-device-width: 480px)" href="iphone.css" type="text/css" />       

<script type="text/javascript" charset="utf-8" src="cordova-1.7.0.js"></script>
    <script type="text/javascript">
       var fs,mediaRec=null, recInterval,recordSettings = {"FormatID": "kAudioFormatULaw","SampleRate": 16000.0,"NumberOfChannels": 1,"LinearPCMBitDepth": 16};

    function recfile1() {recordAudio("test.wav");}
    function recfile2() {recordAudio("test2.wav");}
    function success(){console.log("ok");}
    function recordAudio(fname) {
        fs.root.getFile(fname, {create: true, exclusive: false}, function(entry){            
            mediaRec = new Media(entry.fullPath, success, function(){alert("failed");});
            mediaRec.startRecordWithSettings(recordSettings);
            recInterval = setTimeout(function() {
                mediaRec.stopRecordWithSettings();
            }, 2000);
        }, function(){console.log("error");});
    }

    function playfile(fname) {
        var my_media;
        fs.root.getFile(fname, {create: false, exclusive: false}, 
            function success(entry) {
                my_media = new Media(entry.fullPath,function(){console.log("ok");},function(err){alert(err.code+" "+err.message);});
                my_media.play();
            }, 
            function() {
                console.log("not found file");
            }
        );
    }

    function onBodyLoad() {     
    document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady(){
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){fs=fileSystem;}, function(){console.log("failed");});
    Media.prototype.startRecordWithSettings = function(options) {
        Cordova.exec(null, null, "AudioRecord","startAudioRecord", [this.id, this.src, options]);
    };
    Media.prototype.stopRecordWithSettings = function() {
        Cordova.exec(null, null, "AudioRecord","stopAudioRecord", [this.id, this.src]);
    };
}
</script>
</head>
<body onload="onBodyLoad()">
<a onclick="playfile('test.wav');">play</a>
    <a style='margin-top:100px;' onclick="recfile1();">record 1</a>
    <a style='margin-top:100px;' onclick="recfile2();">record 2</a>
    <a onclick="playfile('test2.wav');">play2</a>
</body>
</html>
4

0 回答 0