कार के माइक्रोफ़ोन से रिकॉर्ड करें

गाड़ी के CarAppService और CarAudioRecord एपीआई का इस्तेमाल करके, अपने ऐप्लिकेशन को उपयोगकर्ता की गाड़ी के माइक्रोफ़ोन का ऐक्सेस दिया जा सकता है. उपयोगकर्ताओं को, गाड़ी के माइक्रोफ़ोन का ऐक्सेस देने के लिए, आपके ऐप्लिकेशन को अनुमति देनी होगी. आपका ऐप्लिकेशन, उपयोगकर्ता के इनपुट को रिकॉर्ड और प्रोसेस कर सकता है.

रिकॉर्ड करने की अनुमति के बारे में जानकारी देना

कोई भी ऑडियो रिकॉर्ड करने से पहले, आपको AndroidManifest.xml में रिकॉर्ड करने की अनुमति के बारे में जानकारी देनी होगी. साथ ही, उपयोगकर्ता से अनुमति का अनुरोध करना होगा.

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

आपको रनटाइम के दौरान, रिकॉर्ड करने की अनुमति का अनुरोध करना होगा. गाड़ी में अनुमतियों का अनुरोध करने के तरीके के बारे में ज़्यादा जानने के लिए, अनुमतियों का अनुरोध करना लेख पढ़ें.

ऑडियो रिकॉर्ड करें

उपयोगकर्ता से रिकॉर्ड करने की अनुमति मिलने के बाद, ऑडियो रिकॉर्ड किया जा सकता है और रिकॉर्डिंग को प्रोसेस किया जा सकता है.

val carAudioRecord = CarAudioRecord.create(carContext)
carAudioRecord.startRecording()

val data = ByteArray(CarAudioRecord.AUDIO_CONTENT_BUFFER_SIZE)
while (carAudioRecord.read(data, 0, CarAudioRecord.AUDIO_CONTENT_BUFFER_SIZE) >= 0) {
    // Use data array
    // Potentially call carAudioRecord.stopRecording() if your processing finds end of speech
}
carAudioRecord.stopRecording()

ऑडियो फ़ोकस हासिल करना

गाड़ी के माइक्रोफ़ोन से रिकॉर्ड करते समय, आपको सबसे पहले ऑडियो फ़ोकस हासिल करना होगा. इससे, मीडिया का प्लेबैक रुक जाता है. अगर ऑडियो फ़ोकस खो जाता है, तो रिकॉर्डिंग रोक दें. उदाहरण के लिए, ऑडियो फ़ोकस हासिल करने के लिए:

val carAudioRecord = CarAudioRecord.create(carContext)

// Take audio focus so that user's media is not recorded
val audioAttributes = AudioAttributes.Builder()
    .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
    // Use the most appropriate usage type for your use case
    .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
    .build()

val audioFocusRequest =
    AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
        .setAudioAttributes(audioAttributes)
        .setOnAudioFocusChangeListener { state: Int ->
            if (state == AudioManager.AUDIOFOCUS_LOSS) {
                // Stop recording if audio focus is lost
                carAudioRecord.stopRecording()
            }
        }
        .build()

val audioManager = carContext.getSystemService(AudioManager::class.java)
if (audioManager == null ||
    audioManager.requestAudioFocus(audioFocusRequest)
    != AudioManager.AUDIOFOCUS_REQUEST_GRANTED
) {
    // Don't record if the focus isn't granted
    return
}

carAudioRecord.startRecording()
// Process the audio and abandon the AudioFocusRequest when done