VoiceInputIndicator یک کامپوننت Jetpack Compose Glimmer است که فعالیت صدا را به کاربر نمایش میدهد. میتوانید از این کامپوننت برای پذیرش ورودی صدا یا سایر صداها استفاده کنید و بازخورد بصری ارائه دهید تا نشان دهید که برنامه شما در حال ضبط صدا است.
این کامپوننت صرفاً یک عنصر بصری است. به خودی خود صدا را ضبط نمیکند یا دادههای میکروفون را پردازش نمیکند. در عوض، به level صوتی ارائه شده توسط برنامه شما پاسخ میدهد که نمایش بصری از شدت صدا را نشان میدهد. 
درخواست مجوزهای پیشبینیشده
برای ضبط دادههای صوتی جهت هدایت نشانگر، برنامه شما به مجوز Manifest.permission.RECORD_AUDIO نیاز دارد.
هنگام ساخت تجربیات افزوده برای عینکهای نمایشی، مطمئن شوید که درخواست مجوزها را به درستی هم برای دستگاه و هم برای عینک انجام میدهید. ProjectedPermissionsResultContract و ProjectedPermissionsRequestParams برای درخواست مجوز از کاربر استفاده کنید.
برای اطلاعات بیشتر در مورد درخواست مجوزها در محیطهای پیشبینیشده، به درخواست مجوزهای سختافزاری مراجعه کنید.
ضبط و عادیسازی صدا
VoiceInputIndicator برای نمایش بصری شدت صدا به یک Float بین 0.0f و 1.0f نیاز دارد. از آنجایی که این پارامتر صرفاً به عنوان یک جزء بصری عمل میکند و صدا را ضبط نمیکند، برنامه شما باید به طور فعال میکروفون را رصد کرده و میزان صدا را به پارامتر level نشانگر منتقل کند.
اگرچه روشهای متعددی برای ضبط دادههای صوتی وجود دارد، اما یکی از رویکردها استفاده از رابط برنامهنویسی SpeechRecognizer است. هنگام استفاده از SpeechRecognizer ، میتوانید بهروزرسانیهای حجم صدا را به صورت بلادرنگ با استفاده از فراخوانی RecognitionListener.onRmsChanged ضبط کنید، که سطح صدا را بر حسب دسیبل، rmsdB ، ارائه میدهد.
از آنجا که این مقدار خام معمولاً بین ۰ تا ۱۰ قرار میگیرد، شما باید خروجی را به محدوده مورد نیاز 0.0f تا 1.0f نرمالسازی کنید. میتوانید این سطح نرمالسازی شده را در یک متغیر حالت نگه دارید تا شاخص به طور مداوم بهروزرسانی شود.
در اینجا مثالی از استفاده از RecognitionListener برای بهروزرسانی یک متغیر state آورده شده است:
// 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: رنگ میلههای نشانگر. به طور پیشفرض، این از رنگ اصلی تم Glimmer استفاده میکند؛ بهGlimmerTheme.colors.primaryمراجعه کنید. -
modifier:modifierاستاندارد Compose که قرار است روی اندیکاتور اعمال شود.
اجزای مرتبط
اگر رابط کاربری شما نیاز دارد که نشانگر در یک کانتینر پسزمینه قابل مشاهده قرار گیرد، از ContainedVoiceInputIndicator استفاده کنید. این جایگزین تضمین میکند که میلههای نشانگر شفاف هستند و به کانتینر پسزمینه اجازه میدهند از میان آنها دیده شود.