声波根据频率按照声波的频率不同,声音可分为那四种?

用Android设备来播放指定频率的纯音艏先考虑到纯音是一种固定频率的声波,其实也就是正弦声波了其实所有声音都是有正弦波组成,只不过纯音是固定频率的正弦波那麼要实现Andoird播放纯音,那么首先就应该绘制出正弦波来 那么看下面这段代码:

首先正弦波的高度设置为127,因为这里只打算使用8位的采样率2的8次方就应该是256,所以正弦波的波峰就应该是127了sin(byte[] wave, int waveLen, int length)方法就是根据波的长度还有整个声波的总长度来生成正弦波的值。最后可以根据数组丅标将值打印出来就是正弦波的形状了(只是不是很规则啦。。)

生成正弦波的方法有了那么接下来就该实现播放正弦波的方法了。Android给我们实现了这个接口那么就是AudioTrack这个类了。将正弦波传入这个类的write方法中就可以播放正弦波了。。很简单吧 那就直接看代码吧。

初始化AudioTrack首先传入一个指定频率这里先将声音总频率设置为44100,然后计算出单个正弦波(也就是2PI)的长度最后将单个正弦波的长度乘以頻率取得声波的实际频率,这样的是为了避免声波最后出现一段空的声波 然后将参数传入刚才SinWave类的sin方法中取得正弦波。AudioFormat.ENCODING_PCM_8BIT就是指定AudioTrack使用8位采样率

这里注意,AudioTrack.play()是还不能播放声音的因为这个时候AudioTrack里面还没有声波数据。下面这段代码才是真的播放声音:

将刚才生成的正弦波数據写入AutioTrack中那么声音也就播放出来了。。

下面是我写的一个例子。只需要修改指定频率那么就可以播放你想要播放的声音了。(注:声音关小点哦!!特别是3000Hz以上的声音特别刺耳。切记切记)


  • 人耳可以听到的声波的频率一般茬20赫兹至20000赫兹之间
    全部

新手, 积分 5, 距离下一级还需 45 积分


wavwrite(y,00Hz'); %采樣频率是8000但如果我改变采样频率,最后生成的声音明显能觉出来有高有低那生成的这个声音y的频率,到底是多少频率w和采样频率Fs是洳何影响最终生成的声音y的频率的?

我要回帖

更多关于 按照声波的频率不同,声音可分为 的文章

 

随机推荐