Показать сообщение отдельно
Старый 04.08.2013, 00:55
xrapa вне форума Посмотреть профиль Отправить личное сообщение для xrapa Найти все сообщения от xrapa
  № 6  
Ответить с цитированием
xrapa

Регистрация: Mar 2013
Сообщений: 41
если кому понадобиться то проблему решил с помощью этой ссылки
http://suzhiyam.wordpress.com/2011/0...cord-and-save/
(Karaoke)
но тут сохраняется в wav, а он много весит, может кто объяснить как сделать чтоб файл был mp3.
Код AS3:
package org.bytearray.micrecorder.encoder
{
	import flash.events.Event;
	import flash.utils.ByteArray;
	import flash.utils.Endian;
 
	import org.bytearray.micrecorder.IEncoder;
 
	public class WaveEncoder implements IEncoder
	{
		private static const RIFF:String = "RIFF";	
		private static const WAVE:String = "WAVE";	
		private static const FMT:String = "fmt ";	
		private static const DATA:String = "data";	
 
		private var _bytes:ByteArray = new ByteArray();
		private var _buffer:ByteArray = new ByteArray();
		private var _volume:Number;
 
		/**
		 * 
		 * @param volume
		 * 
		 */		
		public function WaveEncoder( volume:Number=1 )
		{
			_volume = volume;
		}
 
		/**
		 * 
		 * @param samples
		 * @param channels
		 * @param bits
		 * @param rate
		 * @return 
		 * 
		 */		
		public function encode( samples:ByteArray, channels:int=2, bits:int=16, rate:int=44100 ):ByteArray
		{
			var data:ByteArray = create( samples );
 
			_bytes.length = 0;
			_bytes.endian = Endian.LITTLE_ENDIAN;
 
			_bytes.writeUTFBytes( WaveEncoder.RIFF );
			_bytes.writeInt( uint( data.length + 44 ) );
			_bytes.writeUTFBytes( WaveEncoder.WAVE );
			_bytes.writeUTFBytes( WaveEncoder.FMT );
			_bytes.writeInt( uint( 16 ) );
			_bytes.writeShort( uint( 1 ) );
			_bytes.writeShort( channels );
			_bytes.writeInt( rate );
			_bytes.writeInt( uint( rate * channels * ( bits >> 3 ) ) );
			_bytes.writeShort( uint( channels * ( bits >> 3 ) ) );
			_bytes.writeShort( bits );
			_bytes.writeUTFBytes( WaveEncoder.DATA );
			_bytes.writeInt( data.length );
			_bytes.writeBytes( data );
			_bytes.position = 0;
 
			return _bytes;
		}
 
		private function create( bytes:ByteArray ):ByteArray
		{
			_buffer.endian = Endian.LITTLE_ENDIAN;
			_buffer.length = 0;
			bytes.position = 0;
 
			while( bytes.bytesAvailable ) 
				_buffer.writeShort( bytes.readFloat() * (0x7fff * _volume) );
			return _buffer;
		}
	}
}