此文是借鉴于CSDN 某大牛博客改进之后的代码首先, 要保证蓝牙设备的链接,可用手机直接蓝牙设备进行连接,连接的代码不写了如蓝牙耳机已开启则直接运行以下步骤1.  实例化  录音对象    Recorder mRecorder = new Recorder(mContext);
1.1开始录音mRecorder.startRecord(new Recorder.RecoderListener() {    @Override    public void onData(byte[] data) {  //data 为录音的原始数据  pcm格式原始数据。根据个人需要进行转化。       } }

 

1.2停止录音mRecorder.stopRecord();

2.蓝牙耳机播放 

2.1蓝牙耳机播放对象的初始化

AudioManager mAudioManager = (AudioManager) mContext.getSystemService(mContext.AUDIO_SERVICE);

int audioBufSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);

AudioTrack player = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 16000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, audioBufSize,AudioTrack.MODE_STREAM);

2.2 播放

首先将要播放的数据写入到设备当中 写入之后调用播放 API。

    player.write(data, index, length);   // 数据写入蓝牙    data  为播放是数据源。  index 为播放起点。 length 数据长度

  player.play(); //播放
录音实现代码 可直接粘贴走public class Recorder {    private Context mContext;    private AudioManager mAudioManager;    private RecoderListener mListener;    private RecordThread mRecordingThread = null;    public Recorder(Context context) {        this.mContext = context;        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);    }    public interface RecoderListener {        void onData(byte[] data);    }    public void startRecord(RecoderListener listener) {        mListener = listener;        if (mAudioManager.isBluetoothScoAvailableOffCall()) {            if (mAudioManager.isBluetoothScoOn()) {                mAudioManager.stopBluetoothSco();                Log.e("BTRecordImpl", "1mAudioManager.stopBluetoothSco()");            }            Log.e("BTRecordImpl", "1-->startBluetoothSco");            mAudioManager.startBluetoothSco();            long timeout = 100;            while (!mAudioManager.isBluetoothScoOn() && timeout-- > 0) {                try {                    Thread.sleep(10);                } catch (InterruptedException e) {                    e.printStackTrace();                }                if (timeout == 50) {                    Log.e("BTRecordImpl", "2-->startBluetoothSco");                    mAudioManager.startBluetoothSco();                }                Log.e("BTRecordImpl", "change BluetoothScoOn  -->" + mAudioManager.isBluetoothScoOn() + ":" + timeout);            }            if (mRecordingThread != null) {                mRecordingThread.pause();                mRecordingThread.interrupt();            }            mRecordingThread = new RecordThread();            mRecordingThread.start();        }    }    private class RecordThread extends Thread {        private AudioRecord audioRecord;        private int bufferSize;        private boolean isRun = false;        private long mStartTime = 0L;        private int SAMPLE_RATE_HZ = 16000;        public RecordThread() {            int audiosource = MediaRecorder.AudioSource.VOICE_RECOGNITION;            if (Build.VERSION.SDK_INT > 19) {                audiosource = MediaRecorder.AudioSource.VOICE_COMMUNICATION;            }            this.bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE_HZ, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 2;            this.audioRecord = new AudioRecord(audiosource, SAMPLE_RATE_HZ, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, this.bufferSize);        }        @Override        public void run() {            super.run();            this.isRun = true;            try {                if (audioRecord.getState() == 1) {                    this.audioRecord.startRecording();                    mStartTime = System.currentTimeMillis();                    while (this.isRun) {                        byte[] buffer = new byte[bufferSize];                        int readBytes = audioRecord.read(buffer, 0, bufferSize);                        if (readBytes > 0) {                            if (mListener != null) {                                mListener.onData(buffer);                            }                        }                    }                    try {                        this.audioRecord.stop();                        this.audioRecord.release();                    } catch (Exception audioException) {                    }                    Log.e("RecordingManager", "endVoiceRequest() --> ");                }            } catch (Exception e2) {                Log.e("BtRecordImpl", "error: " + e2.getMessage());                try {                    this.audioRecord.stop();                    this.audioRecord.release();                } catch (Exception audioException) {                }                isRun = false;            }        }        void pause() {            this.isRun = false;            try {                this.audioRecord.stop();                this.audioRecord.release();            } catch (Exception e) {            }        }        public synchronized void start() {            if (!isRun) {                super.start();            }        }    }//停止录音    public void stopRecord() {        System.out.println("stopRecord");        if (mRecordingThread != null) {            mRecordingThread.pause();            mRecordingThread = null;        }    }}

更多相关文章

  1. Android使用Service播放音乐
  2. Android(安卓)RFCOMM connect() faild 记录(未解决)
  3. android音乐播放器例子及其源码分析
  4. Android唯一识别号
  5. Android之VideoView播放视频
  6. Android(安卓)蓝牙相关开发
  7. FFmpeg编程开发笔记 —— Android(安卓)FFmpeg + SDL2.0简易播放
  8. Android媒体相关开发应用程序接口
  9. android opengl 播放 yuv数据

随机推荐

  1. Android(安卓)scrollTo() scrollBy() Scr
  2. 【Android】创建Popwindow弹出菜单的两种
  3. Android拒绝来电的实现--ITelephony类的
  4. android openGL ES 01
  5. Android(安卓)中导入Gson jar包后出现 ja
  6. 联系人数据库设计之PhotoPriorityResolve
  7. Android中运行时配置环境的改变
  8. Android(安卓)Gallery的使用
  9. android定时任务的实现
  10. android 多媒体部分学习笔记九----数字音