通过HTML5 API(RecordJS或替代方案)将音频录制到AAC

时间:2015-04-17 21:56:09

标签: javascript html5 audio-recording

我需要录制音频文件,将其导出(存储到服务器中)到aac格式,获取它的链接并将链接和实际音频(aac)文件发送到RESTful WS。

我发现这个库可以录制音频(利用HTML5 Audio API): RecordJS https://github.com/mattdiamond/Recorderjs

我进行了设置(初始化+开始录制+停止录制)。 现在我应该处理音频以便将其导出

插件创建者提供的示例是:

  function createDownloadLink() {
    recorder && recorder.exportWAV(function(blob) {
      var url = URL.createObjectURL(blob);
      var li = document.createElement('li');
      var au = document.createElement('audio');
      var hf = document.createElement('a');

      au.controls = true;
      au.src = url;
      hf.href = url;
      hf.download = new Date().toISOString() + '.wav';
      hf.innerHTML = hf.download;
      li.appendChild(au);
      li.appendChild(hf);
      recordingslist.appendChild(li);
    });
  }

提供的示例非常简单。 但是,我不知道如何

  1. 实际上获取aac音频文件
  2. 存储(示例显示如何下载,而不是如何在服务器上存储)
  3. 获取文件的链接(服务器的路径)。
  4. 对不起,我无法提供工作小提琴,但我对HTML5 API感到很陌生和困惑。

    如果需要,我可以使用其他库或纯HTML5 API。只需要一些关于如何进行的线索。即使是通用的解决方案(即不仅仅是导出到AAC,还有MP3或其他任何东西),如果这对其他人有帮助的话,也没问题。

2 个答案:

答案 0 :(得分:3)

  

提供的示例非常简单。但是,我不知道如何

     
      
  1. 实际上获得了aac音频文件
  2.   

你不能......至少今天不是直接的。我认为MediaRecorder API旨在解决这个问题,但它还没有得到真正的支持,也没有标准化。

有些人使用emscripten为MP3编码构建LAME。您可以尝试对开源AAC编码器执行相同操作,例如内置于FFmpeg中的编码器。查看videoconverter.js。请注意,这是非常缓慢的,高度实验性的,并不适用于所有用例。

  
      
  1. 存储它(示例显示如何下载,而不是如何在服务器上存储)
  2.   

使用您想要将该数据发送到服务器的任何内容。如果是我,我会通过二进制网络套接字发送它。

  
      
  1. 获取文件的链接(服务器的路径)。
  2.   

这取决于你使用服务器端做什么,我们无法为你解答。它是你想要的任何东西。

答案 1 :(得分:0)

我不知道我的解决方案是否会回答你的问题。首先,您必须将blob格式转换为URL格式才能传输它。之后,使用ajax将其上传到服务器。该URL将使用PHP脚本在服务器端转换为AAC格式。

在javascript中:

function saveToServer() 
{
       recorder && recorder.exportWAV(function(blob) {
       var data = "";
       var reader = new FileReader();
       reader.readAsDataURL(blob);
       reader.onloadend = function(){
          data =  reader.result;
          //your ajax code here
       }

       });

}

php脚本示例:

$audioData = substr($_POST['data'], strpos($_POST['data'], ",") + 1);
$decodedAudioData = base64_decode($audioData); 
$upload_dir = "/this/is/AAC/directory/";  
mkdir($upload_dir); //create dir
$aacFile = $upload_dir."myAudio.aac";  // create AAC file  in the dir 
$fileHandle = fopen($aacFile, 'wb');
$fwrite($fileHandle, $decodedAudioData); // write data into the AAC file
$fclose($fileHandle);

我一周前做过这件事并且请不要完全遵循我写的上述代码,bcoz我只是粗略地想知道如何将RecordJS中的AAC格式存储到服务器。我没有检查上面代码的语法。

传输录制音频的唯一方法是将其转换为javascript中的URL格式。无法将blob或AAC文件从Web浏览器传输到服务器。