2012-10-06 50 views
4

我的波形发生器出现问题。我试图用给定频率的声音创建一个.wav文件。我的代码使用方法:如何用自定义频率音/波创建.wav文件?

$freqOfTone = 21000; 
$sampleRate = 44100; 
$samplesCount = 80000; 

$amplitude = 0.25 * 32768; 
$w = 2 * pi() * $freqOfTone/$sampleRate; 

for ($n = 0; $n < $samplesCount; $n++) 
{ 
    $data->samples[1][] = 32768 + (int)($amplitude * sin($n * $w)); 
} 

不幸的是,输出波形是不正确的,我会获得一些频率,而不是一个:http://i49.tinypic.com/ab1nx0.png

它应该是这样的: http://i50.tinypic.com/33zbslk.png

我在哪里做的事情错误? :(

+1

您的代码看起来不错。你是否认为这个问题可能与写入数据或数据格式有关?有符号与无符号,位深度等 – Brad

+0

由于'samplesCount'不是波周期的倍数,它可能是一个别名问题 - 尝试调整该参数。 – moonwave99

+0

@ moonwave99我将$ samplesCount更改为88200.它不能解决问题。输出文件看起来是一样的......我认为样本的数量不应该对频率的波动有任何影响。 – Sirtarius

回答

1

鉴于采样率,所需的频率过于接近Nyquist frequency被正确采样。我建议你使用96kHz的采样率用于此。

+0

嗯...我想留在我的44,1kHz。有没有什么办法可以计算最近的可用频率? – Sirtarius

+2

要开始有任何合适的分辨率,您应该每个周期至少有4个采样,使您在11.025kHz。这似乎很低,但请记住,44.1kHz的带宽是为了录制音乐而选择的,而不是用于高频实验。 –

0

我已经finaly取得了一些成绩,但我的解决办法这与我的意思有点不同......无论如何,我拿了样品,并通过高通频率滤波器。信号有点失真,但仍然足够我的目的:)

相关问题