使用基于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是自己实现的一个求最小公倍数的函数)

相关文章:

  • 2022-01-23
  • 2021-11-19
  • 2022-02-14
  • 2021-07-23
  • 2021-11-26
  • 2022-12-23
猜你喜欢
  • 2021-03-25
  • 2022-01-08
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
相关资源
相似解决方案