2010-10-26 15 views
13

का उपयोग करके ध्वनि रिकॉर्ड कैसे करें मैं कुछ बुनियादी मेटाडेटा और टैगिंग के साथ वॉयस मेमो को संग्रहीत करने और प्रबंधित करने के लिए एंड्रॉइड ऐप लिख रहा हूं। ध्वनि रिकॉर्ड करते समय मैं उपयोग करता हूं:ब्लूटूथ हेडसेट

recorder = new MediaRecorder();   
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(currentRecordingFileName); 
// and so on 

यह सामान्य फैशन में फ़ोन का उपयोग करते समय अच्छी तरह से काम करता है। हालांकि, यह ब्लूटूथ हेडसेट की उपस्थिति का पता नहीं लगाता है और हेडसेट प्लग इन होने पर भी फोन के अपने माइक्रोफ़ोन का उपयोग करता है।

मैंने MediaRecorder.AudioSource.DEFAULT का उपयोग करने का भी प्रयास किया, उम्मीद है कि यह स्वचालित रूप से सही स्रोत का चयन करेगा, लेकिन फिर बिल्कुल कोई आवाज दर्ज नहीं की गई थी।

मैं कैसे पता लगा सकता हूं कि ब्लूटूथ हेडसेट प्लग इन है और/या बी) ब्लूटूथ हेडसेट का उपयोग मीडिया रिकॉर्डर के लिए ऑडियो स्रोत के रूप में करें?

उत्तर

0

आप detect connected bluetooth devices कर सकते हैं इस तरह:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
// If there are paired devices 
if (pairedDevices.size() > 0) { 
    // Loop through paired devices 
    for (BluetoothDevice device : pairedDevices) { 
     // Add the name and address to an array adapter to show in a ListView 
     mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
    } 
} 

हालांकि, मुझे यकीन है कि आप कैसे यह नहीं हेडसेट से रिकॉर्ड और नियमित रूप से एमआईसी

1

प्रलेखन के अनुसार बनाने के आप एक शुरू करने की आवश्यकता नहीं कर रहा हूँ AudioManager.startBluetoothSco() के साथ एससीओ ऑडियो कनेक्शन, और फिर ऐसा लगता है कि आपको MediaRecorder.AudioSource.VOICE_CALL का उपयोग करने की आवश्यकता है।

जहाँ तक मैं देख सकता हूं, आप किसी विशेष डिवाइस और ऐसे का चयन नहीं कर सकते हैं। यह सिस्टम स्तर पर किया जाता है, यानी उपयोगकर्ता के फोन के साथ हेडसेट जोड़े जाने के बाद।

संपादित करें:

स्टीफन द्वारा उल्लेख किया है, AudioSource एमआईसी की जरूरत है।

VOICE_CALL काम नहीं कर रहा है।

6

olivierg मूल रूप से सही है (AudioSource अभी भी एमआईसी हो सकता है), कुछ बुनियादी कोड इस तरह दिखेगा:

am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

    registerReceiver(new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); 
      Log.d(TAG, "Audio SCO state: " + state); 

      if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) { 
       /* 
       * Now the connection has been established to the bluetooth device. 
       * Record audio or whatever (on another thread).With AudioRecord you can record with an object created like this: 
       * new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
       * AudioFormat.ENCODING_PCM_16BIT, audioBufferSize); 
       * 
       * After finishing, don't forget to unregister this receiver and 
       * to stop the bluetooth connection with am.stopBluetoothSco(); 
       */ 
       unregisterReceiver(this); 
      } 

     } 
    }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)); 

    Log.d(TAG, "starting bluetooth"); 
    am.startBluetoothSco(); 

यह मैं इस पर अपने आप को बस फिर ठोकर खाई, मैं slott की टिप्पणी के महत्व को इंगित करना चाहते हैं सही अनुमतियाँ शामिल करने के लिए, सबसे महत्वपूर्ण बात अपने मैनिफ़ेस्ट फ़ाइल में

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

स्थापित करने के लिए। इसके बिना आपको कोई त्रुटि संदेश नहीं मिलेगा लेकिन राज्य बस कनेक्ट होने में नहीं बदलेगा। <का उपयोग करता है-अनुमति एंड्रॉयड: नाम = "android.permission.RECORD_AUDIO" /> <का उपयोग करता है-अनुमति एंड्रॉयड: नाम = "android.permission.MODIFY_AUDIO_SETTINGS" />

+1

न अनुमतियों को सेट करने में भूल अनुमति एंड्रॉइड: नाम = "android.permission.BROADCAST_STICKY" /> – slott

+0

@ स्टीफन, मैंने आपकी विधि की कोशिश की और यह ब्लूटूथ हैंड्सफ्री स्पीकर के साथ ठीक काम किया। लेकिन जब मैंने एक कार में एक ही कोड की कोशिश की तो यह काम नहीं किया, कोई विचार अगर कार में इस्तेमाल प्रोटोकॉल हैंड्सफ्री स्पीकर से अलग है? – Harish

+0

@ स्टीफन: मैंने हैंडसेट ब्लूटूथ के साथ अपना कोड आजमाया लेकिन यह केवल मेरे एमआईसी से फोन में रिकॉर्ड किया गया। यह हैंडसेट स्पीकर के एमआईसी में काम नहीं करता है। मैं एचएस 3000 स्पीकर और आकाशगंगा एस 2 का उपयोग कर रहा हूं। यह मेरा कोड है। कृपया मुझे समस्या की मदद करें https://github.com/mjohn123/HeadsetRecorder – user8264

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