VoiceInputIndicator, kullanıcılara ses etkinliğini gösteren bir Jetpack Compose Glimmer bileşenidir. Bu bileşeni, ses girişini veya diğer sesleri kabul etmek ve uygulamanızın ses yakaladığını göstermek için görsel geri bildirim sağlamak üzere kullanabilirsiniz.
Bu bileşen tamamen görsel bir öğedir. Ses kaydetmez veya mikrofon verilerini tek başına işlemez. Bunun yerine, uygulamanızın sağladığı bir sese level yanıt verir. Bu ses, ses yoğunluğunun görsel bir temsilini gösterir.
Tahmini izinleri isteme
Göstergeyi yönlendirmek için ses verilerini yakalamak üzere uygulamanızın Manifest.permission.RECORD_AUDIO iznine ihtiyacı vardır.
Görüntüleme gözlükleri için artırılmış gerçeklik deneyimleri oluştururken hem cihazda hem de gözlükte izinleri doğru şekilde istediğinizden emin olun. Kullanıcıya istem göndermek için ProjectedPermissionsResultContract ve ProjectedPermissionsRequestParams özelliğini kullanın.
Yansıtılan ortamlarda izin isteme hakkında daha fazla bilgi için Donanım izinleri isteme başlıklı makaleyi inceleyin.
Ses yakalama ve normalleştirme
VoiceInputIndicator, ses harcanan efor düzeyini görsel olarak yansıtmak için 0.0f ile 1.0f arasında bir Float gerektirir. Tamamen görsel bir bileşen olarak çalıştığı ve ses yakalamadığı için uygulamanız mikrofonu etkin bir şekilde izlemeli ve ses seviyesini göstergenin level parametresine aktarmalıdır.
Ses verilerini yakalamanın birden fazla yolu olsa da bir yaklaşım SpeechRecognizer API'sini kullanmaktır. SpeechRecognizer kullanırken rmsdB ile desibel cinsinden ses seviyesini sağlayan RecognitionListener.onRmsChanged geri çağırma işlevini kullanarak gerçek zamanlı ses seviyesi güncellemelerini yakalayabilirsiniz.
Bu ham değer genellikle 0 ile 10 arasında olduğundan çıkışı gerekli 0.0f ile 1.0f aralığına normalleştirmeniz gerekir. Göstergeyi sürekli olarak güncellemek için bu normalleştirilmiş seviyeyi bir durum değişkeninde tutabilirsiniz.
Bir durum değişkenini güncellemek için RecognitionListener kullanan bir örneği aşağıda bulabilirsiniz:
// 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)
Ses girişi göstergesini entegre etme
Ses akışınız düzgün şekilde normalleştirilip durum olarak kullanıma sunulduktan sonra doğrudan VoiceInputIndicator'ye iletebilirsiniz.
@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 ) }
Özelleştirme parametreleri
VoiceInputIndicator, davranışını ve görünümünü özelleştirmek için birkaç parametre sağlar:
level: Ses girişinin seviyesini temsil eden birFloatdöndüren işlev. Bu işlev, sessizlik için0.0ile en yüksek ses için1.0arasında bir değer döndürür.indicatorColor: Gösterge çubuklarının rengi. Bu özellik varsayılan olarak Glimmer temasındaki birincil rengi kullanır.GlimmerTheme.colors.primarybölümüne bakın.modifier: Göstergeye uygulanacak standart Oluşturmamodifier.
İlgili bileşenler
Kullanıcı arayüzünüzde göstergenin görünür bir arka plan kapsayıcısında yer alması gerekiyorsa ContainedVoiceInputIndicator kullanın. Bu alternatif, gösterge çubuklarının şeffaf olmasını sağlar ve arka plan kapsayıcısının görünmesine olanak tanır.