2011-12-15 16 views
1

私は現在、サウンドを録音しており、再生のためのバイト配列とmp3への後続のエンコードを格納しています。録音の開始時にAS3のクリック音を聞きます

残念ながら録音の始めにクリック音が聞こえてきていますが、

私は、このようなとしてこれを排除しようとする方法のカップルを試みた:mic.gain = 0との最初の0.3秒を記録

  1. 。 mic.gain = 50に設定します。

  2. のByteArrayを記述し続ける、最初0.3秒後のByteArrayをクリア(記録の最初の0.3秒を削除する効果が。)

これらの方法のいずれもクリックがある停止しています追加されました。

クリックがどのように追加されるのを防ぐことができますか?ここで

は、コードを格納/私の記録である:私はクリックを再現することはできませんが

public var mic:Microphone = Microphone.getMicrophone(); 
public var micSilence:uint; 
private var soundBytes:ByteArray = new ByteArray(); 
private var soundBA:ByteArray = new ByteArray(); 

mic.gain = 50; 
mic.setSilenceLevel(1, 2000); 
mic.rate = 44; 
Security.showSettings("2"); 
mic.setLoopBack(false); 
mic.setUseEchoSuppression(false); 

private function startRecordingAfterCountdown():void {  
    mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);    
} 

private function micSampleDataHandler(event:SampleDataEvent):void {  
    while (event.data.bytesAvailable){ 
     var sample:Number = event.data.readFloat(); 
     soundBytes.writeFloat(sample); 
    } 
} 

private function stopRecord():void {   
    mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);  
    soundBytes.position = 0; 
    soundBA.clear(); 
    soundBA.writeBytes(soundBytes); 
    soundBA.position = 0; 
    soundBytes.clear(); 

    var newBA:ByteArray = new ByteArray(); 
    newBA.writeBytes(soundBA); 
    recordingsArray[0] = newBA;  
} 

答えて

3

、私はそれが記録の開始時に音量の急激な増加によって誘発されるかもしれないと思います。そのため、音量をスムーズに上げて効果を取り除くことは可能かもしれません。このようなもの:

// the amount of volume increasing time in ms 
public static const VOLUME_INC_TIME_MS:uint = 200; 
// in bytes 
public static const VOLUME_INC_BYTES:uint = VOLUME_INC_TIME_MS * 44.1 * 4; 

private function micSampleDataHandler(event:SampleDataEvent):void 
{ 
    var bytesRecorded:uint = soundBytes.length; 
    while(event.data.bytesAvailable) 
    { 
     var sample:Number = event.data.readFloat(); 
     if(bytesRecorded < VOLUME_INC_BYTES) 
     { 
      // using linear dependence, but of course you can use a different one 
      var volume:Number = bytesRecorded/VOLUME_INC_BYTES; 
      soundBytes.writeFloat(sample * volume); 
      bytesRecorded += 4; 
     }else 
     { 
      soundBytes.writeFloat(sample); 
     } 
    } 
} 

希望するものがあります。

+0

すばらしい...再び!感謝の精液:) – crooksy88

関連する問題