আপনার অ্যাপটিকে ব্যবহারকারীর গাড়ির মাইক্রোফোনে অ্যাক্সেস দেওয়ার জন্য আপনি আপনার গাড়ির CarAppService এবং CarAudioRecord 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()
জাভা
CarAudioRecord carAudioRecord = CarAudioRecord.create(getCarContext());
carAudioRecord.startRecording();
byte[] data = new byte[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()
if (carContext.getSystemService(AudioManager::class.java)
.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
জাভা
CarAudioRecord carAudioRecord = CarAudioRecord.create(getCarContext());
// Take audio focus so that user's media is not recorded
AudioAttributes audioAttributes =
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
// Use the most appropriate usage type for your use case
.setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
.build();
AudioFocusRequest audioFocusRequest =
new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
.setAudioAttributes(audioAttributes)
.setOnAudioFocusChangeListener(state -> {
if (state == AudioManager.AUDIOFOCUS_LOSS) {
// Stop recording if audio focus is lost
carAudioRecord.stopRecording();
}
})
.build();
if (getCarContext().getSystemService(AudioManager.class).requestAudioFocus(audioFocusRequest)
!= AUDIOFOCUS_REQUEST_GRANTED) {
// Don't record if the focus isn't granted
return;
}
carAudioRecord.startRecording();
// Process the audio and abandon the AudioFocusRequest when done