2013-04-02 8 views
5

यह स्टैक ओवरफ्लो पर मेरी पहली पोस्ट है। मैं पिछले कुछ दिनों से एंड्रॉइड स्मार्टफ़ोन पर ऑडियो रूट करने का प्रयास करता हूं लेकिन मुझे यह ठीक से करने के लिए फ़ंक्शन नहीं मिल रहा है।एंड्रॉइड - स्मार्टफोन और ब्लूटूथ मॉड्यूल के बीच ऑडियो रूट करने के लिए फ़ंक्शन

यह ब्लूटूथ बेबीफोन बनाने के लिए है।

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

मैं परियोजना के ऑडियो पक्ष के लिए ए 2 डीडी और एचएफपी (हैंडफ्री) प्रोफाइल के साथ संवाद करता हूं।

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

मुझे आशा है कि मेरे स्मार्टफोन पर ऑडियो का उपयोग करने के लिए और साथ ही मेरे ब्लूटूथ मॉड्यूल पर ऑडियो का समाधान मिलेगा।

मैंने ऑडियो को रूट करने के लिए एक समारोह के लिए http://developer.android.com/index.html पर खोज की।

ऑडियो मैनेजर क्लास में सेट रूटिंग या सेट पैरामीटर जैसे ऑडियो रूट करने के लिए कुछ फ़ंक्शन हैं लेकिन मेरे पास अभी तक कोई परिणाम नहीं है। http://developer.android.com/reference/android/media/AudioManager.html

आप कोड मैं babyphone पक्ष (ब्लूटूथ मॉड्यूल की ओर) से ऑडियो प्राप्त करने के लिए उपयोग करने के नीचे देख सकते हैं: मैं स्मार्टफोन वक्ता के लिए नहीं मार्ग ऑडियो और उपयोग कर सकते हैं में "शंघाई सहयोग संगठन" कनेक्शन

boolean isRecording=true; 
int buffersize = 8000; 
byte[] buffer = new byte[buffersize]; 

//audio configuration and SCO Bluetooth connection. 
AudioManager aManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
android.os.Process.setThreadPriority(
      android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 
aManager.startBluetoothSco(); 
aManager.setBluetoothScoOn(true); 
aManager.setMode(AudioManager.MODE_IN_COMMUNICATION); 

//AudioRecord configuation for recording audio from babyphone. 
AudioRecord arec = new AudioRecord(
      MediaRecorder.AudioSource.VOICE_COMMUNICATION, 
      8000, 
      AudioFormat.CHANNEL_IN_MONO, 
      AudioFormat.ENCODING_PCM_16BIT, 
      buffersize); 

//AudioTrack configuation for sending audio to smartphone speaker.     
AudioTrack atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
       8000, 
       AudioFormat.CHANNEL_OUT_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, 
       buffersize, 
       AudioTrack.MODE_STREAM); 

atrack.setPlaybackRate(8000); 

//start audio recording and playing. 
arec.startRecording(); 
atrack.play(); 

while(isRecording) { 
    arec.read(buffer, 0, buffersize); 

    atrack.write(buffer, 0, buffer.length); 
} 

arec.stop(); 
atrack.stop() 

बेबीफोन पक्ष पर माइक्रोफ़ोन से ऑडियो वापस लेने के लिए, मुझे अपनी परियोजना की दिशा बदलने के लिए जितनी जल्दी हो सके इसे जानने की आवश्यकता है।

स्मार्टफोन पक्ष पर बेबीफ़ोन प्रोग्राम को यदि संभव हो तो सभी हालिया स्मार्टफ़ोन पर चलने की आवश्यकता है।

अंग्रेजी मेरी पहली भाषा नहीं है इसलिए कुछ वाक्य सही नहीं हो सकते हैं।

मैं किसी भी समाधान के लिए खुला हूं।

+0

कोई भाग्य? मैं अपने ब्लूटूथ हेडसेट के माइक्रोफोन को पीए सिस्टम के रूप में उपयोग करने की कोशिश कर रहा हूं, दूसरे शब्दों में प्लेबैक जैक (आउटपुट) पर होना चाहिए, (मुझे लगता है कि एक और ब्लूटूथ डिवाइस पर अनुमान लगाना असंभव होगा)। ऐसा लगता है कि यह संभव नहीं है – Diego

उत्तर

1

ए 2 डीडी मीडिया प्लेबैक के लिए है, और एक तरफा है। एससीओ का उपयोग वॉयस कॉल/वीओआईपी/बीटी पर रिकॉर्डिंग के लिए किया जाता है और यह दो-तरफा है लेकिन कम गुणवत्ता पर है।

क्या होगा (सबसे पर/सभी उपकरणों मैं के साथ काम किया कम से कम) जब आप BluetoothSco सक्षम और IN_CALL के मोड सेट या IN_COMMUNICATION कि STREAM_VOICE_CALL BT_SCO आउटपुट डिवाइस पर ले जाया जाएगा है, और इनपुट डिवाइस होगा आउटपुट डिवाइस (मोड की वजह से) के आधार पर चुना जाए जिसका अर्थ है BT_SCO इनपुट डिवाइस।

मेरा सुझाव - हालांकि मैं गारंटी नहीं दे सकता कि यह हर डिवाइस पर काम करेगा - IN_COMMUNICATION पर मोड सेट करें। setBluetoothScoOn(true) कॉल आंतरिक रूप से BT_SCO को रिकॉर्ड करने के लिए "बल उपयोग" सेटिंग सेट करेगा, और DEFAULT या VOICE_RECOGNITION का उपयोग करने के साथ संयोजन को ऑडियोसोर्स को रिकॉर्डिंग डिवाइस के रूप में BT_SCO mic का चयन करना चाहिए।
हालांकि, एक ही समय में BT_SCO और आंतरिक माइक्रोफ़ोन से रिकॉर्डिंग संभवतः एक पोर्टेबल तरीके से असंभव साबित होगी।
आउटपुट के लिए आप RING, ALARM या MUSIC स्ट्रीम प्रकारों का उपयोग कर सकते हैं, जिन्हें ध्वनि कॉल में नहीं होने पर BT_SCO के बजाय आंतरिक लाउडस्पीकर पर भेजा जाना चाहिए।

+0

@ user2235813 शायद ऑडियोसोर्स.कैमकॉर्डर आंतरिक माइक्रो का उपयोग करने वाले दूसरे रिकॉर्डर को खोलने के लिए चाल कर सकता है। – Schlangi

संबंधित मुद्दे