科大讯飞语音评测+录音

1.调用录音设备保存录音

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class MicroPhoneManager : MonoBehaviour
{

    public int DeviceLength;   
   
    private void Awake()
    {
        DontDestroyOnLoad(this);
        au= gameObject.GetComponent<AudioSource>();
        if (au == null)
        {
            au = gameObject.AddComponent<AudioSource>();
        }       
    }

    private int Frequency = 16000; //录音频率
    private int BitRate = 16; //比特率
    private int MicSecond = 180;  //每隔2秒,保存一下录音数据
    public Button bStart;
    public Button bStop;
    public Button bPlay;
    public Text tTip;
    private AudioSource au;
    private string[] devices;
    private bool isHaveMicrophone = false;
    void Start()
    {
        bStart.onClick.AddListener(OnStartClick);
        bStop.onClick.AddListener(OnStopClick);
        bPlay.onClick.AddListener(OnPlayClick);
        devices = Microphone.devices;
        DeviceLength = devices.Length;
        if (devices.Length > 0)

        {

            isHaveMicrophone = true;

            tTip.text = "设备有麦克风:" + devices[0];

        }

        else
        {

            isHaveMicrophone = false;

            tTip.text = "设备没有麦克风";

        }
    }
   
    void OnStartClick()
    {
        tTip.text += "\n开始录音....";
        au.Stop();
        au.loop = false;
        au.mute = true;
        //au.clip = Microphone.Start(devices[0], false, MicSecond, Frequency);
        StartMicrophone();
    }

    void OnStopClick()
    {
        tTip.text += "\n停止录音!";

        if (!Microphone.IsRecording(devices[0]))
            return;
        //Microphone.End(devices[0]);
        StopMicrophone();
        //au.Stop();
        Mp3FromClip("d:/test.mp3", au.clip); //将录音保存为mp3
        //WavFromClip(ClipPath, au.clip); //将录音保存为wav
    }
    string ClipPath
    {
        get
        {
            return Application.streamingAssetsPath + "/test.wav";
        }
    }
    void OnPlayClick()
    {
        if (Microphone.IsRecording(null))
            return;
        if (au.clip == null)
            return;
        au.mute = false;
        au.loop = false;
        au.Play();
        tTip.text += "\n播放录音....";
    }

    public delegate void AudioRecordHandle(AudioClip audioClip);
    public AudioSource audioSource;

    AudioClip micClip;


    bool isMicRecordFinished = true;

    List<float> micDataList = new List<float>();
    float[] micDataTemp;

    string micName;

    public void StartMicrophone()
    {
        if (isHaveMicrophone)
        {
            tTip.text += "\n找不到设备....";
            return;
        }
        StopCoroutine(StartMicrophone(null, PlayAudioRecord));
        StartCoroutine(StartMicrophone(null, PlayAudioRecord));
    }


    IEnumerator StartMicrophone(string microphoneName, AudioRecordHandle audioRecordFinishedEvent)
    {
        Debug.Log("Start Mic");
        micDataList = new List<float>();
        micName = microphoneName;
        micClip = Microphone.Start(micName, true, 2, 16000);
        isMicRecordFinished = false;
        int length = micClip.channels * micClip.samples;
        bool isSaveFirstHalf = true;//将音频从中间分生两段,然后分段保存
        int micPosition;
        while (!isMicRecordFinished)
        {
            if (isSaveFirstHalf)
            {
                yield return new WaitUntil(() => { micPosition = Microphone.GetPosition(micName); return micPosition > length * 6 / 10 && micPosition < length; });//保存前半段
                micDataTemp = new float[length / 2];
                micClip.GetData(micDataTemp, 0);
                micDataList.AddRange(micDataTemp);
                isSaveFirstHalf = !isSaveFirstHalf;
            }
            else
            {
                yield return new WaitUntil(() => { micPosition = Microphone.GetPosition(micName); return micPosition > length / 10 && micPosition < length / 2; });//保存后半段
                micDataTemp = new float[length / 2];
                micClip.GetData(micDataTemp, length / 2);
                micDataList.AddRange(micDataTemp);
                isSaveFirstHalf = !isSaveFirstHalf;
            }

        }
        micPosition = Microphone.GetPosition(micName);
        if (micPosition <= length)//前半段
        {
            micDataTemp = new float[micPosition / 2];
            micClip.GetData(micDataTemp, 0);
        }
        else
        {
            micDataTemp = new float[micPosition - length / 2];
            micClip.GetData(micDataTemp, length / 2);
        }
        micDataList.AddRange(micDataTemp);
        Microphone.End(micName);
        AudioClip newAudioClip = AudioClip.Create("RecordClip", micDataList.Count, 1, 16000, false);
        newAudi
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值