• 大小: 11KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: C#
  • 标签: unity录音  

资源简介

接到这个需求后先查看了网友们的教程,但大多数都是设定一个固定录音时长,即使是录音实际长度为几秒钟,但是生成文件的大小却是按照最大录音时长来生成,因此本人整理了一下代码,实现自由录音时长,并分段上传到服务器.

资源截图

代码片段和文件信息

using BestHTTP;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using UnityEngine;

public class MicroPhoneManager : MonoBehaviour
{

    private int DeviceLength;
    /// 
    /// 录音频率(音质)
    /// 

    private int Frequency = 8000;
    /// 
    /// 最长录音时长(半小时)
    /// 

    private int MaxSecond = 1800;
    /// 
    /// 实际录音时长
    /// 

    private int realTime = 0;
    /// 
    /// 文件夹路径
    /// 

    private string filePath;
    private string currentName;
//开始时间
    private string starttime;
//结束时间
    private string endtime;
//需要绑定在一个AudioSource
    AudioSource _curAudioSource;
    public Action Finished;
    AudioSource CurAudioSource
    {
        get
        {
            if (_curAudioSource == null)
            {
                _curAudioSource = gameobject.AddComponent();
            }
            return _curAudioSource;
        }
    }

    #region [public Way]
    public static MicroPhoneManager instance;
    private void Awake()
    {
        if (instance == null)
            instance = this;
//此处是保存的路径根据项目需求设定
        filePath = Application.streamingAssetsPath+“/Audio“;
        if (Directory.Exists(filePath) == false)//如果不存在就创建file文件夹
        {
            Directory.CreateDirectory(filePath);
        }
    }
    /// 
    /// 获取麦克风设备
    /// 

    private void GetMicrophoneDevice()
    {
        string[] mDevice = Microphone.devices;
        DeviceLength = mDevice.Length;
        if (DeviceLength == 0)
            ShowInfoLog(“找不到麦克风设备!“);
    }
    private void OnDestroy()
    {
        Directory.Delete(filePath true);
        instance = null;
    }

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

    public void StartRecordAudio()
    {
        ShowInfoLog(“开始录音........“);
        CurAudioSource.Stop();
        CurAudioSource.loop = false;
        CurAudioSource.mute = true;
        CurAudioSource.clip = Microphone.Start(null true MaxSecond Frequency);
        while (!(Microphone.GetPosition(null) > 0))
        {

        }
        CurAudioSource.Play();
        starttime = GetCurrentTime();
        realTime = 0;
        //开始计时半小时后生成一次录音文件
        if (IsInvoking(“startTime“))
            CancelInvoke(“startTime“);
        InvokeRepeating(“startTime“ 1 1);
    }

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

    public void StopRecordAudio()
    {
        ShowInfoLog(“停止录音........“);
        if (!Microphone.IsRecording(null))
            return;
        Microphone.End(null);
        CurAudioSource.Stop();
        if (IsInvoking(“startTime“))
            CancelInvoke(“startTime“);
        ShowInfoLog(realTime + “s“);
        endtime = GetCurrentTime();
        StartCoroutine(SendData());
    }
 

评论

共有 条评论