Показать сообщение отдельно
Старый 17.06.2008, 20:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, я где-то так и надеялся в душе, что не должно быть очень сложно %) Но пока что загвоздка оказалась немного в другом - не могу понять как флеш описывает звук...
Код:
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);
	}
	
}
это пока что наработки, если кому интересно...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 17.06.2008 в 20:33.