माइक्रोफ़ोन इनपुट

ऑडियो कैप्चर करते समय, ऑडियो एचएएल को एक openInputStream कॉल मिलता है. इसमें एक AudioSource आर्ग्युमेंट शामिल होता है, ताकि यह पता चल सके कि माइक्रोफ़ोन इनपुट को कैसे प्रोसेस किया जाना चाहिए.

VOICE_RECOGNITION सोर्स को एक स्टीरियो माइक्रोफ़ोन स्ट्रीम की ज़रूरत होती है. इसमें गूंज कम करने की सुविधा (अगर उपलब्ध हो) होनी चाहिए. हालांकि, इस पर कोई अन्य प्रोसेसिंग लागू नहीं होनी चाहिए.

मल्टी-चैनल माइक्रोफ़ोन इनपुट

अगर आपको दो से ज़्यादा चैनलों (स्टीरियो) वाले डिवाइस से ऑडियो कैप्चर करना है, तो पोज़िशनल इंडेक्स मास्क (जैसे, CHANNEL_IN_LEFT) के बजाय चैनल इंडेक्स मास्क का इस्तेमाल करें. उदाहरण के लिए:

final AudioFormat audioFormat = new AudioFormat.Builder()
    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
    .setSampleRate(44100)
    .setChannelIndexMask(0xf /* 4 channels, 0..3 */)
    .build();
final AudioRecord audioRecord = new AudioRecord.Builder()
    .setAudioFormat(audioFormat)
    .build();
audioRecord.setPreferredDevice(someAudioDeviceInfo);

setChannelMask और setChannelIndexMask, दोनों सेट होने पर AudioRecord सिर्फ़ setChannelMask से सेट की गई वैल्यू का इस्तेमाल करता है. इसमें ज़्यादा से ज़्यादा दो चैनल शामिल होते हैं.

एक साथ कैप्चर करना

Android 10 से, Android फ़्रेमवर्क इनपुट को एक साथ कैप्चर करने की सुविधा देता है. हालांकि, उपयोगकर्ता की निजता की सुरक्षा के लिए कुछ पाबंदियां लागू होती हैं. इन पाबंदियों के तहत, AUDIO_SOURCE_FM_TUNER जैसे वर्चुअल सोर्स को अनदेखा किया जाता है. साथ ही, इन्हें माइक्रोफ़ोन जैसे रेगुलर इनपुट के साथ एक साथ कैप्चर करने की अनुमति दी जाती है. HwAudioSource को एक साथ कई वीडियो कैप्चर करने से जुड़ी पाबंदियों का हिस्सा नहीं माना जाता.

AUDIO_DEVICE_IN_BUS डिवाइसों या सेकंडरी AUDIO_DEVICE_IN_FM_TUNER डिवाइसों के साथ काम करने के लिए डिज़ाइन किए गए ऐप्लिकेशन को, उन डिवाइसों की पहचान करने के लिए साफ़ तौर पर जानकारी देनी होगी. साथ ही, Android के डिफ़ॉल्ट सोर्स चुनने के लॉजिक को बायपास करने के लिए, AudioRecord.setPreferredDevice() का इस्तेमाल करना होगा.