@tencent-rtc/mcp 1.6.4 → 1.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/knowledge/chunker.js +83 -54
- package/knowledge/path-meta.js +179 -26
- package/knowledge/search/exact-lookup.js +153 -0
- package/knowledge/search/filter-pool.js +73 -19
- package/knowledge/search/product-scope-intent.js +2 -2
- package/knowledge/search/requires-framework.js +2 -2
- package/knowledge/search/search-knowledge.js +235 -58
- package/package.json +1 -1
- package/resource/index/manifest.json +1 -1
- package/resource/integration/callkit/preset/android/integration.md +2 -4
- package/resource/integration/callkit/preset/flutter/integration.md +4 -5
- package/resource/integration/callkit/preset/ios/integration.md +1 -4
- package/resource/integration/callkit/preset/react/integration.md +13 -20
- package/resource/integration/callkit/preset/vue/integration.md +14 -21
- package/resource/integration/chat/preset/android/integration.md +6 -9
- package/resource/integration/chat/preset/flutter/integration.md +9 -12
- package/resource/integration/chat/preset/ios/integration.md +2 -4
- package/resource/integration/chat/preset/react/integration.md +0 -10
- package/resource/integration/livekit/preset/live/android/live-audience-integration.md +129 -0
- package/resource/integration/livekit/preset/live/android/live-host-integration.md +219 -0
- package/resource/integration/livekit/preset/live/android/live-list-integration.md +261 -0
- package/resource/integration/livekit/preset/live/android/prepare-integration.md +254 -0
- package/resource/integration/livekit/preset/live/ios/live-audience-integration.md +202 -0
- package/resource/integration/livekit/preset/live/ios/live-host-integration.md +369 -0
- package/resource/integration/livekit/preset/live/ios/live-list-integration.md +229 -0
- package/resource/integration/livekit/preset/live/ios/prepare-integration.md +204 -0
- package/resource/integration/livekit/preset/live/vue/live-list-integration.md +0 -3
- package/resource/integration/livekit/preset/live/vue/live-player-desk-integration.md +0 -5
- package/resource/integration/livekit/preset/live/vue/live-player-h5-integration.md +0 -6
- package/resource/integration/livekit/preset/live/vue/live-pusher-integration.md +5 -10
- package/resource/integration/roomkit/preset/vue/integration.md +0 -4
- package/resource/knowledge/callkit/best-practice/web/callengine-invitation.md +80 -0
- package/resource/knowledge/callkit/best-practice/web/callengine-log-control.md +24 -0
- package/resource/knowledge/callkit/best-practice/web/callkit-call-vs-calls.md +116 -0
- package/resource/knowledge/callkit/core-sdk/android/answer-call.md +7 -8
- package/resource/knowledge/callkit/core-sdk/android/make-call.md +5 -7
- package/resource/knowledge/callkit/core-sdk/android/offline-push.md +3 -5
- package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +2 -6
- package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +2 -6
- package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +4 -9
- package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1 -4
- package/resource/knowledge/callkit/core-sdk/ios/make-call.md +8 -11
- package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +17 -23
- package/resource/knowledge/callkit/core-sdk/web/call-engine.md +33 -0
- package/resource/knowledge/callkit/core-sdk/web/call-event.md +327 -0
- package/resource/knowledge/callkit/core-sdk/web/callengine-api-overview.md +33 -0
- package/resource/knowledge/callkit/faq/android.md +0 -2
- package/resource/knowledge/callkit/faq/error-code.md +0 -2
- package/resource/knowledge/callkit/faq/flutter.md +2 -2
- package/resource/knowledge/callkit/faq/ios.md +3 -5
- package/resource/knowledge/callkit/faq/web.md +2 -3
- package/resource/knowledge/callkit/preset/android/api.md +2 -5
- package/resource/knowledge/callkit/preset/ios/api.md +0 -2
- package/resource/knowledge/callkit/preset/react/api.md +445 -0
- package/resource/knowledge/callkit/preset/react/uikit-api-reference.md +445 -0
- package/resource/knowledge/callkit/preset/vue/api.md +465 -0
- package/resource/knowledge/callkit/preset/vue/uikit-api-reference.md +465 -0
- package/resource/knowledge/chat/best-practice/web/image-message-url-handling.md +16 -0
- package/resource/knowledge/chat/preset/android/features/chat-setting.md +1 -1
- package/resource/knowledge/chat/preset/android/features/conversation-list.md +1 -1
- package/resource/knowledge/chat/preset/android/features/language.md +0 -1
- package/resource/knowledge/chat/preset/android/features/message-input.md +1 -1
- package/resource/knowledge/chat/preset/android/features/message-list.md +2 -3
- package/resource/knowledge/chat/preset/android/features/search.md +0 -1
- package/resource/knowledge/chat/preset/android/features/theme.md +1 -1
- package/resource/knowledge/chat/preset/android-view/integration.md +3 -11
- package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +0 -1
- package/resource/knowledge/chat/preset/flutter/features/message-list.md +1 -2
- package/resource/knowledge/chat/preset/flutter/features/search.md +5 -6
- package/resource/knowledge/chat/preset/flutter/features/theme.md +2 -2
- package/resource/knowledge/chat/preset/ios/features/chat-setting.md +1 -1
- package/resource/knowledge/chat/preset/ios/features/conversation-list.md +1 -2
- package/resource/knowledge/chat/preset/ios/features/message-list.md +1 -2
- package/resource/knowledge/chat/preset/ios/features/search.md +0 -1
- package/resource/knowledge/chat/preset/ios-uikit/integration.md +13 -15
- package/resource/knowledge/chat/preset/react/features/conversation-list.md +5 -5
- package/resource/knowledge/chat/preset/react/features/message-input.md +2 -3
- package/resource/knowledge/chat/preset/react/features/search.md +0 -1
- package/resource/knowledge/chat/preset/react/features/theme.md +0 -1
- package/resource/knowledge/livekit/core-sdk/api-reference/android/AudioEffectStore.md +7 -14
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +5 -8
- package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +15 -18
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CameraView.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +15 -20
- package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +10 -13
- package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +4 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LikeStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +8 -10
- package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +5 -7
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/AudioEffectStore.md +7 -14
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +6 -9
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BaseBeautyStore.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +15 -18
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +15 -20
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +10 -13
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +4 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LikeStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveCoreView.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +8 -10
- package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +3 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/AudioEffectStore.md +7 -14
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +5 -8
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +6 -9
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +5 -10
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +3 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +4 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LikeStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +2 -4
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +1 -2
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +4 -6
- package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +3 -5
- package/resource/knowledge/livekit/core-sdk/api-reference/{web → vue}/index.md +24 -24
- package/resource/knowledge/livekit/core-sdk/{voice/android/voice-audio-effect.md → features/android/audio-effect.md} +1 -2
- package/resource/knowledge/livekit/core-sdk/{live/android/live-gift.md → features/android/gift.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/{voice/android/voice-room-list.md → features/android/live-list.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audio-effect.md → features/flutter/audio-effect.md} +0 -2
- package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-barrage.md → features/flutter/barrage.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/{live/flutter/live-gift.md → features/flutter/gift.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/{voice/flutter/voice-room-list.md → features/flutter/live-list.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audience-list.md → features/ios/audience-list.md} +1 -2
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-audio-effect.md → features/ios/audio-effect.md} +1 -3
- package/resource/knowledge/livekit/core-sdk/{live/ios/live-base-beauty.md → features/ios/base-beauty.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-gift.md → features/ios/gift.md} +2 -3
- package/resource/knowledge/livekit/core-sdk/{voice/ios/voice-room-list.md → features/ios/live-list.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/live/android/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -1
- package/resource/knowledge/livekit/core-sdk/live/android/{live-host-interaction.md → host-interaction.md} +5 -7
- package/resource/knowledge/livekit/core-sdk/live/android/{live-integration.md → integration.md} +3 -6
- package/resource/knowledge/livekit/core-sdk/live/flutter/{live-co-guest-interaction.md → co-guest-interaction.md} +1 -1
- package/resource/knowledge/livekit/core-sdk/live/flutter/{live-host-interaction.md → host-interaction.md} +0 -2
- package/resource/knowledge/livekit/core-sdk/live/flutter/{live-integration.md → integration.md} +1 -4
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-co-guest-interaction.md → co-guest-interaction.md} +0 -1
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-host-interaction.md → host-interaction.md} +2 -4
- package/resource/knowledge/livekit/core-sdk/live/ios/{live-integration.md → integration.md} +2 -5
- package/resource/knowledge/livekit/core-sdk/voice/android/{voice-host-interaction.md → host-interaction.md} +3 -5
- package/resource/knowledge/livekit/core-sdk/voice/android/{voice-integration.md → integration.md} +3 -6
- package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-co-guest-interaction.md → co-guest-interaction.md} +1 -2
- package/resource/knowledge/livekit/core-sdk/voice/flutter/{voice-integration.md → integration.md} +6 -9
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-co-guest-interaction.md → co-guest-interaction.md} +2 -2
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-host-interaction.md → host-interaction.md} +4 -6
- package/resource/knowledge/livekit/core-sdk/voice/ios/{voice-integration.md → integration.md} +1 -4
- package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +0 -2
- package/resource/knowledge/push/api-reference/android.md +123 -0
- package/resource/knowledge/push/api-reference/flutter.md +176 -0
- package/resource/knowledge/push/api-reference/harmonyos.md +138 -0
- package/resource/knowledge/push/api-reference/ios.md +176 -0
- package/resource/knowledge/push/api-reference/react-native.md +147 -0
- package/resource/knowledge/push/api-reference/uni-app.md +147 -0
- package/resource/knowledge/push/api-reference/unity.md +119 -0
- package/resource/knowledge/push/api-reference/unreal-engine.md +123 -0
- package/resource/knowledge/push/config/android.md +4 -7
- package/resource/knowledge/push/config/harmonyos.md +0 -3
- package/resource/knowledge/push/config/ios.md +12 -20
- package/resource/knowledge/push/config/react-native.md +18 -26
- package/resource/knowledge/push/config/unity.md +20 -28
- package/resource/knowledge/push/config/unreal-engine.md +21 -29
- package/resource/knowledge/push/integration/android.md +6 -8
- package/resource/knowledge/push/integration/flutter.md +6 -9
- package/resource/knowledge/push/integration/harmonyos.md +1 -0
- package/resource/knowledge/push/integration/ios.md +7 -9
- package/resource/knowledge/push/integration/react-native.md +9 -13
- package/resource/knowledge/push/integration/uni-app.md +7 -7
- package/resource/knowledge/push/integration/unity.md +10 -13
- package/resource/knowledge/push/integration/unreal-engine.md +6 -9
- package/resource/knowledge/push/overview/prepare.md +2 -2
- package/resource/knowledge/roomkit/core-sdk/android/call-user-to-room.md +3 -3
- package/resource/knowledge/roomkit/core-sdk/android/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/android/room-participant-state.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/android/room-state.md +2 -2
- package/resource/knowledge/roomkit/core-sdk/android/schedule-room.md +6 -6
- package/resource/knowledge/roomkit/core-sdk/android/unsupported-features.md +79 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/flutter/room-participant-state.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/flutter/unsupported-features.md +79 -0
- package/resource/knowledge/roomkit/core-sdk/ios/capability-matrix.md +46 -0
- package/resource/knowledge/roomkit/core-sdk/ios/room-participant-state.md +1 -1
- package/resource/knowledge/roomkit/core-sdk/ios/unsupported-features.md +79 -0
- package/resource/knowledge/roomkit/preset/android/integration.md +5 -7
- package/resource/knowledge/roomkit/preset/flutter/integration.md +2 -7
- package/resource/knowledge/roomkit/preset/ios/integration.md +3 -9
- package/resource/knowledge/roomkit/preset/react/integration.md +12 -16
- package/resource/knowledge/trtc/android/TRTCCloud.md +154 -238
- package/resource/knowledge/trtc/android/TRTCCloudDef.md +133 -134
- package/resource/knowledge/trtc/android/TRTCCloudListener.md +86 -120
- package/resource/knowledge/trtc/android/TRTCStatistics.md +10 -10
- package/resource/knowledge/trtc/android/TXAudioEffectManager.md +10 -30
- package/resource/knowledge/trtc/android/TXBeautyManager.md +25 -25
- package/resource/knowledge/trtc/android/TXDeviceManager.md +2 -2
- package/resource/knowledge/trtc/android/TXLiteAVCode.md +12 -12
- package/resource/knowledge/trtc/c++/ITRTCCloud.md +166 -261
- package/resource/knowledge/trtc/c++/ITRTCStatistics.md +12 -12
- package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +10 -30
- package/resource/knowledge/trtc/c++/ITXDeviceManager.md +9 -11
- package/resource/knowledge/trtc/c++/TRTCCloudCallback.md +96 -130
- package/resource/knowledge/trtc/c++/TRTCTypeDef.md +122 -123
- package/resource/knowledge/trtc/c++/TXLiteAVCode.md +12 -12
- package/resource/knowledge/trtc/ios/TRTCCloud.md +168 -255
- package/resource/knowledge/trtc/ios/TRTCCloudDef.md +124 -125
- package/resource/knowledge/trtc/ios/TRTCCloudDelegate.md +89 -124
- package/resource/knowledge/trtc/ios/TRTCStatistics.md +10 -10
- package/resource/knowledge/trtc/ios/TXAudioEffectManager.md +9 -28
- package/resource/knowledge/trtc/ios/TXBeautyManager.md +25 -25
- package/resource/knowledge/trtc/ios/TXDeviceManager.md +9 -11
- package/resource/knowledge/trtc/ios/TXLiteAVCode.md +12 -12
- package/server.js +21 -21
- package/tools/common/finalize_answer.js +1 -1
- package/tools/common/present_framework_choice.js +2 -2
- package/tools/common/search_trtc_knowledge.js +3 -3
- package/tools/common/submit_feedback.js +1 -1
- package/tools/definitions/get_native_live_uikit_integration_def.js +61 -0
- package/tools/definitions/get_native_livekit_core_integration_def.js +3 -3
- package/tools/definitions/present_framework_choice_def.js +2 -2
- package/tools/definitions/search_trtc_knowledge_def.js +5 -5
- package/tools/index.js +2 -0
- package/tools/live/get_native_live_uikit_integration.js +69 -0
- package/tools/live/get_native_livekit_core_integration.js +6 -6
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
- package/resource/knowledge/callkit/preset/web/api.md +0 -83
- package/resource/knowledge/livekit/core-sdk/live/android/live-audio-effect.md +0 -226
- package/resource/knowledge/livekit/core-sdk/live/android/live-live-list.md +0 -438
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-barrage.md +0 -490
- package/resource/knowledge/livekit/core-sdk/live/flutter/live-live-list.md +0 -726
- package/resource/knowledge/livekit/core-sdk/live/ios/live-audience-list.md +0 -264
- package/resource/knowledge/livekit/core-sdk/live/ios/live-audio-effect.md +0 -216
- package/resource/knowledge/livekit/core-sdk/live/ios/live-gift.md +0 -407
- package/resource/knowledge/livekit/core-sdk/live/ios/live-live-list.md +0 -349
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-audience-list.md +0 -269
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-barrage.md +0 -456
- package/resource/knowledge/livekit/core-sdk/voice/android/voice-gift.md +0 -455
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audience-list.md +0 -260
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-audio-effect.md +0 -598
- package/resource/knowledge/livekit/core-sdk/voice/flutter/voice-gift.md +0 -424
- package/resource/knowledge/livekit/core-sdk/voice/ios/voice-barrage.md +0 -408
- /package/resource/knowledge/livekit/core-sdk/{live/android/live-audience-list.md → features/android/audience-list.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/android/live-barrage.md → features/android/barrage.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/android/live-base-beauty.md → features/android/base-beauty.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-audience-list.md → features/flutter/audience-list.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/flutter/live-base-beauty.md → features/flutter/base-beauty.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/{live/ios/live-barrage.md → features/ios/barrage.md} +0 -0
- /package/resource/knowledge/livekit/core-sdk/voice/android/{voice-co-guest-interaction.md → co-guest-interaction.md} +0 -0
|
@@ -1,598 +0,0 @@
|
|
|
1
|
-
This guide shows you how to use the `AudioEffectStore` and `DeviceStore` modules from the `AtomicXCore` framework to quickly add audio effect controls to your live streaming app. With these modules, you can implement features like microphone volume adjustment, in-ear monitoring, and a range of engaging voice changer and reverb effects.
|
|
2
|
-
|
|
3
|
-
## Core Features
|
|
4
|
-
|
|
5
|
-
By integrating `AudioEffectStore` and `DeviceStore`, you can enable the following features in your live streaming app:
|
|
6
|
-
- **Microphone Volume Control**: Adjust the local capture volume to control how loud the host sounds to the audience.
|
|
7
|
-
|
|
8
|
-
- **In-Ear Monitor**: Let hosts or guests hear their own voice in real time through headphones for monitoring and pronunciation correction.
|
|
9
|
-
|
|
10
|
-
- **Voice Changer Effects**: Provide multiple voice changer options, such as Child, Girl, Uncle, and more.
|
|
11
|
-
|
|
12
|
-
- **Reverb Effects**: Simulate various acoustic environments, including KTV, metallic, deep, bright, and others.
|
|
13
|
-
|
|
14
|
-
## Concept Overview
|
|
15
|
-
|
|
16
|
-
|Core Concept|Type|Key Responsibilities & Description|
|
|
17
|
-
|---------|---------|---------|
|
|
18
|
-
|[AudioEffectState](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioEffectState-class.html)|class|Tracks the current state of the audio effects module, typically for UI rendering. Includes voice changer status, reverb status, in-ear monitor enabled status, and in-ear monitor volume. All properties are ValueListenable and support state change subscriptions.|
|
|
19
|
-
|[AudioEffectStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioEffectStore-class.html)|class|Singleton data manager for the audio effects module. Use this to call audio effect APIs. After you call an API, the relevant audioEffectState property updates automatically; subscribe to this reactive state for real-time updates.|
|
|
20
|
-
|[DeviceState](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceState-class.html)|class|Tracks the current state of the device module, typically for UI rendering. Key properties include camera and microphone device status, capture volume, and more. All properties are ValueListenable and support state change subscriptions.|
|
|
21
|
-
|[DeviceStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceStore-class.html)|class|Singleton data manager for the device module. Use this to control camera and microphone APIs. After you call an API, the relevant state property updates automatically; subscribe to this reactive state for real-time updates.|
|
|
22
|
-
|
|
23
|
-
## Implementation Steps
|
|
24
|
-
|
|
25
|
-
### Step 1: Integrate the Component
|
|
26
|
-
- **Live streaming**: Refer to Quick Integration to integrate **AtomicXCore** and complete service access.
|
|
27
|
-
|
|
28
|
-
- **Voice chat room**: Refer to Quick Integration to integrate **AtomicXCore** and complete service access.
|
|
29
|
-
|
|
30
|
-
### Step 2: Obtain a Store Instance
|
|
31
|
-
|
|
32
|
-
Both `AudioEffectStore` and `DeviceStore` are singletons. You can access their instances anywhere in your project using the shared property. For a full implementation example, refer to the [audio_effect_panel_widget.dart](https://github.com/Tencent-RTC/TUIKit_Flutter/blob/main/live/livekit/lib/component/audio_effect/audio_effect_panel_widget.dart) file in the TUILiveKit open-source UI demo project.
|
|
33
|
-
``` java
|
|
34
|
-
import 'package:flutter/material.dart';
|
|
35
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
36
|
-
|
|
37
|
-
class _AudioEffectPanelWidgetState {
|
|
38
|
-
final _audioEffectStore = AudioEffectStore.shared;
|
|
39
|
-
final _deviceStore = DeviceStore.shared;
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Step 3: Implement the In-Ear Monitor
|
|
44
|
-
|
|
45
|
-
In-ear monitor allows users to hear their own microphone input in real time. You can manage this feature using the APIs described below.
|
|
46
|
-
|
|
47
|
-
> **Note:**
|
|
48
|
-
>
|
|
49
|
-
|
|
50
|
-
> The in-ear monitoring feature typically needs to connect to headphones to work properly.
|
|
51
|
-
>
|
|
52
|
-
|
|
53
|
-
1. **Enable/Disable Ear Monitoring**: Use a Switch widget to enable or disable in-ear monitor.
|
|
54
|
-
|
|
55
|
-
2. **Set the Volume of IEMs**: Use a Slider widget to set the volume. Map the slider value to the volume parameter and call `setVoiceEarMonitorVolume(volume)`. The valid range is [0, 150], so map your UI control's value (e.g., slider 0.0 - 1.0) to 0 - 150.
|
|
56
|
-
|
|
57
|
-
3. **Listen for Status Updates to Update UI**: Listen for real-time in-ear monitor state changes to update your UI accordingly.
|
|
58
|
-
|
|
59
|
-
#### Sample Code
|
|
60
|
-
``` java
|
|
61
|
-
import 'package:flutter/material.dart';
|
|
62
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
63
|
-
|
|
64
|
-
/// Ear Monitoring Control Component
|
|
65
|
-
class EarMonitorWidget extends StatelessWidget {
|
|
66
|
-
const EarMonitorWidget({super.key});
|
|
67
|
-
|
|
68
|
-
@override
|
|
69
|
-
Widget build(BuildContext context) {
|
|
70
|
-
final audioEffectStore = AudioEffectStore.shared;
|
|
71
|
-
|
|
72
|
-
return Column(
|
|
73
|
-
crossAxisAlignment: CrossAxisAlignment.start,
|
|
74
|
-
children: [
|
|
75
|
-
// 1. Toggle ear monitoring
|
|
76
|
-
ValueListenableBuilder<bool>(
|
|
77
|
-
valueListenable: audioEffectStore.audioEffectState.isEarMonitorOpened,
|
|
78
|
-
builder: (context, isOpened, child) {
|
|
79
|
-
return SwitchListTile(
|
|
80
|
-
title: const Text('Ear Monitoring'),
|
|
81
|
-
subtitle: const Text('Insert a headset')
|
|
82
|
-
value: isOpened,
|
|
83
|
-
onChanged: (value) {
|
|
84
|
-
audioEffectStore.setVoiceEarMonitorEnable(value);
|
|
85
|
-
},
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
),
|
|
89
|
-
// 2. Adjust ear return volume
|
|
90
|
-
ValueListenableBuilder<int>(
|
|
91
|
-
valueListenable: audioEffectStore.audioEffectState.earMonitorVolume,
|
|
92
|
-
builder: (context, volume, child) {
|
|
93
|
-
return ListTile(
|
|
94
|
-
title: const Text('Ear Monitoring Volume'),
|
|
95
|
-
subtitle: Slider(
|
|
96
|
-
value: volume.toDouble(),
|
|
97
|
-
min: 0,
|
|
98
|
-
max: 150,
|
|
99
|
-
divisions: 150,
|
|
100
|
-
onChanged: (value) {
|
|
101
|
-
audioEffectStore.setVoiceEarMonitorVolume(value.toInt());
|
|
102
|
-
},
|
|
103
|
-
),
|
|
104
|
-
trailing: Text('$volume'),
|
|
105
|
-
);
|
|
106
|
-
},
|
|
107
|
-
),
|
|
108
|
-
],
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
#### SetVoiceEarMonitorEnable API Parameters
|
|
115
|
-
| <strong>Parameter Name</strong> | <strong>Type</strong> | <strong>Description</strong> |
|
|
116
|
-
| --- | --- | --- |
|
|
117
|
-
| <code>enable</code> | <code>bool</code> | Enable in-ear monitor:<br>- <code>true</code>: Enable.<br>- <code>false</code>: Disable. |
|
|
118
|
-
|
|
119
|
-
#### SetVoiceEarMonitorVolume API Parameters
|
|
120
|
-
| <strong>Parameter Name</strong> | <strong>Type</strong> | <strong>Description</strong> |
|
|
121
|
-
| --- | --- | --- |
|
|
122
|
-
| <code>volume</code> | <code>int</code> | Ear return volume.<br>- Value ranges from 0 to 150.<br>- Default value: 100. |
|
|
123
|
-
|
|
124
|
-
### Step 4: Adjust Microphone Volume
|
|
125
|
-
|
|
126
|
-
To control the host's microphone capture volume, call `DeviceStore.setCaptureVolume(volume)` with your desired value.
|
|
127
|
-
1. **Set Capturing Volume**: You can use the `Slider` control to drag the slider left and right to adjust volume, and map the `Slider` value to the volume value before calling `setCaptureVolume(volume)`. Please note, this API accepts a parameter range of `[0, 150]`, so you need to map the UI control value (such as the Slider's `0.0 - 1.0`) to the `0 - 150` range.
|
|
128
|
-
|
|
129
|
-
2. **Subscribe to State Updates**: Listen for real-time capture volume changes to update your UI.
|
|
130
|
-
|
|
131
|
-
#### Sample Code
|
|
132
|
-
``` java
|
|
133
|
-
import 'package:flutter/material.dart';
|
|
134
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
135
|
-
|
|
136
|
-
/// Voice Volume Control Component
|
|
137
|
-
class CaptureVolumeWidget extends StatelessWidget {
|
|
138
|
-
const CaptureVolumeWidget({super.key});
|
|
139
|
-
|
|
140
|
-
@override
|
|
141
|
-
Widget build(BuildContext context) {
|
|
142
|
-
final deviceStore = DeviceStore.shared;
|
|
143
|
-
|
|
144
|
-
return ValueListenableBuilder<int>(
|
|
145
|
-
valueListenable: deviceStore.state.captureVolume,
|
|
146
|
-
builder: (context, volume, child) {
|
|
147
|
-
return ListTile(
|
|
148
|
-
title: const Text('Voice Volume'),
|
|
149
|
-
subtitle: Slider(
|
|
150
|
-
value: volume.toDouble(),
|
|
151
|
-
min: 0,
|
|
152
|
-
max: 150,
|
|
153
|
-
divisions: 150,
|
|
154
|
-
onChanged: (value) {
|
|
155
|
-
deviceStore.setCaptureVolume(value.toInt());
|
|
156
|
-
},
|
|
157
|
-
),
|
|
158
|
-
trailing: Text('$volume'),
|
|
159
|
-
);
|
|
160
|
-
},
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
#### SetCaptureVolume API Parameters
|
|
167
|
-
| <strong>Parameter Name</strong> | <strong>Type</strong> | <strong>Description</strong> |
|
|
168
|
-
| --- | --- | --- |
|
|
169
|
-
| <code>volume</code> | <code>int</code> | Capture volume size.<br>- Value ranges from 0 to 150.<br>- Default value: 100. |
|
|
170
|
-
|
|
171
|
-
### Step 5: Apply Voice Changer Effects
|
|
172
|
-
|
|
173
|
-
To change the host's voice, call `setAudioChangerType(type)` and pass the desired enum value.
|
|
174
|
-
|
|
175
|
-
#### Sample Code
|
|
176
|
-
``` java
|
|
177
|
-
import 'package:flutter/material.dart';
|
|
178
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
179
|
-
|
|
180
|
-
/// Voice changing effect selection component
|
|
181
|
-
class VoiceChangerWidget extends StatelessWidget {
|
|
182
|
-
const VoiceChangerWidget({super.key});
|
|
183
|
-
|
|
184
|
-
@override
|
|
185
|
-
Widget build(BuildContext context) {
|
|
186
|
-
final audioEffectStore = AudioEffectStore.shared;
|
|
187
|
-
|
|
188
|
-
return Column(
|
|
189
|
-
crossAxisAlignment: CrossAxisAlignment.start,
|
|
190
|
-
children: [
|
|
191
|
-
const Padding(
|
|
192
|
-
padding: EdgeInsets.all(16),
|
|
193
|
-
child: Text('Voice-changing effect', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
194
|
-
),
|
|
195
|
-
ValueListenableBuilder<AudioChangerType>(
|
|
196
|
-
valueListenable: audioEffectStore.audioEffectState.audioChangerType,
|
|
197
|
-
builder: (context, changerType, child) {
|
|
198
|
-
return Padding(
|
|
199
|
-
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
200
|
-
child: Wrap(
|
|
201
|
-
spacing: 8,
|
|
202
|
-
runSpacing: 8,
|
|
203
|
-
children: AudioChangerType.values.map((type) {
|
|
204
|
-
return ChoiceChip(
|
|
205
|
-
label: Text(_getChangerTypeName(type)),
|
|
206
|
-
selected: changerType == type,
|
|
207
|
-
onSelected: (selected) {
|
|
208
|
-
if (selected) {
|
|
209
|
-
audioEffectStore.setAudioChangerType(type);
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
);
|
|
213
|
-
}).toList(),
|
|
214
|
-
),
|
|
215
|
-
);
|
|
216
|
-
},
|
|
217
|
-
),
|
|
218
|
-
],
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
String _getChangerTypeName(AudioChangerType type) {
|
|
223
|
-
switch (type) {
|
|
224
|
-
case AudioChangerType.none:
|
|
225
|
-
return 'Disable';
|
|
226
|
-
case AudioChangerType.child:
|
|
227
|
-
return 'mischievous child';
|
|
228
|
-
case AudioChangerType.girl:
|
|
229
|
-
return 'loli';
|
|
230
|
-
case AudioChangerType.uncle:
|
|
231
|
-
return 'uncle';
|
|
232
|
-
case AudioChangerType.ethereal:
|
|
233
|
-
return 'ethereal';
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
#### SetAudioChangerType API Parameters
|
|
240
|
-
|
|
241
|
-
|**Parameter Name**|**Type**|**Description**|
|
|
242
|
-
|---------|---------|---------|
|
|
243
|
-
|`type`|[AudioChangerType](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioChangerType.html)|Voice-changing effects enumeration.|
|
|
244
|
-
|
|
245
|
-
### Step 6: Apply Reverb Effects
|
|
246
|
-
|
|
247
|
-
To add reverb effects to the host's voice, call `setAudioReverbType(type)` and pass the desired enum value.
|
|
248
|
-
|
|
249
|
-
#### Sample Code
|
|
250
|
-
``` java
|
|
251
|
-
import 'package:flutter/material.dart';
|
|
252
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
253
|
-
|
|
254
|
-
/// Reverb effect selection component
|
|
255
|
-
class ReverbWidget extends StatelessWidget {
|
|
256
|
-
const ReverbWidget({super.key});
|
|
257
|
-
|
|
258
|
-
@override
|
|
259
|
-
Widget build(BuildContext context) {
|
|
260
|
-
final audioEffectStore = AudioEffectStore.shared;
|
|
261
|
-
|
|
262
|
-
return Column(
|
|
263
|
-
crossAxisAlignment: CrossAxisAlignment.start,
|
|
264
|
-
children: [
|
|
265
|
-
const Padding(
|
|
266
|
-
padding: EdgeInsets.all(16),
|
|
267
|
-
child: Text('Reverb effect', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
268
|
-
),
|
|
269
|
-
ValueListenableBuilder<AudioReverbType>(
|
|
270
|
-
valueListenable: audioEffectStore.audioEffectState.audioReverbType,
|
|
271
|
-
builder: (context, reverbType, child) {
|
|
272
|
-
return Padding(
|
|
273
|
-
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
274
|
-
child: Wrap(
|
|
275
|
-
spacing: 8,
|
|
276
|
-
runSpacing: 8,
|
|
277
|
-
children: AudioReverbType.values.map((type) {
|
|
278
|
-
return ChoiceChip(
|
|
279
|
-
label: Text(_getReverbTypeName(type)),
|
|
280
|
-
selected: reverbType == type,
|
|
281
|
-
onSelected: (selected) {
|
|
282
|
-
if (selected) {
|
|
283
|
-
audioEffectStore.setAudioReverbType(type);
|
|
284
|
-
}
|
|
285
|
-
},
|
|
286
|
-
);
|
|
287
|
-
}).toList(),
|
|
288
|
-
),
|
|
289
|
-
);
|
|
290
|
-
},
|
|
291
|
-
),
|
|
292
|
-
],
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
String _getReverbTypeName(AudioReverbType type) {
|
|
297
|
-
switch (type) {
|
|
298
|
-
case AudioReverbType.none:
|
|
299
|
-
return 'Disable';
|
|
300
|
-
case AudioReverbType.ktv:
|
|
301
|
-
return 'KTV';
|
|
302
|
-
case AudioReverbType.room:
|
|
303
|
-
return 'Small room';
|
|
304
|
-
case AudioReverbType.hall:
|
|
305
|
-
return 'Great hall';
|
|
306
|
-
case AudioReverbType.deep:
|
|
307
|
-
return 'deep';
|
|
308
|
-
case AudioReverbType.loud:
|
|
309
|
-
return 'resonant';
|
|
310
|
-
case AudioReverbType.metallic:
|
|
311
|
-
return 'metallic sound';
|
|
312
|
-
case AudioReverbType.magnetic:
|
|
313
|
-
return 'magnetic';
|
|
314
|
-
case AudioReverbType.recordingStudio:
|
|
315
|
-
return 'studio';
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
#### SetAudioReverbType API Parameters
|
|
322
|
-
|
|
323
|
-
|**Parameter Name**|**Type**|**Description**|
|
|
324
|
-
|---------|---------|---------|
|
|
325
|
-
|`type`|[AudioReverbType](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioReverbType.html)|Reverb effects enumeration.|
|
|
326
|
-
|
|
327
|
-
### Step 7: Reset Sound Effect Settings
|
|
328
|
-
|
|
329
|
-
> **Important:**
|
|
330
|
-
>
|
|
331
|
-
|
|
332
|
-
> AudioEffectStore and DeviceStore are singletons, so audio effects and device settings take effect globally. If you do not want the settings of the current live streaming room to affect other live streaming rooms created later, you need to reset the audio effects and device settings when the current live streaming room ends.
|
|
333
|
-
>
|
|
334
|
-
|
|
335
|
-
You may need to reset sound effect settings in the following two scenarios:
|
|
336
|
-
1. **When the current live streaming room ends**, call the `store`'s `reset()` method to reset sound effects.
|
|
337
|
-
|
|
338
|
-
2. **When you need to reset all devices and sound effect settings**, call the `store`'s `reset()` method to reset sound effects.
|
|
339
|
-
|
|
340
|
-
``` java
|
|
341
|
-
import 'package:flutter/material.dart';
|
|
342
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
343
|
-
|
|
344
|
-
/// Sound effect reset component
|
|
345
|
-
class AudioEffectResetWidget extends StatelessWidget {
|
|
346
|
-
const AudioEffectResetWidget({super.key});
|
|
347
|
-
|
|
348
|
-
void _resetAudioEffect() {
|
|
349
|
-
AudioEffectStore.shared.reset();
|
|
350
|
-
DeviceStore.shared.reset();
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
@override
|
|
354
|
-
Widget build(BuildContext context) {
|
|
355
|
-
return ElevatedButton(
|
|
356
|
-
onPressed: _resetAudioEffect,
|
|
357
|
-
child: const Text('Reset sound effect settings'),
|
|
358
|
-
);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
## Complete Sample Code
|
|
364
|
-
``` java
|
|
365
|
-
import 'package:flutter/material.dart';
|
|
366
|
-
import 'package:atomic_x_core/atomicxcore.dart';
|
|
367
|
-
|
|
368
|
-
/// Sound effect settings page
|
|
369
|
-
class AudioEffectPage extends StatelessWidget {
|
|
370
|
-
const AudioEffectPage({super.key});
|
|
371
|
-
|
|
372
|
-
@override
|
|
373
|
-
Widget build(BuildContext context) {
|
|
374
|
-
final audioEffectStore = AudioEffectStore.shared;
|
|
375
|
-
final deviceStore = DeviceStore.shared;
|
|
376
|
-
|
|
377
|
-
return Scaffold(
|
|
378
|
-
appBar: AppBar(title: const Text('Sound effect settings')),
|
|
379
|
-
body: ListView(
|
|
380
|
-
children: [
|
|
381
|
-
// Voice volume
|
|
382
|
-
const Padding(
|
|
383
|
-
padding: EdgeInsets.all(16),
|
|
384
|
-
child: Text('Voice volume', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
385
|
-
),
|
|
386
|
-
ValueListenableBuilder<int>(
|
|
387
|
-
valueListenable: deviceStore.state.captureVolume,
|
|
388
|
-
builder: (context, volume, child) {
|
|
389
|
-
return ListTile(
|
|
390
|
-
title: const Text('Capture Volume'),
|
|
391
|
-
subtitle: Slider(
|
|
392
|
-
value: volume.toDouble(),
|
|
393
|
-
min: 0,
|
|
394
|
-
max: 150,
|
|
395
|
-
divisions: 150,
|
|
396
|
-
onChanged: (value) {
|
|
397
|
-
deviceStore.setCaptureVolume(value.toInt());
|
|
398
|
-
},
|
|
399
|
-
),
|
|
400
|
-
trailing: Text('$volume'),
|
|
401
|
-
);
|
|
402
|
-
},
|
|
403
|
-
),
|
|
404
|
-
const Divider(),
|
|
405
|
-
|
|
406
|
-
// Ear return settings
|
|
407
|
-
const Padding(
|
|
408
|
-
padding: EdgeInsets.all(16),
|
|
409
|
-
child: Text('Ear monitoring', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
410
|
-
),
|
|
411
|
-
ValueListenableBuilder<bool>(
|
|
412
|
-
valueListenable: audioEffectStore.audioEffectState.isEarMonitorOpened,
|
|
413
|
-
builder: (context, isOpened, child) {
|
|
414
|
-
return SwitchListTile(
|
|
415
|
-
title: const Text('Enable Ear Monitoring'),
|
|
416
|
-
subtitle: const Text('Insert a headset')
|
|
417
|
-
value: isOpened,
|
|
418
|
-
onChanged: (value) {
|
|
419
|
-
audioEffectStore.setVoiceEarMonitorEnable(value);
|
|
420
|
-
},
|
|
421
|
-
);
|
|
422
|
-
},
|
|
423
|
-
),
|
|
424
|
-
ValueListenableBuilder<int>(
|
|
425
|
-
valueListenable: audioEffectStore.audioEffectState.earMonitorVolume,
|
|
426
|
-
builder: (context, volume, child) {
|
|
427
|
-
return ListTile(
|
|
428
|
-
title: const Text('Ear Monitoring Volume'),
|
|
429
|
-
subtitle: Slider(
|
|
430
|
-
value: volume.toDouble(),
|
|
431
|
-
min: 0,
|
|
432
|
-
max: 150,
|
|
433
|
-
divisions: 150,
|
|
434
|
-
onChanged: (value) {
|
|
435
|
-
audioEffectStore.setVoiceEarMonitorVolume(value.toInt());
|
|
436
|
-
},
|
|
437
|
-
),
|
|
438
|
-
trailing: Text('$volume'),
|
|
439
|
-
);
|
|
440
|
-
},
|
|
441
|
-
),
|
|
442
|
-
const Divider(),
|
|
443
|
-
|
|
444
|
-
// Voice changing settings
|
|
445
|
-
const Padding(
|
|
446
|
-
padding: EdgeInsets.all(16),
|
|
447
|
-
child: Text('Voice-changing', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
448
|
-
),
|
|
449
|
-
ValueListenableBuilder<AudioChangerType>(
|
|
450
|
-
valueListenable: audioEffectStore.audioEffectState.audioChangerType,
|
|
451
|
-
builder: (context, changerType, child) {
|
|
452
|
-
return Padding(
|
|
453
|
-
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
454
|
-
child: Wrap(
|
|
455
|
-
spacing: 8,
|
|
456
|
-
runSpacing: 8,
|
|
457
|
-
children: AudioChangerType.values.map((type) {
|
|
458
|
-
return ChoiceChip(
|
|
459
|
-
label: Text(_getChangerTypeName(type)),
|
|
460
|
-
selected: changerType == type,
|
|
461
|
-
onSelected: (selected) {
|
|
462
|
-
if (selected) {
|
|
463
|
-
audioEffectStore.setAudioChangerType(type);
|
|
464
|
-
}
|
|
465
|
-
},
|
|
466
|
-
);
|
|
467
|
-
}).toList(),
|
|
468
|
-
),
|
|
469
|
-
);
|
|
470
|
-
},
|
|
471
|
-
),
|
|
472
|
-
const SizedBox(height: 16),
|
|
473
|
-
const Divider(),
|
|
474
|
-
|
|
475
|
-
// Reverb settings
|
|
476
|
-
const Padding(
|
|
477
|
-
padding: EdgeInsets.all(16),
|
|
478
|
-
child: Text('Reverb', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
|
479
|
-
),
|
|
480
|
-
ValueListenableBuilder<AudioReverbType>(
|
|
481
|
-
valueListenable: audioEffectStore.audioEffectState.audioReverbType,
|
|
482
|
-
builder: (context, reverbType, child) {
|
|
483
|
-
return Padding(
|
|
484
|
-
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
485
|
-
child: Wrap(
|
|
486
|
-
spacing: 8,
|
|
487
|
-
runSpacing: 8,
|
|
488
|
-
children: AudioReverbType.values.map((type) {
|
|
489
|
-
return ChoiceChip(
|
|
490
|
-
label: Text(_getReverbTypeName(type)),
|
|
491
|
-
selected: reverbType == type,
|
|
492
|
-
onSelected: (selected) {
|
|
493
|
-
if (selected) {
|
|
494
|
-
audioEffectStore.setAudioReverbType(type);
|
|
495
|
-
}
|
|
496
|
-
},
|
|
497
|
-
);
|
|
498
|
-
}).toList(),
|
|
499
|
-
),
|
|
500
|
-
);
|
|
501
|
-
},
|
|
502
|
-
),
|
|
503
|
-
const SizedBox(height: 24),
|
|
504
|
-
|
|
505
|
-
// reset button
|
|
506
|
-
Padding(
|
|
507
|
-
padding: const EdgeInsets.all(16),
|
|
508
|
-
child: ElevatedButton(
|
|
509
|
-
onPressed: () {
|
|
510
|
-
audioEffectStore.reset();
|
|
511
|
-
deviceStore.reset();
|
|
512
|
-
},
|
|
513
|
-
child: const Text('Reset sound effect settings'),
|
|
514
|
-
),
|
|
515
|
-
),
|
|
516
|
-
],
|
|
517
|
-
),
|
|
518
|
-
);
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
String _getChangerTypeName(AudioChangerType type) {
|
|
522
|
-
switch (type) {
|
|
523
|
-
case AudioChangerType.none:
|
|
524
|
-
return 'Disable';
|
|
525
|
-
case AudioChangerType.child:
|
|
526
|
-
return 'mischievous child';
|
|
527
|
-
case AudioChangerType.girl:
|
|
528
|
-
return 'loli';
|
|
529
|
-
case AudioChangerType.uncle:
|
|
530
|
-
return 'uncle';
|
|
531
|
-
case AudioChangerType.ethereal:
|
|
532
|
-
return 'ethereal';
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
String _getReverbTypeName(AudioReverbType type) {
|
|
537
|
-
switch (type) {
|
|
538
|
-
case AudioReverbType.none:
|
|
539
|
-
return 'Disable';
|
|
540
|
-
case AudioReverbType.ktv:
|
|
541
|
-
return 'KTV';
|
|
542
|
-
case AudioReverbType.room:
|
|
543
|
-
return 'Small room';
|
|
544
|
-
case AudioReverbType.hall:
|
|
545
|
-
return 'Great hall';
|
|
546
|
-
case AudioReverbType.deep:
|
|
547
|
-
return 'deep';
|
|
548
|
-
case AudioReverbType.loud:
|
|
549
|
-
return 'resonant';
|
|
550
|
-
case AudioReverbType.metallic:
|
|
551
|
-
return 'metallic sound';
|
|
552
|
-
case AudioReverbType.magnetic:
|
|
553
|
-
return 'magnetic';
|
|
554
|
-
case AudioReverbType.recordingStudio:
|
|
555
|
-
return 'studio';
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
```
|
|
560
|
-
|
|
561
|
-
## API documentation
|
|
562
|
-
|
|
563
|
-
For detailed information about all public interfaces and attributes of [AudioEffectStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioEffectStore-class.html), [DeviceStore](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceStore-class.html) and its related classes, see the official API documentation of the [AtomicXCore](https://tencent-rtc.github.io/TUIKit_Flutter/index.html) framework.
|
|
564
|
-
|
|
565
|
-
|**Store/Component**|**Feature Description**|**API Reference**|
|
|
566
|
-
|---------|---------|---------|
|
|
567
|
-
|**AudioEffectStore**|Audio effect management: Perform audio effect settings and obtain real-time audio effect status.|[API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_audio_effect_store/AudioEffectStore-class.html)|
|
|
568
|
-
|**DeviceStore**|Device management: perform camera and microphone operations and obtain real-time device status.|[API documentation](https://tencent-rtc.github.io/TUIKit_Flutter/api_device_device_store/DeviceStore-class.html)|
|
|
569
|
-
|
|
570
|
-
## FAQs
|
|
571
|
-
|
|
572
|
-
### Are there any restrictions on when to call audio effect and device APIs?
|
|
573
|
-
|
|
574
|
-
No, there are no restrictions. Settings in `AudioEffectStore` and `DeviceStore` are global. You can call related APIs (such as setting voice changer, reverb, or in-ear monitor) at any time before or after joining a live room. Changes take effect immediately and persist.
|
|
575
|
-
|
|
576
|
-
### What is the difference between "Microphone Volume" and "In-Ear Monitor Volume"?
|
|
577
|
-
|
|
578
|
-
This is a common source of confusion. The differences are:
|
|
579
|
-
- Microphone Volume (Capture Volume): Set via `DeviceStore.shared.setCaptureVolume()`. Controls how loud the host sounds to the audience.
|
|
580
|
-
|
|
581
|
-
- In-Ear Monitor Volume (Ear Monitor Volume): Set via `AudioEffectStore.shared.setVoiceEarMonitorVolume()`. Controls only how loud the host hears themselves in their headphones and does not affect the audience.
|
|
582
|
-
|
|
583
|
-
### Why does a newly created live room already have audio effects, or the volume is unexpectedly high or low?
|
|
584
|
-
|
|
585
|
-
Because `AudioEffectStore` and `DeviceStore` are singletons, audio effect and device settings are global. This usually happens if you previously set audio effects and didn't reset them. Be sure to call reset() when appropriate.
|
|
586
|
-
|
|
587
|
-
### Why can't I hear myself after enabling "In-Ear Monitor"?
|
|
588
|
-
|
|
589
|
-
Check the following:
|
|
590
|
-
1. Are headphones connected? In-ear monitor usually requires headphones. Make sure wired or Bluetooth headphones are connected.
|
|
591
|
-
|
|
592
|
-
2. Is the volume set to 0? Verify that "In-Ear Monitor Volume" is not set to 0.
|
|
593
|
-
|
|
594
|
-
3. Is the microphone enabled? Ensure that the microphone in DeviceStore is enabled (i.e., openLocalMicrophone() has been called).
|
|
595
|
-
|
|
596
|
-
### Can I use voice changer and reverb effects at the same time?
|
|
597
|
-
|
|
598
|
-
Yes. `AudioChangerType` and `AudioReverbType` can be used together. For example, you can apply both `AudioChangerType.girl` and `AudioReverbType.ktv` simultaneously.
|