마이크에서 오디오를 녹음하고 있지만 WaveEncoder (또는 다른 인코더 - 여러 번 시도한)를 사용하여이 원시 데이터를 wav 형식으로 인코딩하려고하면 너무 빨리 생성됩니다 초당 샘플) 음성을 44100Hz로 전송합니다. 여기에 인코딩을위한 코드입니다 :WAV 형식의 원시 데이터 - 조정 비율 44100
private static const RIFF:String = "RIFF";
private static const WAVE:String = "WAVE";
private static const FMT:String = "fmt ";
private static const DATA:String = "data";
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;
}
는 그리고 여기 내가 ActionScript에서 마이크를 초기화하는 방법 :
soundClip = new ByteArray();
microphone = Microphone.getMicrophone();
microphone.rate = 44;
microphone.gain = 100;
microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, microphone_sampleDataHandler);
protected function microphone_sampleDataHandler(event:SampleDataEvent):void
{
level.width = microphone.activityLevel * 3;
level.height = microphone.activityLevel * 3;
while (event.data.bytesAvailable)
{
var sample:Number = event.data.readFloat();
soundClip.writeFloat(sample);
}
}
은 내가 22050에 속도를 감소하는 경우에만 정상적인 연설을 달성 할 수 있지만, 나는 그것이 나중에 44,100되고 싶어요 내가 할거야. 어떤 제안?
마이크 사운드는 모노이지만 스테레오 (2 채널)로 인코딩하고 있습니다. 'microphone_sampleDataHandler' 함수에서 샘플을 몇 번 푸시하고 있습니까? 가능한 경우 해당 코드를 추가하십시오. – Moorthy
게시물을 업데이트하고 microphone_sampleDataHandler 함수를 포함했습니다. –
내 대답을 확인하십시오. – Moorthy