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 に答える