在此我想声明一下,我的文章都是上网查质料和参考大神的博客写的,我只是想把自己做过的一些笔记记录下来。希望大家能理解,不喜勿喷。
原文链接:http://blog.csdn.net/dfgjava/article/details/47102997点击打开链接
进阶版链接:http://www.cnblogs.com/greyhh/p/6898427.html点击打开链接
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RecordText : MonoBehaviour {
private AudioClip audioclip;
private byte[] recordData;
//无损音质的采样率=44100,即每秒音频用44100个float数据表示,但语音8000就够了(通常的移动电话=8000)。
//音频数据太大不利于传输和存储。
public const int SamplingRate = 8000;
//按钮按下开始录音,松开结束
void OnRecording(GameObject goSender, bool flag)
{
if (flag){
//Microphone.End()如果你传递一个无效或者空的字符串设备名称那么默认麦克风将会被使用。你可以从设备属性中获取可用麦克风设备列表。
Microphone.End(null);//可以不需要,但开始录音前调用一次是个好习惯。
//参数分别是麦克风的名字、是否循环录制、录音长度和音质
audioclip = 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);//录音结束,audioclip可以播放了。
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();
}
}
}
文中的保存方法有点问题,搞不懂,所以我找了篇关于保存的文章:http://blog.csdn.net/awnuxcvbn/article/details/50737029
点击打开链接
关于音频的压缩,有很多压缩算法,已不再本文涉及的范围内,会用到的接口: 1、AudioClip.GetData接口可以将audilClip转化为float[] samples。 2、AudioClip.Creat()创建AudioClip,,然后AudioClip.SetData将float[] samples数据设置到clip