차량 마이크로 녹음

자동차의 CarAppServiceCarAudioRecord API 를 사용하여 사용자 자동차 마이크에 대한 앱 액세스 권한을 부여할 수 있습니다. 사용자는 자동차 마이크에 액세스할 수 있는 권한을 앱에 부여해야 합니다. 앱에서 사용자 입력을 녹음하고 처리할 수 있습니다.

녹음 권한 선언

오디오를 녹음하기 전에 먼저 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