其他操作就不在一一赘述了,直说一下添加的负责录音的那段代码
1、首先利用Microphone类开始录制和结束录制音频
2、利用AudioSource类播放录制的音频
3、然后用自己写的方法Float2Byte将录制的音频转成byte数据,供讯飞语音识别方法调用
详细代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class SoundRecording : MonoBehaviour {
public static Text t;
GameObject obj;
//中文:zh_cn 英文:en_us
private string audio_path = null;
private const string app_id = "appid = 5ac9f8d1";
private const string session_begin_params = "sub = iat, domain = iat, language = zh_cn, accent = mandarin, sample_rate = 16000, result_type = plain, result_encoding = utf-8";
public AudioSource audio;//存储录制的音频
private int frequency = 16000;//采样率
void Start()
{
obj= GameObject.FindGameObjectWithTag("Text");
t = obj.GetComponent<Text>();
}
//开始录音、播放音频
public void StartRecorde() {
audio.Stop();//停止上一个音频的播放
audio.clip = Microphone.Start(null, false, 5, frequency);//开始录制音频,3秒
// Microphone.GetPosition(null);//得到当前所处的录音样本的位置
while (Microphone.GetPosition(null) <= 0) { Debug.Log("null"); }//防止音频播放出错
}
//停止录音、停止播放音频
public void StopRecorde() {
if (Microphone.IsRecording(null)) { Microphone.End(null); }//如果麦克没有在录制音频
Debug.Log("开始播放音频");
audio.Play();
// audio.Stop();//停止播放音频
Debug.Log("停止录音");
byte[] AudioData= Float2Byte();
//调用语音识别函数
Debug.Log("开始语音识别");
Inter_Audio_word.init_audio(app_id, session_begin_params,AudioData);
}
//将clip中的float音频数据存储到byte数组中
public byte[] Float2Byte() {
if (audio.clip == null) {
Debug.Log("clip is null!");
return null;
}
float[] samples = new float[audio.clip.samples];
audio.clip.GetData(samples, 0);
short[] intData = new short[samples.Length];
//converting in 2 float[] steps to Int16[], //then Int16[] to Byte[]
byte[] bytesData = new byte[samples.Length * 2];
//bytesData array is twice the size of
//dataSource array because a float converted in Int16 is 2 bytes.
int rescaleFactor = 32767; //to convert float to Int16
for (int i = 0; i < samples.Length; i++)
{
intData[i] = (short)(samples[i] * rescaleFactor);
byte[] byteArr = new byte[2];
byteArr = BitConverter.GetBytes(intData[i]);
byteArr.CopyTo(bytesData, i * 2);
}
return bytesData;
}
}
案列demo:https://download.youkuaiyun.com/download/hyy_sui_yuan/10739157