暂时引用这一段
static int baudRate = 4800;
static int maxRate = 48000;
static int delayBit = 0;
private static byte ihigh = (byte) (-128);
private static byte ilow = (byte) (16);
AudioTrack audioplayer;
static int minSize;
static byte[] getBuffer(String str) {
int bytesinframe = delayBit + 10;//delay + 8bit + 一个标识开始的位 + 一个标识结束的位
byte[] sendme = str.getBytes();
int n = maxRate / baudRate;
boolean[] bits = new boolean[sendme.length /*\*bytesinframe*/];
byte[] waveform = new byte[(sendme.length/*\*bytesinframe * n*/)];
// 防止失真,延长每个波的变化的播放时间 Arrays.fill(bits, true);
// 当其不断传出电流的时候标志着无信息传送,一旦有低压电流标志开始传送数据
int i, m, k, j = 0;
for (i = 0; i < sendme.length; ++i) {
m = i/*\*bytesinframe*/;
bits[m] = false;
bits[++m] = ((sendme[i] & 1) == 1);
//位操作,也可以先转换成数字再用 Integer.toBinaryString = bits[ ++m]=((sendme[i] & 2) bits[++m] = ((sendme[i] & 4) == 4);
bits[++m] = ((sendme[i] & 8) == 8);
bits[++m] = ((sendme[i] & 16) == 16);
bits[++m] = ((sendme[i] & 32) == 32);
bits[++m] = ((sendme[i] & 64) == 64);
bits[++m] = ((sendme[i] & 128) == 128);
//加上延时的位
for (k = 0; k < bytesinframe - 9; k++) {
bits[++m] = true;
}
}
//转换成需要的byte数组
for (i = 0; i < bits.length; i++) {
for (k = 0; k < n; k++) {
waveform[j++] = (bits[i]) ? ((byte) (ihigh)) : ((byte) (ilow));
}
}
bits = null;
return waveform;
}
public void play(String str) {
byte[] send = getBuffer(str);
minSize = AudioTrack.getMinBufferSize(48000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioplayer = new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minSize, AudioTrack.MODE_STREAM);
audioplayer.play();
audioplayer.write(send, 0, send.length);
audioplayer.stop();
audioplayer.release();
}
}
// 在构造audiotrack的时候
/* minSize=AudioTrack.getMinBufferSize(48000,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT);
audioplayer=new AudioTrack(AudioManager.STREAM_MUSIC,48000,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT,minSize,AudioTrack.MODE_STREAM);
*/