Ну, я где-то так и надеялся в душе, что не должно быть очень сложно %) Но пока что загвоздка оказалась немного в другом - не могу понять как флеш описывает звук...

Код:
package encoding {
/**
* ...
* @author wvxvw
*/
import flash.media.SoundMixer;
import flash.utils.ByteArray;
import flash.utils.Endian;
private static var _dataSize:int = 0;
private static var _header:ByteArray;
private static function writeHeader():void
{
_header = new ByteArray();
_header.endian = Endian.LITTLE_ENDIAN;
_header.writeMultiByte('RIFF', 'us-ascii');
_header.writeInt(0); // size! should redefine!!!!!!!!
_header.writeMultiByte('WAVE', 'us-ascii');
_header.writeMultiByte('fmt ', 'us-ascii');
_header.writeInt(40); //fmt chunk size may be different!
_header.writeByte(0xFF);
_header.writeByte(0xFE); // WAVE_FORMAT_EXTENSIBLE may be different!
_header.writeByte(0x02);
_header.writeByte(0x00); // channels
_header.writeInt(44100); // sample rate : 44100 Hz
_header.writeInt(352800); // bytes per second
_header.writeByte(0x08);
_header.writeByte(0x00); // bytes per block
_header.writeByte(0x20);
_header.writeByte(0x00); // bytes per sample
_header.writeByte(0x0D);
_header.writeByte(0x00); // additional info
_header.writeByte(0x20);
_header.writeByte(0x00); // valid bytes per sample
_header.writeByte(0x04);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0x00);// bytes per channel
_header.writeByte(0x01);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0x10);
_header.writeByte(0x00);
_header.writeByte(0x80);
_header.writeByte(0x00);
_header.writeByte(0x00);
_header.writeByte(0xAA);
_header.writeByte(0x00);
_header.writeByte(0x38);
_header.writeByte(0x9B);
_header.writeByte(0x71); // subformat
_header.writeMultiByte('fact', 'us-ascii');
_header.writeInt(4);
_header.writeInt(0);
_header.writeMultiByte('data', 'us-ascii');
_header.writeInt(0); //data size! should redefine!!!!!!!!
}
public static function encode():ByteArray
{
return _header;
}
public static function append(b:ByteArray):void
{
if (!_header) writeHeader();
_dataSize += b.length;
_header.position = 3;
_header.writeInt(_header.length);
_header.position = 79;
_header.writeInt(_dataSize);
_header.position = _header.length - 1;
_header.writeBytes(b);
}
}
это пока что наработки, если кому интересно...