音量调节
本文将解释如何:
检测音量大小
调用 enableAudioVolumeEvaluation 启用音量大小提示,开启此功能后,SDK 会在 TRTCCloudListener 中的 onUserVoiceVolume 回调中反馈本地或远端用户的音频音量评估信息,包括音量大小、人声检测、音频频谱等。
private TRTCCloud mCloud;mCloud = TRTCCloud.sharedInstance(getApplicationContext());mCloud.setListener(new TRTCCloudListener() {// 通过 onUserVoiceVolume 回调获得音频音量评估信息 @Override public void onUserVoiceVolume(ArrayList<TRTCCloudDef.TRTCVolumeInfo> userVolumes, int totalVolume) { super.onUserVoiceVolume(userVolumes, totalVolume);// 在这里更新 UI,例如更新音柱的高度 } });// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCCloudDef.TRTCAudioVolumeEvaluateParams audioVolumeEvaluateParams = new TRTCCloudDef.TRTCAudioVolumeEvaluateParams(); audioVolumeEvaluateParams.enablePitchCalculation = false; // 是否开启本地人声频率计算 audioVolumeEvaluateParams.enableSpectrumCalculation = false; // 是否开启声音频谱计算 audioVolumeEvaluateParams.enableVadDetection = false; // 是否开启本地人声检测 audioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示 mNewCloud.enableAudioVolumeEvaluation(true, audioVolumeEvaluateParams);// 关闭音量大小提示 mNewCloud.enableAudioVolumeEvaluation(false, audioVolumeEvaluateParams);
// AppDelegate.h@interface AppDelegate : UIResponder <UIApplicationDelegate, TRTCCloudDelegate> // 添加 TRTCCloudDelegate 接口声明@property (nonatomic, strong) TRTCCloud *trtcCloud; // 声明 trtcCloud 实例// AppDelegate.m_trtcCloud = [TRTCCloud sharedInstance];_trtcCloud.delegate = self;// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCAudioVolumeEvaluateParams *trtcAudioVolumeEvaluateParams = [[TRTCAudioVolumeEvaluateParams alloc] init];trtcAudioVolumeEvaluateParams.enablePitchCalculation = NO; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = NO; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = NO; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示[self.trtcCloud enableAudioVolumeEvaluation:YES withParams:trtcAudioVolumeEvaluateParams];// 实现 TRTCCloudDelegate 回调方法- (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume {// 处理用户音量信息for (TRTCVolumeInfo *volumeInfo in userVolumes) {NSLog(@"User ID: %@, Volume: %ld", volumeInfo.userId, (long)volumeInfo.volume);// 在这里更新 UI,例如更新音柱的高度}}// 关闭音量大小提示[self.trtcCloud enableAudioVolumeEvaluation:NO withParams:trtcAudioVolumeEvaluateParams];
// AppDelegate.h@interface AppDelegate : NSObject <NSApplicationDelegate, TRTCCloudDelegate> // 添加 TRTCCloudDelegate 接口声明@property (nonatomic, strong) TRTCCloud *trtcCloud; // 声明 trtcCloud 实例// AppDelegate.m_trtcCloud = [TRTCCloud sharedInstance];_trtcCloud.delegate = self;// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCAudioVolumeEvaluateParams *trtcAudioVolumeEvaluateParams = [[TRTCAudioVolumeEvaluateParams alloc] init];trtcAudioVolumeEvaluateParams.enablePitchCalculation = NO; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = NO; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = NO; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示[self.trtcCloud enableAudioVolumeEvaluation:YES withParams:trtcAudioVolumeEvaluateParams];// 实现 TRTCCloudDelegate 回调方法- (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume {// 处理用户音量信息for (TRTCVolumeInfo *volumeInfo in userVolumes) {NSLog(@"User ID: %@, Volume: %ld", volumeInfo.userId, (long)volumeInfo.volume);// 在这里更新 UI,例如更新音柱的高度}}// 关闭音量大小提示[self.trtcCloud enableAudioVolumeEvaluation:NO withParams:trtcAudioVolumeEvaluateParams];
// .h 文件public:ITRTCCloud* trtc_cloud_;public:virtual void onUserVoiceVolume(TRTCVolumeInfo* userVolumes, uint32_t userVolumesCount, uint32_t totalVolume) override;// .cpp 文件trtc_cloud_ = getTRTCSharedInstance();trtc_cloud_ -> addCallback(this);TRTCAudioVolumeEvaluateParams trtcAudioVolumeEvaluteParams;trtcAudioVolumeEvaluateParams.enablePitchCalculation = false; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = false; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = false; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示trtc_cloud_ -> enableAudioVolumeEvaluation(true, trtcAudioVolumeEvaluateParams);// 实现 TRTCCloudDelegate 回调方法,将 CLASSNAME 替换为自己的类名void CLASSNAME::onUserVoiceVolume(TRTCVolumeInfo* userVolumes, uint32_t userVolumesCount, uint32_t totalVolume) {// 在这里更新 UI,例如更新音柱的高度}// 关闭音量大小提示trtc_cloud_ -> enableAudioVolumeEvaluation(false, trtcAudioVolumeEvaluateParams);
检测静音后远端用户是否在讲话
private TRTCCloud mCloud;mCloud = TRTCCloud.sharedInstance(getApplicationContext());mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH); // 打开麦克风mCloud.muteLocalAudio(true); // 关闭麦克风// 创建新的 TRTC 实例,用来检测麦克风音量private TRTCCloud mNewCloud;mNewCloud = TRTCCloud.sharedInstance(getApplicationContext());mNewCloud.setListener(new TRTCCloudListener() {// 通过 onUserVoiceVolume 回调获得 mCloud 的音频音量评估信息 @Override public void onUserVoiceVolume(ArrayList<TRTCCloudDef.TRTCVolumeInfo> userVolumes, int totalVolume) { super.onUserVoiceVolume(userVolumes, totalVolume);// 在这里更新 UI,例如更新音柱的高度 } });// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCCloudDef.TRTCAudioVolumeEvaluateParams audioVolumeEvaluateParams = new TRTCCloudDef.TRTCAudioVolumeEvaluateParams(); audioVolumeEvaluateParams.enablePitchCalculation = false; // 是否开启本地人声频率计算 audioVolumeEvaluateParams.enableSpectrumCalculation = false; // 是否开启声音频谱计算 audioVolumeEvaluateParams.enableVadDetection = false; // 是否开启本地人声检测 audioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示 mNewCloud.enableAudioVolumeEvaluation(true, audioVolumeEvaluateParams);
// AppDelegate.h@interface AppDelegate : UIResponder <UIApplicationDelegate, TRTCCloudDelegate> // 添加 TRTCCloudDelegate 接口声明@property (nonatomic, strong) TRTCCloud *trtcCloud; // 声明 trtcCloud 实例@property (nonatomic, strong) TRTCCloud *newTRTCCloud; // 声明 newTRTCCloud 实例// AppDelegate.m_trtcCloud = [TRTCCloud sharedInstance];_trtcCloud.delegate = self;[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech]; // 打开麦克风[self.trtcCloud muteLocalAudio:YES]; // 关闭麦克风// 初始化新的 TRTC 实例_newTRTCCloud = [TRTCCloud sharedInstance];_newTRTCCloud.delegate = self;// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCAudioVolumeEvaluateParams *trtcAudioVolumeEvaluateParams = [[TRTCAudioVolumeEvaluateParams alloc] init];trtcAudioVolumeEvaluateParams.enablePitchCalculation = NO; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = NO; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = NO; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示[self.newTRTCCloud enableAudioVolumeEvaluation:YES withParams:trtcAudioVolumeEvaluateParams];// 实现 TRTCCloudDelegate 回调方法- (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume {// 处理用户音量信息for (TRTCVolumeInfo *volumeInfo in userVolumes) {NSLog(@"User ID: %@, Volume: %ld", volumeInfo.userId, (long)volumeInfo.volume);// 在这里更新 UI,例如更新音柱的高度}}
// AppDelegate.h@interface AppDelegate : NSObject <NSApplicationDelegate, TRTCCloudDelegate> // 添加 TRTCCloudDelegate 接口声明@property (nonatomic, strong) TRTCCloud *trtcCloud; // 声明 trtcCloud 实例@property (nonatomic, strong) TRTCCloud *newTRTCCloud; // 声明 newTRTCCloud 实例// AppDelegate.m_trtcCloud = [TRTCCloud sharedInstance];_trtcCloud.delegate = self;[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech]; // 打开麦克风[self.trtcCloud muteLocalAudio:YES]; // 关闭麦克风// 初始化新的 TRTC 实例_newTRTCCloud = [TRTCCloud sharedInstance];_newTRTCCloud.delegate = self;// 设置 TRTCAudioVolumeEvaluateParams 参数TRTCAudioVolumeEvaluateParams *trtcAudioVolumeEvaluateParams = [[TRTCAudioVolumeEvaluateParams alloc] init];trtcAudioVolumeEvaluateParams.enablePitchCalculation = NO; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = NO; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = NO; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示[self.newTRTCCloud enableAudioVolumeEvaluation:YES withParams:trtcAudioVolumeEvaluateParams];// 实现 TRTCCloudDelegate 回调方法- (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume {// 处理用户音量信息for (TRTCVolumeInfo *volumeInfo in userVolumes) {NSLog(@"User ID: %@, Volume: %ld", volumeInfo.userId, (long)volumeInfo.volume);// 在这里更新 UI,例如更新音柱的高度}}
// .h 文件public:ITRTCCloud* trtc_cloud_;ITRTCCloud* new_trtc_cloud;public:virtual void onUserVoiceVolume(TRTCVolumeInfo* userVolumes, uint32_t userVolumesCount, uint32_t totalVolume) override;// .cpp 文件trtc_cloud_ = getTRTCSharedInstance();trtc_cloud_ -> addCallback(this);trtc_cloud_ -> startLocalAudio(TRTCAudioQualitySpeech); // 打开麦克风trtc_cloud_ -> muteLocalAudio(true); // 关闭麦克风// 创建新的 TRTC 实例,用来检测麦克风音量new_trtc_cloud_ = getTRTCSharedInstance();new_trtc_cloud_ -> addCallback(this);TRTCAudioVolumeEvaluateParams trtcAudioVolumeEvaluteParams;trtcAudioVolumeEvaluateParams.enablePitchCalculation = false; // 是否开启本地人声频率计算trtcAudioVolumeEvaluateParams.enableSpectrumCalculation = false; // 是否开启声音频谱计算trtcAudioVolumeEvaluateParams.enableVadDetection = false; // 是否开启本地人声检测trtcAudioVolumeEvaluateParams.interval = 100; // 设置 onUserVoiceVolume 回调的触发间隔为 100 ms// 开启音量大小提示new_trtc_cloud_ -> enableAudioVolumeEvaluation(true, trtcAudioVolumeEvaluateParams);// 实现 TRTCCloudDelegate 回调方法,将 CLASSNAME 替换为自己的类名void CLASSNAME::onUserVoiceVolume(TRTCVolumeInfo* userVolumes, uint32_t userVolumesCount, uint32_t totalVolume) {// 在这里更新 UI,例如更新音柱的高度}
调节音量大小
本地音频:本地麦克风采集音量大小默认为100,可以调用 setAudioCaptureVolume 设定本地音频的采集音量。
// 将本地麦克风采集音量减小到50mCloud.setAudioCaptureVolume(50);// 将本地麦克风采集音量增大到100mCloud.setAudioCaptureVolume(100);
// 将本地麦克风采集音量减小到50[self.trtcCloud setAudioCaptureVolume:50];// 将本地麦克风采集音量增大到100[self.trtcCloud setAudioCaptureVolume:100];
// 将本地麦克风采集音量减小到50[self.trtcCloud setAudioCaptureVolume:50];// 将本地麦克风采集音量增大到100[self.trtcCloud setAudioCaptureVolume:100];
// 将本地麦克风采集音量减小到50trtc_cloud_ -> setAudioCaptureVolume(50);// 将本地麦克风采集音量增大到100trtc_cloud_ -> setAudioCaptureVolume(100);
远端音频:远端用户音量播放大小默认为100,可以调用 setRemoteAudioVolume 设定某一个远端用户的声音播放音量。
// 将 Tom 的播放音量减小到50mCloud.setRemoteAudioVolume("Tom", 50);// 将 Tom 的播放音量增大到100mCloud.setRemoteAudioVolume("Tom", 100);
// 将 Tom 的播放音量减小到50[self.trtcCloud setRemoteAudioVolume:@"Tom" volume:50];// 将 Tom 的播放音量增大到100[self.trtcCloud setRemoteAudioVolume:@"Tom" volume:100];
// 将 Tom 的播放音量减小到50[self.trtcCloud setRemoteAudioVolume:@"Tom" volume:50];// 将 Tom 的播放音量增大到100[self.trtcCloud setRemoteAudioVolume:@"Tom" volume:100];
// 将 Tom 的播放音量减小到50trtc_cloud_ -> setRemoteAudioVolume("Tom", 50);// 将 Tom 的播放音量增大到100trtc_cloud_ -> setRemoteAudioVolume("Tom", 100);
注意:
volume 的推荐取值大小为0 - 100,如果将 volume 设置成100之后感觉音量还是太小,可以将 volume 最大设置成150,但超过100的 volume 会有爆音的风险,请谨慎操作。
联系我们
如果有任何需要或者反馈,您可以联系:info_rtc@tencent.com。