首页 > 代码库 > ActionScript:Resampling PCM data

ActionScript:Resampling PCM data

使用基于flash的麦克风录音,如果想在获取完PCM采样数据后,通过Sound马上回放,必须经过resampling。(注意:如果录音是采用的44KHz的话,则不需要)

因此,需要as实现一个简便的函数完成这个转换。

 

public function resampleSamples(sourceSamples:ByteArray, targetSamples:ByteArray, sourceRate:int, targetRate:int = 44100):void 		{			var left:Number= Math.floor(sourceRate/1000);			var right:Number= Math.floor(targetRate/1000);			var lcm:Number=MathEx.lcm(left,right);			var sourceMumtiple:Number=lcm/left;			var targetMumtiple:Number=lcm/right;			var sourceSampleCount:Number=sourceSamples.length/4;						var sourceSampleIndex:Number=1;			var targetSampleIndex:Number=0;			sourceSamples.position=0;			var sample:Number=sourceSamples.readFloat();							while(sourceSampleIndex<sourceSampleCount)			{				if(targetSampleIndex*targetMumtiple>sourceSampleIndex*sourceMumtiple)				{					sample=sourceSamples.readFloat();					sourceSampleIndex++;					continue;				}								targetSamples.writeFloat(sample);				targetSampleIndex++;			}			}

  

(MathEx.lcm是自己实现的一个求最小公倍数的函数)

ActionScript:Resampling PCM data