0

我目前正在开发一个允许用户录制音频消息的项目,但是最近提出了一个请求,允许他们暂停录制过程然后继续录制(将新音频附加到之前的录制之后)。

例子:

  1. 用户按下记录并进行初始记录。
  2. 用户按下暂停按钮来收集他们的想法,或者你有什么。
  3. 用户再次单击录制按钮并从前一个停止的位置继续录制。
  4. (重复直到录制过程完成并单击上传。)

我目前正在使用recorder.js并且到目前为止对它非常满意,但是我觉得它缺乏我正在寻找的功能,而且我对 Flash / Actionscript 不够熟悉,无法深入研究和修补。

我很好奇是否有任何用户对功能齐全的解决方案有任何建议,或者对如何实现类似的东西有任何建议。一个相当跨浏览器/跨平台的解决方案将是首选,但不是硬性要求(主要涉及 Chrome 和 IE)。

4

2 回答 2

0

参考以下代码。

import flash.events.SampleDataEvent;
import flash.media.Microphone;
import flash.media.Sound;
import flash.utils.ByteArray;
import flash.events.Event;

var microphone:Microphone;
var isPause:Boolean = false;
var soundRecording:ByteArray;

record_btn.addEventListener(MouseEvent.CLICK, onRecordStart);
recordPause_btn.addEventListener(MouseEvent.CLICK, onPauseResumeToggle);
recordStop_btn.addEventListener(MouseEvent.CLICK, onRecordStop);
audioPlay_btn.addEventListener(MouseEvent.CLICK, onPlay);

function onRecordStart(e:MouseEvent=null):void 
{
    soundRecording = new ByteArray();
    microphone=Microphone.getMicrophone();
    microphone.rate=44;
}

function onPauseResumeToggle(e:MouseEvent=null):void
{
    if(!isPause)
    {
        microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
    }
    else
    {
        microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
    }

    isPause != isPause;
}

function onRecordStop(e:MouseEvent=null):void 
{
    isPause = false;
    microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
    soundRecording.position=0;
}

function gotMicData(micData:SampleDataEvent):void 
{
    soundRecording.writeBytes(micData.data);
}

function onPlay(e:MouseEvent=null):void 
{
    soundRecording.position=0;

    soundOutput = new Sound();
    soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, playSound);

    soundOutput.play();
}

function playSound(soundOutput:SampleDataEvent):void 
{
    if (! soundRecording.bytesAvailable>0) 
    {
        return;
    }
    for (var i:int = 0; i < 8192; i++) 
    {
        var sample:Number=0;
        if (soundRecording.bytesAvailable>0) 
        {
            sample=soundRecording.readFloat();
        }
        soundOutput.data.writeFloat(sample);
        soundOutput.data.writeFloat(sample);
    }
}
于 2012-08-15T01:31:09.327 回答
0

试试这个。它具有以下特点:

  • 暂停录音
  • 暂停播放
  • 记录时间回调
  • 上传录制的音频
  • 只有上传按钮在闪光灯里面

https://github.com/ehsan6sha/FlashWavRecorder

于 2013-12-29T13:00:43.337 回答