VoiceInputIndicator یک عنصر Jetpack Compose Glimmer است که
فعالیت صدا را به کاربر نمایش میدهد. میتوانید از این عنصر برای پذیرفتن ورودی گفتاری یا سایر صداها استفاده کنید و بازخورد دیداری ارائه دهید تا نشان دهید برنامهتان درحال ضبط صدا است.
این عنصر صرفاً یک عنصر دیداری است. این دستگاه بهتنهایی صدا را ضبط نمیکند یا دادههای
میکروفون را پردازش نمیکند. درعوض، به صدای level ارائهشده توسط برنامه شما پاسخ میدهد که نمایش دیداری شدت صدا را نشان میدهد.
درخواست اجازههای پیشبینیشده
برای ضبط دادههای صوتی برای هدایت نشانگر، برنامه شما به اجازه
Manifest.permission.RECORD_AUDIO نیاز دارد.
وقتی تجربههای واقعیت افزوده برای عینکهای نمایشگر میسازید، مطمئن شوید که
اجازهها را بهدرستی در دستگاه و عینک درخواست میکنید. از
ProjectedPermissionsResultContract و
ProjectedPermissionsRequestParams برای پیامواره دادن به کاربر استفاده کنید.
برای کسب اطلاعات بیشتر درباره درخواست اجازهها در محیطهای پیشبینیشده، به درخواست اجازههای سختافزار مراجعه کنید.
ضبط و عادیسازی صدا
VoiceInputIndicator به Float بین 0.0f و 1.0f نیاز دارد تا
شدت صدا را بهصورت دیداری منعکس کند. ازآنجاییکه این عنصر صرفاً بهعنوان یک عنصر دیداری عمل میکند و صدا را ضبط نمیکند، برنامه شما باید بهطور فعال میکروفون را پایش کند و میزان صدا را به پارامتر level نشانگر جاریسازی کند.
اگرچه روشهای متعددی برای ضبط دادههای صوتی وجود دارد، یکی از رویکردها استفاده از SpeechRecognizer API است. هنگام استفاده از SpeechRecognizer، میتوانید
بهروزرسانیهای همزمان میزان صدا را بااستفاده از
RecognitionListener.onRmsChanged بازخوانی ضبط کنید، که سطح صدا را
بهصورت دسیبل ارائه میدهد، rmsdB.
ازآنجاییکه این مقدار خام معمولاً بین ۰ و ۱۰ است، باید برونداد را به محدوده 0.0f تا 1.0f موردنیاز بهنجار کنید. میتوانید این سطح نرمالسازیشده را در متغیر حالت نگه دارید تا نشانگر بهطور مداوم بهروز شود.
در اینجا نمونهای از استفاده از RecognitionListener برای بهروزرسانی متغیر حالت آورده شده است:
// Example state variable to hold the normalized level (0.0 to 1.0) // that the VoiceInputIndicator component expects. val audioLevel = MutableStateFlow(0f) // Initialize the Android SpeechRecognizer val speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context) // Listener to capture speech events and audio level changes val listener = object : RecognitionListener { override fun onRmsChanged(rmsdB: Float) { // Normalize raw dB level to a 0.0-1.0 range. // Android SpeechRecognizer's rmsdB typically ranges from 0 to ~10. audioLevel.value = ((rmsdB - 1f) / 9f).coerceIn(0f, 1f) } // ... Implement other required RecognitionListener methods ... override fun onReadyForSpeech(params: Bundle?) {} override fun onBeginningOfSpeech() {} override fun onEndOfSpeech() {} override fun onError(error: Int) {} override fun onResults(results: Bundle?) {} override fun onPartialResults(partialResults: Bundle?) {} override fun onEvent(eventType: Int, params: Bundle?) {} override fun onBufferReceived(buffer: ByteArray?) {} } // Attach the listener to the recognizer speechRecognizer.setRecognitionListener(listener) // Create an intent to specify the recognition model and behavior val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply { putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM) } // Begin listening for audio input speechRecognizer.startListening(intent)
ادغام نشانگر ورودی گفتاری
پساز اینکه جاریسازی صوتی شما بهدرستی نرمالسازی و بهعنوان وضعیت آشکار شد، میتوانید آن را مستقیماً به VoiceInputIndicator منتقل کنید.
@Composable fun VoiceInputExample(modifier: Modifier) { // Collect the flow as Compose State so the UI reacts to changes in real-time. val currentLevel by audioLevel.collectAsState() VoiceInputIndicator( // The VoiceInputIndicator component provides a visual "pulse" or indicator // that changes based on the 'level' lambda, which returns a Float between 0.0 and 1.0. level = { currentLevel }, modifier = modifier ) }
پارامترهای سفارشیسازی
VoiceInputIndicator چند پارامتر برای سفارشیسازی رفتار و ظاهر خود ارائه میدهد:
level: تابعی کهFloatبرمیگرداند و نشاندهنده سطح صدای ورودی است، از0.0برای سکوت تا1.0برای بلندترین صدا.-
indicatorColor: رنگ نوارهای نشانگر. بهطور پیشفرض، این از رنگ اصلی زمینه «درخشش» استفاده میکند؛GlimmerTheme.colors.primaryرا ببینید. modifier: «نوشتن» استانداردmodifierکه باید روی نشانگر اعمال شود.
اجزای مرتبط
اگر واسط کاربر شما نیاز دارد نشانگر در یک زمینه نمایان قرار بگیرد، از ContainedVoiceInputIndicator استفاده کنید. این جایگزین تضمین میکند که
نوارهای نشانگر شفاف باشند و اجازه دهند ظرف پسزمینه
نمایان شود.