VoiceInputIndicator یک مؤلفه Jetpack Compose Glimmer است که
فعالیت صوتی را به کاربر نمایش میدهد. میتوانید از این مؤلفه برای پذیرش ورودی گفتاری یا سایر صداها استفاده کنید و بازخورد دیداری ارائه دهید تا نشان دهید برنامهتان درحال ضبط صدا است.
این مؤلفه صرفاً یک عنصر دیداری است. این ویژگی بهتنهایی صدا ضبط نمیکند یا دادههای میکروفون را پردازش نمیکند. درعوض، به صدای level ارائهشده توسط برنامهتان پاسخ میدهد که نمایش تصویری شدت صدا را نشان میدهد.
درخواست اجازههای پیشبینیشده
برای ضبط دادههای صوتی برای هدایت نشانگر، برنامهتان به اجازه
Manifest.permission.RECORD_AUDIO نیاز دارد.
وقتی تجربههای افزوده برای عینک نمایشگردار میسازید، مطمئن شوید که
اجازهها را بهدرستی در دستگاه و عینک درخواست میکنید. از
ProjectedActivityCompat.requestPermissions برای درخواست از کاربر استفاده کنید.
برای اطلاعات بیشتر درباره درخواست اجازهها در محیطهای فرافکنیشده، درخواست اجازههای سختافزار را ببینید.
ضبط و نرمالسازی صدا
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: رنگ نوارهای نشانگر. بهطور پیشفرض، این از رنگ اصلی زمینه Glimmer استفاده میکند؛GlimmerTheme.colors.primaryرا ببینید. -
modifier: Compose استانداردmodifierکه باید برای نشانگر اعمال شود.
مؤلفههای مرتبط
اگر واسط کاربری شما نیاز دارد که نشانگر در یک ظرف پسزمینه قابلمشاهده قرار گیرد،
از ContainedVoiceInputIndicator استفاده کنید. این جایگزین تضمین میکند که
نوارهای نشانگر شفاف باشند و ظرف پسزمینه از پشت آنها
نمایان باشد.