私は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();
}
}
ありがとうございます。私は試して、確かにいくつかのサンプルコードで戻ってくるだろう:) – shredding
これはクールですが、私は残っている問題が1つあります。それは完璧に動作し、私はそのカットを行うことができました。私はマスターを使用してマイククラスに戻し、最後に新しい録音を追加します。 私の質問をもう一度確認してください。コードを追加しました。 これが機能している間は、インタル録音の音程がかなり低くなります。 私はこのような長さを計算しています:sound.length * 44.1(44.1は私の率です)。 これはなぜ起こるか考えていますか? これまでにありがとうございました! – shredding
マイク入力とバッファにロードするサンプルファイルのサンプルレートに不一致があります。あなたのサウンドが44.1khzなら、あなたのマイクは44.1khzでなければなりません。私は確かにマイクは44.1khzでサンプリングされていません。したがって、44.1kHzのバッファーをマイクの同じサンプル周波数にダウンサンプリングする必要があります。これはSoundのrawバイトをループし、Nバイトごとにマスターに抽出します。 indexStep = 44.1khz/16khz。丸め誤差を累積し、X秒ごとに余分なバイトを取らなければならないかもしれません。浮動小数点を維持し、(acc> 1.0){acc = 1.0; sampleExtraByte()} – chubbsondubs