SampleData ждет именно семплы, а вы скармливаете ему кодированный звук. Так работать не будет. Почитайте хелп.
вот пример простой реализации работы со звуком с микрофона, код не комментирован, но думаю там всё очевидно
Код AS3:
///********************************************************************
///* Copyright © 2012 fishr (fishr.flash@gmail.com)
///********************************************************************
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.events.SampleDataEvent;
import flash.events.StatusEvent;
import flash.media.Microphone;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.system.Security;
import flash.utils.ByteArray;
import flash.utils.getTimer;
/**
* ...
* @playerversion Flash 10
* @langversion 3.0
* @author fishr
* @created 16.08.2012 4:54
* @since 16.08.2012 4:54
*/
public class VRModel extends EventDispatcher
{
/**-------------------------------------------------------------------------------
*
* V A R I A B L E ' S
*
* --------------------------------------------------------------------------------
*/
//{
static private const AUTHOR:String = "fishr (fishr.flash@gmail.com)";
private const _SOUND:Sound = new Sound();
private var _mic:Microphone;
private var _audiodata:ByteArray;
private var _prevAccess:Boolean;
private var _getTime:int;
private var _timeRec:int;
private var _soundChanel:SoundChannel;
//}
/**-------------------------------------------------------------------------------
*
* P R O P E R T I E S
*
* --------------------------------------------------------------------------------
*/
//{
public function get mic():Microphone
{
return _mic;
}
public function get timeRec():int
{
return _timeRec;
}
//}
/**-------------------------------------------------------------------------------
*
* P U B L I C
*
* --------------------------------------------------------------------------------
*/
//{
public function VRModel( mic:Microphone, audiodata:ByteArray )
{
init( mic, audiodata );
}
internal function onPlay( event:RecorderEvent ):void
{
if ( _SOUND.hasEventListener( SampleDataEvent.SAMPLE_DATA ) )
{
_SOUND.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleData );
_soundChanel.stop();
}
else
{
selectPosRead( event.data as Number );
_SOUND.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleData );
_soundChanel = _SOUND.play();
_soundChanel.addEventListener(Event.SOUND_COMPLETE, soundComplete );
}
}
internal function onRecord( event:RecorderEvent ):void
{
if ( _mic.hasEventListener( SampleDataEvent.SAMPLE_DATA ) )
{
_mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleEvent);
_audiodata.position = 0;
}
else
{
_audiodata.position = 0;
_timeRec = 0;
_getTime = getTimer();
/// активирует передачу звука с микрофона
_mic.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleEvent);
_mic.setLoopBack( true );
if ( !_mic )
{
this.dispatchEvent( new RecorderEvent( RecorderEvent.NO_MIC ) );
_mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleEvent);
return;
}
if ( _prevAccess )
{
Security.showSettings();
this.dispatchEvent( new RecorderEvent( RecorderEvent.ACCESS_DENIED ) );
_mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleEvent);
}
}
}
internal function clickStop( e:MouseEvent ):void
{
_SOUND.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleData );
if( _soundChanel )_soundChanel.stop();
}
//}
/**-------------------------------------------------------------------------------
*
* P R I V A T E
*
* --------------------------------------------------------------------------------
*/
//{
private function init(mic:Microphone, audiodata:ByteArray):void
{
_mic = mic || Microphone.getMicrophone();
_audiodata = audiodata || new ByteArray();
_mic.setSilenceLevel( 0 );
_mic.addEventListener(StatusEvent.STATUS, onStatusMic );
_mic.rate = 44;
}
private function onStatusMic(event:StatusEvent):void
{
if (event.code == "Microphone.Muted" )
{
if ( !_prevAccess )
{
_prevAccess = true;
_mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleEvent);
this.dispatchEvent( new RecorderEvent( RecorderEvent.ACCESS_DENIED ) );
}
}
else if ( event.code == "Microphone.Unmuted" && _prevAccess )
{
_prevAccess = false;
this.dispatchEvent( new RecorderEvent( RecorderEvent.ACCESS_ALWAYS ) );
}
}
private function sampleEvent(e:SampleDataEvent):void
{
try
{
while ( e.data.bytesAvailable )
{
const float:Number = e.data.readFloat();
_audiodata.writeFloat( float );
const wavePow:Number = Math.abs( float );
}
}
catch ( err:Error )
{
this.dispatchEvent( new RecorderEvent( RecorderEvent.LIMIT_DATA ) );
}
_timeRec = getTimer() - _getTime;
}
private function sampleData(e:SampleDataEvent):void
{
var i:uint = 8192;
while ( i-- )
{
if ( !_audiodata.bytesAvailable )
{
break;
}
const sample:Number = _audiodata.readFloat();
e.data.writeFloat( sample );
e.data.writeFloat( sample );
}
}
private function selectPosRead( nm:Number ):void
{
_audiodata.position = ( int( ( ( _audiodata.length ) / ( 4 * 8192 ) ) * nm ) * ( 4 * 8192 ) );
}
private function soundComplete(e:Event):void
{
_soundChanel.stop();
this.dispatchEvent( new RecorderEvent( RecorderEvent.END_TAPE )) ;
}
//}
}
}