• 大小: 5KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C#
  • 标签: Unity  麦克风  录音  WAV  

资源简介

这是一个使用C#编写的Unity脚本,可以录制麦克风的语音输入,保存成WAV格式的文件。使用说明:首先要有麦克风接入,调成默认输入设备,然后把脚本放在任意一个物体上,接口可以不用配置,都有默认值,运行时点击G是开始录音,H是播放录音,J是保存文件。

资源截图

代码片段和文件信息

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
public class RecordMic : MonoBehaviour {
public string filePath = null;
public int Recordlength = 30;
// Use this for initialization
void Start () {
if (String.IsNullOrEmpty(filePath))
filePath = Application.dataPath + “/record.wav“;
}

// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.G))
Recording ();
else if (Input.GetKeyDown (KeyCode.H))
PlayRecord ();
else if (Input.GetKeyDown (KeyCode.J))
SaveRecord();
}
[HideInInspector]
public AudioClip clip;
//录音的采样率
const int samplingRate = 44100;

/// 
/// 开始录音
/// 

public void Recording()
{
string[] micDevices = Microphone.devices;
if (micDevices.Length == 0)
{
Debug.Log(“没有找到录音组件“);

return;
}

Debug.Log(“录音时长为“+Recordlength.ToString()+“ 秒“);

Microphone.End(null);//录音前先停掉录音,录音参数为null时采用的是默认的录音驱动
clip = Microphone.Start(null false Recordlength samplingRate);


}

/// 
/// 停止录音
/// 

public void StopRecord()
{


int audioLength;
int lastPos = Microphone.GetPosition(null);
if (Microphone.IsRecording(null))
{
audioLength = lastPos / samplingRate;
}
else
{
audioLength = Recordlength;
}

Microphone.End(null);

if (audioLength < 1.0f)
{
Debug.Log(“录音时长短“);

}
}

/// 
/// 播放录音
/// 

public void PlayRecord()
{
StopRecord();
AudioSource.PlayClipAtPoint(clip Vector3.zero);
}

/// 
/// 保存录音
/// 

public void SaveRecord()
{
StopRecord();
try
{
Save(clip filePath);
Debug.Log(“保存完毕“);

}
catch (Exception ex)
{
Debug.Log(ex.Message + ex.StackTrace);

}
}

public static void Save(AudioClip clip string path)
{
string filePath = Path.GetDirectoryName(path);
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
using (FileStream fileStream = CreateEmpty(path))
{
ConvertAndWrite(fileStream clip);
WriteHeader(fileStream clip);
}

}

private static void ConvertAndWrite(FileStream fileStream AudioClip clip)
{

float[] samples = new float[clip.samples];

clip.GetData(samples 0);


评论

共有 条评论