如何在java中更改音调的频率

  • 本文关键字:频率 java java audio
  • 更新时间 :
  • 英文 :


我正在写一个程序,我想让它播放一个频率。但是我不知道在我的代码中哪里我必须更改一些东西。

 try
    {
        byte[] buf = new byte[ 1 ];;
        AudioFormat af = new AudioFormat( (float )44100, 8, 1, true, false );
        SourceDataLine sdl = AudioSystem.getSourceDataLine( af );
        sdl = AudioSystem.getSourceDataLine( af );
        sdl.open( af );
        sdl.start();
        for( int i = 0; i < 1000 * (float )44100 / 1000; i++ ) {
           double angle = i / ( (float )44100 / 440 ) * 2.0 * Math.PI;
           buf[ 0 ] = (byte )( Math.sin( angle ) * 100 );
           sdl.write( buf, 0, 1 );
        }
        sdl.drain();
        sdl.stop();
        sdl.close();
        }
    catch (Exception x1)
    {
    }
    }     

在以下行中:

double angle = i / ( (float )44100 / 440 ) * 2.0 * Math.PI;

玩440这个数字。这个数字应该是你的频率(赫兹)。我知道这是通过消除过程和440hz是音频领域的"你好,世界"。

听力的理论范围是20hz到22000hz。(22khz)

在大多数情况下,对于正常的听力和扬声器,您看到的是65hz-16000hz

你看到的其他一些东西:

44100-您的样本率

1000-很确定这只是一秒内的毫秒。所以44100/1000从采样/秒转换为采样/毫秒

Math.sin-使用sin函数根据时间(本质上是你所在的样本)创建y值

如果你想在短时间内更好地理解这一点;查找采样率和比特深度的定义。

此外,一如既往,rtfm。。。看看文档,看看你传递的参数的参数是什么

 AudioFormat af = new AudioFormat( (float )44100, 8, 1, true, false );

44100是抽样率,但对我来说,8,1,真,假可能意味着任何东西。(8可能是比特深度。16比特更常见,1可能意味着单声道…)。

如果查看这些内容会引发更多音频问题,请回复。

-干杯

最新更新