我在 AS3 中有一个可用的麦克风录音脚本,我已经能够成功地使用它通过 AMF 将 .wav 文件保存到服务器。这些文件在任何音频播放器中播放都很好,没有奇怪的效果。
作为参考,这是我为捕获麦克风的 ByteArray 所做的事情:(在名为 AudioRecorder 的类中)
public function startRecording():void {
_rawData = new ByteArray();
_microphone
.addEventListener(SampleDataEvent.SAMPLE_DATA,_samplesCaptured, false, 0, true);
}
private function _samplesCaptured(e:SampleDataEvent):void {
_rawData.writeBytes(e.data);
}
这没有问题。录制完成后,我可以获取 _rawData 变量并通过 WavWriter 类等运行它。
但是,如果我使用从 adobe 食谱改编的以下代码运行相同的 ByteArray 作为声音:(在名为 WavPlayer 的类中)
public function playSound(data:ByteArray):void {
_wavData = data;
_wavData.position = 0;
_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, _playSoundHandler);
_channel = _sound.play();
_channel
.addEventListener(Event.SOUND_COMPLETE, _onPlaybackComplete, false, 0, true);
}
private function _playSoundHandler(e:SampleDataEvent):void {
if(_wavData.bytesAvailable <= 0) return;
for(var i:int = 0; i < 8192; i++) {
var sample:Number = 0;
if(_wavData.bytesAvailable > 0) sample = _wavData.readFloat();
e.data.writeFloat(sample);
}
}
音频文件以双倍速度播放!我检查了记录比特率等,很确定这些都是正确的,我尝试更改缓冲区大小和我能想到的任何其他数字。它可能是单声道与立体声的东西吗?
希望我在这里足够清楚,谢谢!