Unity3d录音

由于我们Unity3D是跨平台工作的,所以尽量用Unity3d的api,查了下Unity3的documetation,只有个Microphone可以用。

static AudioClip Start(string deviceName, bool loop, int lengthSec, int frequency);

开始录音,第一个参数是麦克风的名字,当有多个麦克风(通过devices接口可获得麦克风名字列表)的时候可以用指定的麦克风进行录音,一般使用默认的麦克风(参数null)就行;
第二个参数是否循环录制;
第三个参数为录音长度,单位为秒;
第四个参数为音频的音质,即采样率,一般的无损音质是44100,即每秒用44100个float来表示1秒的音频内容,但是我们的语音8000就够了,不然录制出来的音频特别大,不利传输。
其他接口直接上代码,我尽量在注释中写清楚。

[csharp]

  • private AudioClip clip;
  • private byte[] recordData;
  • //通常的无损音质的采样率是44100,即每秒音频用44100个float数据表示,但是语音只需8000(通常移动电话是8000)就够了
  • //不然音频数据太大,不利于传输和存储
  • public const int SamplingRate = 8000;
  • //按钮按下开始录音,弹起结束录音
  • void OnRecording(GameObject goSender, bool flag){
  •     if(flag){//按钮按下开始录音
  •         Microphone.End(null);//这句可以不需要,但是在开始录音以前调用一次是好习惯
  •         clip = Microphone.Start(null,false,10,SamplingRate);
  •     }else{//按钮弹起结束录音
  •         int audioLength;//录音的长度,单位为秒,ui上可能需要显示
  •         int lastPos = Microphone.GetPosition(null);
  •         if(Microphone.IsRecording(null)){//录音小于10秒
  •             audioLength = lastPos/SamplingRate;//录音时长
  •         }else{
  •             audioLength = 10;
  •         }
  •         Microphone.End(null);//此时录音结束,clip已可以播放了
  •         if(audioLength<1.0f)return;//录音小于1秒就不处理了
  •         //如果要便于传输还需要进行压缩,压缩后的recordData就可以用于网络传输了
  •         recordData = AudioClipCompressor.CompressAudioClip(clip);
  •         //本地可以用sqlit存储,
  •         int soundId = string.Format("{0}{1}",player.ID, System.DateTime.Now.ToString());
  •         DbSound dbs = new DbSound();
  •         dbs.InsertSound(soundId , audioLength, recordData);
  •         dbs.CloseSqlConnection();
  •     }
  • }

关于音频的压缩,有很多压缩算法,已不再本文涉及的范围内,会用到的接口:
1、AudioClip.GetData接口可以将audilClip转化为float[] samples。
2、AudioClip.Creat()创建AudioClip,,然后AudioClip.SetData将float[] samples数据设置到clip

转载于:https://www.cnblogs.com/feiyanstudio/articles/7326635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值