我需要控制声音播放速度,以便从声音文件中提取样本数据但是如何控制音量然后SoundTranform.volume无效?
private function onSampleData(event:SampleDataEvent):void
{
var l:Number;
var r:Number;
var outputLength:int = 0;
while (outputLength < 2048)
{
_loadedMP3Samples.position = int(_phase) * 8; // 4 bytes per float and two channels so the actual position in the ByteArray is a factor of 8 bigger than the phase
l = _loadedMP3Samples.readFloat(); // read out the left and right channels at this position
r = _loadedMP3Samples.readFloat(); // read out the left and right channels at this position
event.data.writeFloat(l); // write the samples to our output buffer
event.data.writeFloat(r); // write the samples to our output buffer
outputLength++;
_phase += _playbackSpeed;
if (_phase < 0)
_phase += _numSamples;
else if (_phase >= _numSamples)
_phase -= _numSamples;
}
}
答案 0 :(得分:1)
体积:
使用说var volume: Number = 1.0
作为字段变量。 0.0表示静音,1.0表示原始音量。改变其他方法。但是,听众可以欣赏补间这个变量。
event.data.writeFloat(volume * l);
event.data.writeFloat(volume * r);
速度:
您必须重新采样并使用插值来定义中间值。
它在数学上有所涉及,但我确定有大量的图书馆可以为你做这件事。但是,嘿,这是一个教程,告诉你有多明显:
http://www.kelvinluck.com/2008/11/first-steps-with-flash-10-audio-programming/
编辑:哦,你使用过这个教程......你可以说。
修改_playbackSpeed。 1.0是全速。 2.0是双倍速度。