क्यों pulseaudio बीटी डिवाइस के लिए ध्वनि गुणवत्ता कनेक्शन को संभालता है?


11

मैं लिनक्स के लिए नया हूं और ब्लूटूथ स्क्रिप्टिंग के लिए भी नया हूं। अब तक मैंने जो कुछ भी खोजा है वह निम्नलिखित है:

  1. Bluez डिफ़ॉल्ट BT स्टैक है।
  2. BluezTools उपयोगिताओं का एक सेट है जिसका उपयोग आप Bluez के साथ अधिक आसानी से बातचीत करने के लिए कर सकते हैं
  3. DBus वह इंटरफ़ेस है जो Bluez हार्डवेयर से सीधे इंटरैक्ट करते समय कनेक्ट होता है।
  4. पल्सएडियो सिस्टम पर ऑडियो बनाने के लिए जिम्मेदार सबसिस्टम है।

यह समझ में आता है। तो चलिए बताते हैं कि मेरे पास BlueTooth हेडफोन का एक सेट है, जो मैं उम्मीद करता हूं (सभी जोड़ी और भरोसे के बाद), एक कमांड जारी करने में सक्षम होने के लिए जो बीटी हेडफ़ोन पर एक निश्चित प्रोफ़ाइल से सीधे जुड़ सकता है।

मेरे मन में तकनीकी रास्ता कुछ इस तरह होगा:

  1. हेडफोन चालू करें।
  2. एक BluezTools कमांड जारी करें - जैसे कि bt-audio -c
  3. मेरे द्वारा सेवा के बाद से कनेक्ट होने के लिए डिवाइस के लिए प्रतीक्षा करें
  4. PulseAudio को अब एक नया आउटपुट डिवाइस चुनना चाहिए
  5. ऑडियो को नए आउटपुट ऑडियो (बीटी हेडफ़ोन) से बदलने के लिए एक और कमांड जारी करें।
  6. सहज सुनने के अनुभव का आनंद लें।

यह सब तर्कसंगत लगता है, लेकिन वास्तविक कार्यान्वयन ऐसा नहीं है, और मैं WHY की तलाश कर रहा हूं, इसलिए मैं समस्या को बेहतर ढंग से समझ सकता हूं और इसे ठीक करने की कोशिश कर सकता हूं।

वास्तव में ऐसा होता है:

  1. हेडफोन चालू करें।
  2. एक BluezTools कमांड जारी करें - जैसे कि bt-audio -c
  3. मेरे द्वारा सेवा के बाद से कनेक्ट होने के लिए डिवाइस के लिए प्रतीक्षा करें
  4. PulseAudio को अब एक नया आउटपुट डिवाइस चुनना चाहिए
  5. पल्सएडियो कमांड को टेलीफोन की गुणवत्ता से ऑडियो प्रोफाइल को उच्च निष्ठा में बदलने के लिए जारी करें।

मुझे इस पर थोड़ा विस्तार करना चाहिए। ब्लूटूथ हेडसेट 2 गुणवत्ता मोड (टेलीफोन और उच्च निष्ठा) प्रदान करता है। केवल 1 संगीत सुनने के लिए वास्तव में उपयुक्त है।

मुझे उम्मीद है कि बीटी हेडफ़ोन प्रत्येक गुणवत्ता मोड को एक सेवा के रूप में उजागर करता है, क्या यह सही है? यह धारणा गलत हो सकती है, लेकिन मैं कुछ इस तरह की उम्मीद करूंगा

bt-audio -c highFidelityProfile

या

bt-audio -changeProfile highFidelityProfile

इसके बजाय ऐसा लगता है कि Bluez सिर्फ डिवाइस के RAW कनेक्शन को संभालता है, और वहाँ से आपको एक जारी करने की आवश्यकता है: pacmd सेट-कार्ड-प्रोफाइल $ INDEX a2dp

यह सिर्फ मौलिक रूप से गलत लगता है। ऑडियो सबसिस्टम में गुणवत्ता नियंत्रण क्यों होता है, इसलिए पल्स या एल्सा या किसी अन्य साउंड सब सिस्टम के लिए अलग कार्यान्वयन की आवश्यकता होती है?

मुझे किसकी याद आ रही है? Bluez / BluezTools आदि का उपयोग करके एक निश्चित प्रोफ़ाइल से सीधे कनेक्ट करना संभव क्यों नहीं है?

जवाबों:


3

एक ब्लूटूथ कनेक्शन में साधारण वायर्ड हेडफ़ोन या स्पीकर की तुलना में महत्वपूर्ण विलंबता है। क्या अधिक है, कनेक्शन विलंबता अलग-अलग हो सकती है, यह ब्लूटूथ रिसीवर के गुणों पर निर्भर करता है और शायद रेडियो सिग्नल की शक्ति के रूप में उपयोगकर्ता घूमता है।

एक एप्लिकेशन और पल्सएडियो के बीच का इंटरफ़ेस "यहाँ कुछ पीसीएम ऑडियो डेटा के रूप में सरल हो सकता है; इसे खेलें।" लेकिन यह अधिक जटिल भी हो सकता है; ऐसा कुछ "यहाँ कुछ PCM ऑडियो डेटा है; इसे बजाओ और मुझे बताओ कि हर 50 एमएस आपको कितनी दूर मिला है, ताकि मैं आपको आगे बढ़ने के लिए कह सकूं अगर ऐसा लगता है कि आप वीडियो स्ट्रीम के साथ लिप-सिंक से बाहर गिर रहे हैं मैं खेल रहा हूं। ओह, और आपको इसे फिर से शुरू करने की आवश्यकता होगी, क्योंकि डेटा का नमूना दर आपके हार्डवेयर को सीधे समर्थन नहीं करेगा। " बाद के मामले में, पल्सएडियो को एप्लिकेशन को ऑडियो डिवाइस से कुछ फीडबैक देने में सक्षम होना चाहिए ताकि यह निर्धारित किया जा सके कि ऑडियो डेटा वास्तव में किसी भी समय पर कितनी दूर तक खेला गया है।

नतीजतन, यह ब्लूटूथ ऑडियो प्रोसेसिंग में पल्सएडियो को काफी गहराई से शामिल करने के लिए समझ में आता है: अधिक हस्तक्षेप करने वाली परतें हैं, सटीक प्रतिक्रिया बनाए रखने के बिना डेटा के बफ़र किए जाने की अधिक संभावनाएं होती हैं, जिससे लिप-सिंक खो जाता है।

वास्तव में, पल्सएडियो के अस्तित्व में आने से पहले, ब्लूटूथ ऑडियो के लिए ALSA बैकएंड हुआ करता था, लेकिन इसे हटा दिया गया था। मुझे लगता है कि समस्या यह थी कि उस समय ALSA के इंटरफेस मुख्य रूप से पारंपरिक साउंड कार्ड के लिए डिज़ाइन किए गए थे, और ब्लूटूथ के संभावित चर ऑडियो विलंबता से निपटना मुश्किल था।

PulseAudio के इंटरफेस विभिन्न साउंड डिवाइसेस को संभालने के लिए जमीन से डिज़ाइन किए गए थे और यहां तक ​​कि स्ट्रीम के दौरान ऑडियो स्ट्रीम को स्विच करने के दौरान, इसलिए यह मुझे लगता है कि इसमें ऑडियो लेटेंसी बिल्ट-इन की भी काफी उन्नत अवधारणा है।

हां, इसे पल्सएडियो मॉड्यूल के बजाय ब्लूज़ में लागू किया जा सकता था; लेकिन तब, ब्लूज़ को अनुप्रयोगों के लिए एक ऑडियो इंटरफ़ेस पेश करना होगा। और चूँकि PulseAudio एक सिस्टम पर "सभी" ऑडियो को हैंडल करना चाहता है (ताकि आप वर्तमान में स्पीकर से ब्लूटूथ या इसके विपरीत चलने वाले ऑडियो को स्थानांतरित करने में सक्षम हों), इसे PulseAudio के साथ इंटरफ़ेस करना होगा वैसे भी।


2

मुझे लगता है कि मुझे अंततः एक समाधान मिला है (दो लिनक्स मिंट सिस्टम पर परीक्षण किया गया है) हालांकि मुझे नहीं पता कि मुझे इन सटीक चरणों का पालन करने की आवश्यकता क्यों है:

प्रारंभिक चरण:

  1. ब्लूमैन स्थापित करें: sudo apt-get install blueman
  2. ब्लूटूथ फ़ाइल संपादित करें: sudo नैनो /etc/bluaxy/main.conf और अंत में इस पंक्ति को जोड़ें: अक्षम करें = हेडसेट

प्रत्येक रन के लिए:

  1. ब्लूटूथ सेवा पुनरारंभ करें: sudo सेवा ब्लूटूथ पुनरारंभ
  2. सिस्टम ट्रे में ब्लूमैन से डिवाइस खोलें या टर्मिनल में ब्लूमैन-मैनेजर टाइप करें
  3. अपने ब्लूटूथ ऑडियो डिवाइस के लिए खोजें
  4. अपने डिवाइस पर राइट-क्लिक करें और हेडसेट के रूप में कनेक्ट करें
  5. सिस्टम सेटिंग्स से साउंड पर जाएं
  6. एक बार उस पर क्लिक करके अपने डिवाइस का चयन करें
  7. अब फिर से ब्लीमैन-मैनेजर के पास जाएं
  8. अपने ब्लूटूथ डिवाइस पर राइट-क्लिक करें और ऑडियो प्रोफाइल को हाई फिडेलिटी प्लेबैक (A2DP सिंक) पर सेट करें

यदि आप किसी भी चरण को याद करते हैं तो चरण 1 पर जाएं और फिर से प्रयास करें। अगर यह कार्यशील है, तो मुझे बताएं।

संपादित करें : लिनक्स मिंट 19 में, डिफ़ॉल्ट ब्लूटूथ मैनेजर हाई फिडेलिटी प्लेबैक के साथ पूरी तरह से काम करता है, किसी भी कॉन्फ़िगरेशन की आवश्यकता नहीं है !!


0

हालांकि यह आपके कॉन्फ़िगरेशन के अलग-अलग हो सकता है, यहां कुछ अच्छी तरह से जांच की गई कमांड हैं।

आपको डिवाइस को विश्वसनीय के रूप में सेट करने की आवश्यकता है। इसे गुई के माध्यम से किया जा सकता है।

sdptool ब्राउज़ लक्ष्य डिवाइस पर उपलब्ध प्रोटोकॉल और चैनलों के बारे में कई विवरण देगा।

एक ब्लूटूथ ऑडियो a2p ऑडियो सिंक को सेट करना आसान है, जब एक साथ ऑडियो आउटपुट का उपयोग किया जाता है, तो इसे सेटअप करने के लिए, टूल पेपर देखें

sudo apt install bluetooth 
sudo apt install bluez bluez-tools
sudo apt install rfkill rfcomm

डिवाइस शुरू करें, यह वैसे भी hci0 होना चाहिए:

sudo hciconfig hci0 up

दूरस्थ उपकरणों की सूची बनाएं:

sudo rfkill list

ब्लूटूथ नेटवर्क सूची:

hcitool scan

उपलब्ध प्रोटोकॉल ब्राउज़ करें:

sdptool browse 43:23:00:02:23:A7

एक उपकरण कनेक्ट करें:

sudo rfcomm connect hci0 43:23:00:02:23:A7

एक फ़ाइल भेजें:

sudo bt-obex -p 43:23:00:02:23:A7 ~/images/tof.png

एक फ़ाइल प्राप्त करें:

sudo bt-obex -s /

किसी चैनल (यहां चैनल 19) पर डेटा के लिए स्कैन / प्रतीक्षा करें, और होम फ़ोल्डर में डंप नामक फ़ाइल पर डेटा लिखें:

sudo apt install bluez-hcidump

hcidump -i hci0 -O 19 -w ~/dump

वैकल्पिक: जोड़ी बनाने के लिए कभी-कभी उपयोगी:

sudo apt install bluetoothctl

bluetoothctl
power on
connect 43:23:00:02:23:A7
trust 43:23:00:02:23:A7
info 43:23:00:02:23:A7

[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# pair 43:23:00:02:23:A7
[agent]PIN code: ####
[bluetooth]# trust 43:23:00:02:23:A7
[bluetooth]# connect 43:23:00:02:23:A7
[bluetooth]# info 43:23:00:02:23:A7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.