2012-01-17 7 views
0

私はactionscript 3でオーディオを録音する方法を知っています。しかし、actionscriptの最終的なサウンドファイルから何かを切り取ることは可能ですか?actionscriptの音をカットする

私の使用例は、ユーザーがサウンドファイルの特定のポイントにジャンプして(私はそれを管理できる)、そこから録音を開始することができます(基本的に残りのファイルを上書きします)。

これはactionscriptで可能ですか?はいの場合、どうですか?

ありがとうございます。

UPDATE:

これは私が使用したコードであり、それは動作しますが、古い記録がダウンして投げます。どうしてか分かりません。 "selectedTime"は、ユーザが波のグラフ表示で選択した時間のミリ秒の値です。 44100がサンプルレートです。

existingByte = new ByteArray(); 
var extract:Number = Math.floor ((selectedTime)*44.1); 
sound.extract(existingByte, extract); 

mic.recordData(existingByte); 

// in the mic class: 
public function recordData(existingByteArray:ByteArray=null):void { 
    if(existingByteArray == null) { 
     raw = new ByteArray(); 
    } else { 
     raw = existingByteArray; 
     raw.position = raw.length; 
    } 
    mic.addEventListener(SampleDataEvent.SAMPLE_DATA, dataHandler);   
} 

private function dataHandler(event:SampleDataEvent):void { 
    try { 
     raw.writeBytes(event.data);    
    } catch(e) { 
     this.stopRecording(); 
    } 
} 

答えて

0

はい。オーディオストリームからバイトを受信すると、それらをマスターバッファに追加します。録音のようなパンチインをしたい場合。パンチインしたいマスターバッファーへのオフセットを知る必要があります。したがって、最初からバッファに書き込む代わりに、ユーザがクリックしたオフセットからバッファに書き込むことになります。マウスポインタをマスターバッファのオフセットに関連付ける必要があります。新しいオーディオを受け取ると、そのバッファの値を上書きするだけです。パンチアウトをしたい場合は、オーディオの小さな部分だけを上書きします。マスターバッファには新しいデータの書き込みを終了するエンドポイントが必要です。ユーザーは、オーディオの一部をハイライトして、入/出力ポイントを取得することができます。

2つのバッファには、ByteArraysを使用する必要があります。 Sound.extract()を使用して、Soundから生のバイトを抽出することができます。生のオーディオの他の供給源はここにも適用することができます。

var master : ByteArray; // assume this is loaded with some audio 

public function punchIn(startLocation : index, sound : Sound) : void { 
    sound.extract(master, sound.bytesTotal, startLocation); 
} 

長さのパラメータを変えることによって、あなたがパンチを行い、機能をパンチアウトできます。

+0

ありがとうございます。私は試して、確かにいくつかのサンプルコードで戻ってくるだろう:) – shredding

+0

これはクールですが、私は残っている問題が1つあります。それは完璧に動作し、私はそのカットを行うことができました。私はマスターを使用してマイククラスに戻し、最後に新しい録音を追加します。 私の質問をもう一度確認してください。コードを追加しました。 これが機能している間は、インタル録音の音程がかなり低くなります。 私はこのような長さを計算しています:sound.length * 44.1(44.1は私の率です)。 これはなぜ起こるか考えていますか? これまでにありがとうございました! – shredding

+0

マイク入力とバッファにロードするサンプルファイルのサンプルレートに不一致があります。あなたのサウンドが44.1khzなら、あなたのマイクは44.1khzでなければなりません。私は確かにマイクは44.1khzでサンプリングされていません。したがって、44.1kHzのバッファーをマイクの同じサンプル周波数にダウンサンプリングする必要があります。これはSoundのrawバイトをループし、Nバイトごとにマスターに抽出します。 indexStep = 44.1khz/16khz。丸め誤差を累積し、X秒ごとに余分なバイトを取らなければならないかもしれません。浮動小数点を維持し、(acc> 1.0){acc = 1.0; sampleExtraByte()} – chubbsondubs

関連する問題