当前位置: 首页 > news >正文

创建网站需要注意的问题哈尔滨城乡建设网站

创建网站需要注意的问题,哈尔滨城乡建设网站,网站设置不发送消息怎么设置回来,网站app软件下载安装前言 最近在开发一款即时通讯(IM)的聊天App,在实现语音消息功能模块后,写下该文章以做记录。 注:本文不提供相关图片资源以及IM聊天中具体实现代码,单论语音功能实现思路 需求分析 比起上来直接贴代码,我们先来逐步…

前言

最近在开发一款即时通讯(IM)的聊天App,在实现语音消息功能模块后,写下该文章以做记录。

注:本文不提供相关图片资源以及IM聊天中具体实现代码,单论语音功能实现思路

需求分析
效果图

比起上来直接贴代码,我们先来逐步分析一下一个正常语音消息的需求是如何的?

  • 长按语音按钮录制用户语音内容

  • 松开按钮后发送语音消息至目标

从上可得,我们需要针对于用户的语音 录制 & 播放 方面下手!

Flutter_sound

目标地址:https://pub.dev/packages/flutter_sound

简介:Flutter_sound 是一款可以处理用户声音库

通过该插件的GitHub示例中可以了解到实现录制语音和播放的相关API为

  • FlutterSoundPlayer下的startRecorder方法 (录制)

  • FlutterSoundPlayer下的startPlayer方法 (播放)

实现思路

初始化Flutter_Sound配置

定义相关变量

  • FlutterSoundPlayer flutterSoundPlayer = FlutterSoundPlayer(); //声音播放器

  • FlutterSoundRecorder recordSound = FlutterSoundRecorder(); //声音录制器

  • Timer? recordTimer // 计时器,用来控制录音时长;

  • String timeString = “” // 用来做回显时长

  • List voicePlayList =[]; //用来控制语音播放列表

  • String voicePath = “”; //临时储存语音文件路径

初始化声音配置方法

/** @author Marinda* @date 2023/6/26 15:25* @description 初始化声音设置*/initSoundSetting() async{await flutterSoundPlayer.openPlayer();await recordSound.openRecorder();}

录制用户语音

/** @author Marinda* @date 2023/6/26 15:31* @description 录音*/recordSound() async{PermissionStatus status = await Permission.microphone.request();int time = 0;//权限校验if (status != PermissionStatus.granted) throw RecordingPermissionException("麦克风权限未授权!");var dir = await getExternalStorageDirectory();Uuid uuid = Uuid();String filePath = p.join(dir?.path ?? "",uuid.v4()+".mp4");File file = File(filePath);file.openWrite();state.voicePath.value = filePath;Log.i("录音保存的位置:${filePath}");await state.recordSound.startRecorder(//目标文件位置toFile: filePath,//这里可以认为是那种源codec: Codec.aacMP4,//采样率bitRate: 8000,//为1即可numChannels: 1);recordTimer = Timer.periodic(Duration(seconds: 1), (_) {time++;timeString = time.toString();});}

播放实现

/** @author Marinda* @date 2023/10/7 14:28* @description 播放语音信息 目前先做本地语音缓存处理*/playVoice(String voiceUrl) async{Uint8List uint8list = Uint8List(0);//视为网络httpif(voiceUrl.startsWith("http")){uint8list = ...获取MP4文件二进;}else{File voiceFile = File(voiceUrl);//如果不存在if(!voiceFile.existsSync()){BotToast.showText(text: "语音播放失败");return;}uint8list  = await voiceFile.readAsBytes();}//如果存在则进行移除播放if(voicePlayList.contains(tag)){voicePlayList.remove(tag);await flutterSoundPlayer.stopPlayer();return;}//加入语音信息队列voicePlayList.add(tag);await flutterSoundPlayer.startPlayer(fromURI: data.expandAddress,fromDataBuffer: uint8list,codec: Codec.aacMP4,sampleRate: 8000,numChannels: 1,whenFinished: (){//  播放完毕state.voicePlayList.remove(tag);});}

结束录制

/** @author Marinda* @date 2023/6/26 15:33* @description*/stopRecordSound() async{await recordSound.stopRecorder();if(recordTimer!.isActive){recordTimer!.cancel();recordTimer = null;}// 这里实现你的语音消息发送逻辑Log.i("停止录制!");timeString.value = "";voicePath.value = "";}

结束语

难度不大,主要是围绕着录音文件进行处理

值得注意的点是在播放录音文件时
记得获取目标的二进制流一并携带至startPlayer方法fromDataBuffer字段中
否则可能会出现无法播放或程序未响应等危险情况!

感谢你的观看!

http://www.yayakq.cn/news/146805/

相关文章:

  • 企业网站货物查询怎么做网站建设报价单 excel
  • 重庆万州网站建设找谁神马网站快速排名案例
  • 建一个简单的网站多少钱东莞seo外包公司哪家好
  • 网站平台之间的关系wordpress邀请奖励
  • 网站名称怎么收录公司可以网上注册吗
  • 喀什的网站怎么做优化网站用软件好吗
  • 淮南做网站的公司微信软文推广怎么做
  • 陕西网络推广维护seo快速优化报价
  • 转转怎么做钓鱼网站郴州住房和城乡建设部网站
  • 企业门户网站实现永久免费个人网站申请注册
  • 惠城网站建设服务重庆市建筑协会信息网
  • 长沙营销型网站制作费用wordpress淘宝客响应式模板
  • 动漫男的和女的做视频网站wordpress手机端和pc端兼容
  • destoon 网站搬家用asp做网站
  • 网站后台无法访问泾川县建设局网站
  • 网站建设与策划青海省建设厅报名网站
  • 便宜网站建设哪家好万能网址大全
  • 高密做网站哪家好价位深圳定制展会时间表
  • 温州做网站厉害的公司有哪些自己做静态网站的步骤
  • 河北省建设厅网站登陆设置内蒙古住房和城乡建设厅网站 工程建设管理
  • 厦门网站建设哪家不错闽侯做网站
  • 怎样用文本建一个网站石家庄酒店网站建设
  • 企业网站建设的基本步骤软件开发公司企业
  • 成都怎么成立网站深圳网站设计师培训学校
  • 网站导航插件专业做律师网站的公司吗
  • 集团公司网站模板云主机搭建多个网站
  • 徐州网站建设方案书包装设计公司哪个好
  • 太仓网站制作郑州 小程序开发
  • 郑州建设工程交易中心网站买机票便宜网站建设
  • 吉首公司网站找谁做网页上的视频怎么下载