Bonjour tout le monde, je viens ici car je rencontre un problème avec le bluetooth et mon portable (Arc S). En effet j’essayer de developper un soft permettant de faire passer mon laptop pour une oreillette bluetooth afin de pouvoir passer des appels depuis mon laptop. J arrive initier une connexion entre mon latop et mon téléphone, a envoyer des commandes d’appel et a récupérer un flux audio. Cependant ce flux audio est trop rapide, il semblerait que mon téléphone n’envoie pas tout les paquets audio (à travers la connexion SCO, il me semble qu’il manque des paquets). Pour faire ceci j’utilise un script pyhton que voici :
!/usr/bin/python
import bluetooth
from bluetooth import *
from select import *
import os
import sys
import struct
import bluetooth._bluetooth as bt
import binascii
import time
fichier = open("testaudio2.cvsd", "w")
#bluetooth adres of the device
bt_addr = "90:C1:15:01:91:05" #tdr
channel = 10
#socket connection for bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bt_addr, channel))
print "connected"
#send of some command
sock.send('AT+BRSF=0\r')
data = sock.recv(1024)
print "BRSF"
print data
print "*********************"
sock.send('AT+CMER=3,0,0,1\r')
data = sock.recv(1024)
print "CMER"
print data
sock.send('AT+VGS=6\r')
data = sock.recv(1024)
print "VGS"
print data
sock.send('AT+VGM=5\r')
data = sock.recv(1024)
print "VGM"
print data
sock.send('AT+BAC=1\r')
data = sock.recv(1024)
print "BAC"
print data
#send call command
sock.send('ATD660;\r')
data = sock.recv(1024)
print "ATD"
print data
#Connexion SCO
#check voice settings. switch to S16 LE mono 8kHz CVSD if needed
hci_sock=bt.hci_open_dev()
response = bt.hci_send_req(hci_sock, bt.OGF_HOST_CTL,
bt.OCF_READ_VOICE_SETTING, bt.EVT_CMD_COMPLETE, 3, "")
status, voice_setting = struct.unpack("<BH", response)
if voice_setting != 0x60:
new_vs = struct.pack("<H", 0x60)
bt.hci_send_req(hci_sock, bt.OGF_HOST_CTL,
bt.OCF_WRITE_VOICE_SETTING, bt.EVT_CMD_COMPLETE, 1, new_vs)
#determine the maximum packet size
response = bt.hci_send_req(hci_sock, bt.OGF_INFO_PARAM,
bt.OCF_READ_BUFFER_SIZE, bt.EVT_CMD_COMPLETE, 8)
status, acl_mtu, sco_mtu, acl_nbufs, sco_nbufs = \
struct.unpack("<BHBHH", response)
raw_input("Press ENTER to continue")
sock2=BluetoothSocket(SCO)
sock2.connect((bt_addr,))
print sock2
# receive 1 second's worth of audio (data is 16-bit mono 8 kHz audio)
data = ""
while len(data) < 160000:
temp = sock2.recv(48)
data = data + temp
fichier.write(data)
sock2.close()
#send command to terminate call
sock.send('AT+CHUP\r')
data = sock.recv(1024)
print "CHUP"
print data
data = sock.recv(1024)
print "CIEV CHUP"
print data
sock.close()
Ce script fonctionne très bien avec un Iphone, un Galaxy S2, un BlackBerry mais pas avec mon arc S. J’ai tout tenté mais impossible de récupérer un flux audio convenable pour l’instant je stocke l’audio dans un fichier que je lis avec audacity avec un encodage en 16bits et une fréquence de 8000 Hz. Je devrais avoir un sample de 10s (ce que j’obtiens avec les téléphones cités précédemment) or j’ai un sample de 17s ce qui me fait penser que je ne récupère pas tout les paquets et que ma variable dans ma boucle met plus de temps à se remplir. Je ne vois pas ce qui pourrait clocher. SI vous aviez une idée ce serait bienvenue.
Merci beaucoup.