首页 > 其他分享 >Flutter耳返和双声道功能的实现

Flutter耳返和双声道功能的实现

时间:2022-09-19 17:22:36浏览次数:78  
标签:音频 双声道 开启 耳返 采集 ZEGO Flutter

1 耳返功能简介

ZEGO Express SDK 提供了Flutter耳返和双声道的功能,在视频直播、K歌、音频录制等场景下广泛应用,开发者可根据实际业务场景需要设置,一套代码可实现跨平台音视频耳返功能,节省开发成本。

实时音视频的耳返作用就是在嘈杂的环境下,清楚地听伴奏和自己的声音,来鉴定自己有没有走音。技术实现上要实时录制的音频低延迟播放出去,这个过程对延迟要求很高。

  • 耳返即耳机采集监听,在设备上插入耳机(普通耳机或蓝牙耳机)后,能从本机耳机侧听到本设备麦克风采集的声音。
  • 双声道即两个声音通道,听到声音时可以根据左耳和右耳对声音相位差来判断声源的具体位置。ZEGO Express SDK 默认音频采集单声道,当开发者有高音质需求时,可开启双声道采集功能,通过专门的双声道采集设备可以采集到双声道的音频数据并进行推流。

2 实现耳返和声道功能的前提条件

在进行耳返与声道设置之前,请确保:

3 ZEGO 音视频 SDK使用步骤

3.1 设置直播或K歌场景下的耳返

3.1.1 开启直播耳返

开启预览后或者开始推流后调用 enableHeadphoneMonitor 开启采集监听即耳返,主播方讲话后,会听到自己的声音。

开启耳返后,在连接上耳麦时耳返功能才实际生效。

ZegoExpressEngine.instance.enableHeadphoneMonitor(true);

3.1.2 设置耳返音量

开启预览后或者开始推流后可调用 setHeadphoneMonitorVolume 调整耳返的音量。

其中参数 “volume” 为采集耳返音量大小,取值范围为 0 ~ 200,默认 “60”。

ZegoExpressEngine.instance.setHeadphoneMonitorVolume(100);

3.2 设置声道

setAudioConfigsetAudioCaptureStereoMode 都需要在 startPublishingStreamstartPlayingStreamstartPreviewcreateMediaPlayercreateAudioEffectPlayer 之前调用才有效。

3.2.1 设置音频双声道编码

在推流前调用 setAudioConfig 方法设置音频质量相关配置,其中音频编码声道参数 “channel” 需要设置为双声道编码(默认值为单声道编码),其他参数取默认值即可。

var audioConfig = ZegoAudioConfig.preset(ZegoAudioConfigPreset.HighQualityStereo));
ZegoExpressEngine.instance.setAudioConfig(audioConfig);

3.2.2 设置音频采集双声道模式

调用 setAudioCaptureStereoMode 方法开启音频双声道采集,并根据实际场景设置 “Mode” 参数(默认值为始终不开启双声道),用于实现始终开启双声道采集或仅在推流时开启双声道。

ZegoExpressEngine.instance.setAudioCaptureStereoMode(ZegoAudioCaptureStereoMode.Always);

3.2.3 推流

请参考 快速开始 - 实现流程 的 “3.3 推流”,此时所推流的音频是双声道,拉流端无需做额外的配置,直接拉流即可播放双声道音频。

双声道采集需要推流端使用支持双声道采集的设备作为音频输入源,一般手机的麦克风不支持采集双声道。

4 ZEGO 即构音效解决方案

ZEGO 即构音视频SDK还拥有AI降噪、美声音效的能力,在线K歌场景中可锦上添花,配合超低延时耳返功能,端到端延迟低于 70 ms,达到人体无感官延迟水平,演唱者可享受极致的K歌体验,畅享真正实时的快乐。

标签:音频,双声道,开启,耳返,采集,ZEGO,Flutter
From: https://www.cnblogs.com/zegodeveloper/p/16708106.html

相关文章

  • flutter 效果实现 —— 去除水波纹效果
    修改主题theme:ThemeData(splashColor:Colors.transparent,highlightColor:Colors.transparent,splashFactory:NoSplash.splashFactory,),或者修改单个E......
  • 使用 C# 承载 Flutter Desktop 进行插件开发
    FlutterSharpGoogle官方迟迟没有支持使用C#进行FlutterDesktop的插件开发,本Demo初步跑通,原创不易,如果对您有所帮助,请赐一个✨哈哈,详见https://github.com/Live......
  • 在 Flutter 中自动调整任何小部件的大小
    在Flutter中自动调整任何小部件的大小auto_size_widget.gif您是否遇到过希望用户调整小部件大小但不知道如何执行的场景?好吧,前段时间我也遇到过类似的情况,我决定构建......
  • flutter 效果实现 —— 可拖拽 GridView
    效果:代码:classGridDragViewextendsStatefulWidget{constGridDragView({Key?key}):super(key:key);@overrideState<GridDragView>createState()=>......
  • Flutter 3.+更新记录
    Flutter3.3稳定版出来了,于是决定把之前Flutter工程的代码更新下其中里面有些涉及到组件的弃用在此记录ElevatedButton代替了RaisedButton为带阴影的悬浮按钮BottomN......
  • Flet-基于Flutter的Python跨平台开发框架
    什么是FletFlet是一个框架,允许用你喜欢的语言构建交互式多用户Web,桌面和移动应用程序,而无需拥有前端开发的经验。主要特点在几分钟内从想法到应用程序为您的团队,周末项......
  • 每个 Flutter 开发者都需要知道的小部件
    每个Flutter开发者都需要知道的小部件在我之前的文章中,我谈到了使用dart编程语言进行Flutter的面向对象编程。(这里是给没看过的人的链接:Dart编程语言基础。什么......
  • flutter系列之:构建Widget的上下文环境BuildContext详解
    目录简介BuildContext的本质BuildContext和InheritedWidgetBuildContext的层级关系总结简介我们知道Flutter中有两种Widget,分别是StatelessWidget和StatefulWidget,Statel......
  • Flutter 循环创建输入框 TextField
    需求:根据接口返回的数据生成列表,列表内含有可编辑的字段 先初始化一个 TextEditingController集合Map<Object,TextEditingController>_numberControllers=......
  • flutter系列之:用来管理复杂状态的State详解
    目录简介StatefuWidget和StateState的生命周期总结简介Flutter的基础是widget,根据是否需要跟用户进行交互,widget则可以分为StatelessWidget和StatefulWidget。Stateless......