用Android设备来播放指定频率的纯音,首先考虑到纯音是一种固定频率的声波,其实也就是正弦声波了。其实所有声音都是有正弦波组成,只不过纯音是固定频率的正弦波。那么要实现Andoird播放纯音,那么首先就应该绘制出正弦波来。 那么看下面这段代码:
public class SinWave {
/** 正弦波的高度**/
public static final int HEIGHT = 127;
/** 2PI**/
public static final double TWOPI = 2 * 3.1415;
/**
* 生成正弦波
* @param wave
* @param waveLen 每段正弦波的长度
* @param length 总长度
* @return
*/
public static byte[] sin(byte[] wave, int waveLen, int length) {
for (int i = 0; i < length; i++) {
wave[i] = (byte) (HEIGHT * (1 - Math.sin(TWOPI
* ((i % waveLen) * 1.00 / waveLen))));
}
return wave;
}
}
首先正弦波的高度设置为127,因为这里只打算使用8位的采样率,2的8次方就应该是256,所以正弦波的波峰就应该是127了。sin(byte[] wave, int waveLen, int length)方法就是根据波的长度还有整个声波的总长度来生成正弦波的值。最后可以根据数组下标将值打印出来,就是正弦波的形状了(只是不是很规则啦。。。)
生成正弦波的方法有了,那么接下来就该实现播放