关于AndroidPhone传输数据

来源:互联网 发布:ios 数组转json字符串 编辑:程序博客网 时间:2024/06/01 23:43

暂时引用这一段

public class AudioSend {
    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);
*/




原创粉丝点击