1. 程式人生 > >藍牙ble數據轉語音實現Android AudioRecord方法推薦

藍牙ble數據轉語音實現Android AudioRecord方法推薦

orm 1.0 sem gin symbol -- ger radi cal

藍牙ble數據轉語音實現Android AudioRecord方法推薦

教程

歡迎走進zozo的學習之旅。

概述

藍牙BLE又稱bluetooth smart,主打的是低功耗和快速鏈接,所以在支持的profile並沒有audio的部分,而藍牙語音協議A2DP只在傳統藍牙中有,本文就是提供一種利用ble數據來傳輸壓縮語音,並最終在實現用android語音框架中的AudioRecord方法來獲取語音流。

主要思路

首先問題的需求是從一種非標準的協議掛載成為一個標準協議。那通過修改kernel的bluetooth協議或者是修改android的語音框架都是可以實現的,但是不論哪種方式都要耗費大量的工作,而且這兩種的哪一種的修改都會給平臺的更換或者是系統版本的更換帶來很大的障礙。

那這裏提供的一種較為簡單的思路來實現:在kernel內建議一個upcm的聲卡,運行一個守護進程將ble的對應數據解壓後放入聲卡這樣AudioRecord就可以獲取PCM的語音流了。另外,android語音的掛載需要添加so庫,並修改Audio的配置文件audio_policy.conf來添加。

UPCM分析

upcm的源碼可關註我的代碼倉庫

藍牙正常 連接 log

[  633.209000] input: Broadcom Bluetooth HID as /devices/virtual/misc/uhid/input4
[  633.217000] generic-bluetooth 0005:0000:0000.0002: input,hidraw0: BLUETOOTH HID v1.01 Mouse [Broadcom Bluetooth HID] on 
[  641.437000] UPCM : snd_u_capture_open
[  641.440000] UPCM : snd_u_hw_params format 2, rate 16000, channels 1, period_bytes 2048, buffer_bytes 8192
[  641.451000] UPCM: format 0x2, rate 16000, channels 1
[  641.456000] UPCM : snd_u_pcm_prepare
[  641.460000] UPCM : snd_u_substream_capture_trigger, cmd 1
[  641.465000] UPCM: SNDRV_PCM_TRIGGER_START
[  649.407000] UPCM: upcm_char_release
[  651.592000] UPCM : snd_u_substream_capture_trigger, cmd 0
[  651.597000] UPCM: SNDRV_PCM_TRIGGER_STOP
[  651.602000] UPCM : snd_u_hw_free
[  651.605000] UPCM : snd_u_capture_close

audio daemon

技術分享圖片
Parse error on line 2:
... TD;    id1[`socket(PF_NETLINK, SOCK_DG
----------------------^
Expecting ‘SEMI‘, ‘NEWLINE‘, ‘SPACE‘, ‘EOF‘, ‘GRAPH‘, ‘DIR‘, ‘TAGEND‘, ‘TAGSTART‘, ‘UP‘, ‘DOWN‘, ‘subgraph‘, ‘end‘, ‘SQE‘, ‘PE‘, ‘-)‘, ‘DIAMOND_STOP‘, ‘MINUS‘, ‘--‘, ‘ARROW_POINT‘, ‘ARROW_CIRCLE‘, ‘ARROW_CROSS‘, ‘ARROW_OPEN‘, ‘DOTTED_ARROW_POINT‘, ‘DOTTED_ARROW_CIRCLE‘, ‘DOTTED_ARROW_CROSS‘, ‘DOTTED_ARROW_OPEN‘, ‘==‘, ‘THICK_ARROW_POINT‘, ‘THICK_ARROW_CIRCLE‘, ‘THICK_ARROW_CROSS‘, ‘THICK_ARROW_OPEN‘, ‘PIPE‘, ‘STYLE‘, ‘LINKSTYLE‘, ‘CLASSDEF‘, ‘CLASS‘, ‘CLICK‘, ‘DEFAULT‘, ‘NUM‘, ‘PCT‘, ‘COMMA‘, ‘ALPHA‘, ‘COLON‘, ‘BRKT‘, ‘DOT‘, ‘PUNCTUATION‘, ‘UNICODE_TEXT‘, ‘PLUS‘, ‘EQUALS‘, ‘MULT‘, got ‘PS‘

藍牙ble數據轉語音實現Android AudioRecord方法推薦