VoiceInputIndicator, kullanıcıya 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 kaydettiğini gösteren görsel geri bildirim sağlamak için kullanabilirsiniz.
Bu bileşen tamamen görsel bir öğedir. Ses kaydetmez veya mikrofon verilerini kendi başına işlemez. Bunun yerine, uygulamanız tarafından sağlanan ve ses yoğunluğunun görsel bir temsilini gösteren sesli level öğesine yanıt verir.
Yansıtılan izinleri isteme
Uygulamanızın, göstergeyi çalıştırmak için ses verilerini yakalaması gerekir. Bunun için Manifest.permission.RECORD_AUDIO izni gereklidir.
Görüntülü gözlükler 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ıdan bilgi istemek için
ProjectedActivityCompat.requestPermissions kullanın.
Yansıtılan ortamlarda izin isteme hakkında daha fazla bilgi için Donanım izinleri isteme başlıklı makaleyi inceleyin.
Sesi 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 kaydetmediği için uygulamanızın mikrofonu aktif olarak izlemesi ve ses seviyesini göstergenin level parametresine aktarması gerekir.
Ses verilerini yakalamanın birden fazla yolu olsa da yaklaşımlardan biri SpeechRecognizer API'sini kullanmaktır. SpeechRecognizer kullanırken, ses seviyesini desibel cinsinden (rmsdB) 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.
Aşağıda, bir durum değişkenini güncellemek için RecognitionListener kullanan bir örnek verilmiştir:
// 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 doğru şekilde normalleştirilip durum olarak gösterildikten sonra doğrudan VoiceInputIndicator'e 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. Sessizlik için0.0, en yüksek ses için1.0değerini döndürür.indicatorColor: Gösterge çubuklarının rengi. Varsayılan olarak, Glimmer temasındaki birincil rengi kullanır.GlimmerTheme.colors.primarybölümüne bakın.modifier: Göstergeye uygulanacak standart Composemodifier.
İlgili bileşenler
Kullanıcı arayüzünüzde göstergenin görünür bir arka plan kapsayıcısının içinde yer alması gerekiyorsa ContainedVoiceInputIndicator kullanın. Bu alternatif, gösterge çubuklarının şeffaf olmasını sağlayarak arka plan kapsayıcısının görünmesine olanak tanır.