私は簡単なフラッシュゲームを作っています。基本的には、30秒間連続してターンテーブルを持ち、複数のサンプルレイヤーを組み合わせて、最終的なソングを構成します。ゲームセッションサウンド再生/録音
これで、ゲームの最後にサウンドを録音して再生したいと考えています。
私は、mp3オーディオを取り込んで、同じサウンドチャンネルにオーディオをミックスすることを希望するbyteArraysに変換するSoundFxクラスを作成しました。
私はバイトタイムを適切にミックスすることができないので、今私は一定の邪魔になりました。私はあなたがミックスにチャンネルを追加すると、バイトの配列をエンコードすることは不可能だと思っています。
私は正しい方向に導かれたいと思っています。私はここから進んでいく最善の方法、たとえ再生だけでいいのか分からない。ボタンログを作成すると、おそらく再生を修正し、2回目の実行でオーディオをミキシングしてファイルにまっすぐ進むことができます。これを達成するには長い道のりが間違いないようです。事前に私の安っぽい英語
多くの感謝と謝罪
デヴィッド・R.
問題に関するいくつかのコード:
private var srcSound:Sound;
private var sound1:Sound;
private var sound2:Sound;
private var soundChannel:SoundChannel;
private var bytes:ByteArray;
private var incbytes:ByteArray;
private var mixedBytes:ByteArray;
public var pitchShiftFactor:Number;
public var position:Number;
public var AddSound:Boolean = false;
public var incremental:Number;
public var left1:Number;
public var left2:Number;
public var right1:Number;
public var right2:Number;
public var mixedBytes1:Number;
public var mixedBytes2:Number;
public function SoundFx() {
}
public function playFx(srcSound:Sound):void{
this.srcSound = srcSound;
position = 0;
var morphedSound:Sound = new Sound();
morphedSound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);
soundChannel = morphedSound.play();
}
public function addSound(sound1:Sound , sound2:Sound):void{
this.sound1 = sound1;
this.sound2 = sound2;
sound1.addEventListener(SampleDataEvent.SAMPLE_DATA, addSampleData);
position = 0;
soundChannel = sound1.play();
soundChannel = sound2.play();
AddSound = true;
}
private function addSampleData(event:SampleDataEvent):void{
position = 0;
var incbytes:ByteArray = new ByteArray();
position += sound1.extract(incbytes, 4096, position);
var bytes:ByteArray = new ByteArray();
position += sound2.extract(bytes, 4096, position);
event.data.writeBytes(mixBytes(bytes, incbytes));
}
private function sampleDataHandler(event:SampleDataEvent):void
{
var bytes:ByteArray = new ByteArray();
position += srcSound.extract(bytes, 4096, position);
event.data.writeBytes(editBytes(bytes));
}
private function mixBytes(bytes1:ByteArray , bytes2:ByteArray):ByteArray{
bytes.position = 0;
incbytes.position = 0;
var returnBytes:ByteArray = new ByteArray();
while(bytes1.bytesAvailable > 0)
{
left1 = bytes1.readFloat();
left2 = bytes2.readFloat();
right1 = bytes1.readFloat();
right2 = bytes2.readFloat();
mixedBytes1 = left1 + left2;
mixedBytes2 = right1 + right1;
mixedBytes.writeFloat(mixedBytes1);
mixedBytes.writeFloat(mixedBytes2);
}
return mixedBytes;
}
private function editBytes(bytes:ByteArray):ByteArray{
//var skipCount:Number = 0;
var returnBytes:ByteArray = new ByteArray();
bytes.position = 0;
while(bytes.bytesAvailable > 0)
{
//skipCount++;
returnBytes.writeFloat(bytes.readFloat());
returnBytes.writeFloat(bytes.readFloat());
}
return returnBytes;
}
}
感謝!私はそれをチェックし、結果が投稿されたら完了します:) – user1375895