资源简介
接到这个需求后先查看了网友们的教程,但大多数都是设定一个固定录音时长,即使是录音实际长度为几秒钟,但是生成文件的大小却是按照最大录音时长来生成,因此本人整理了一下代码,实现自由录音时长,并分段上传到服务器.
代码片段和文件信息
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());
}
- 上一篇:C#鼠标画多边形和矩形
- 下一篇:C#传智播客.txt
相关资源
- 北大青鸟ACCP8.0S1使用C#开发数据库应用
- c#温度采集上位机程序
- C#6轴机械手控制上位机程序
- 萤石云摄像头自动截图以及FTP上传
- c# wpf实现的上位机
- 上位机通讯测试控件大全
- c#上位机控制电机
- C# 上位机控制雅马哈4轴机械手
- VS开发S7-1200PLC上位机软件(案例源码
- MES系统信息上传
- 周立功CAN通用上位机例程(C#)
- 基于pcan-basic编译的上位机
- winform实时获取网卡网速全部源码,获
- c# udp通信例程(上位控制程序)
- ASP.Net文件上传管理源码
- 智能机柜嵌入式电源上位机软件
- C#实现串口上位机
- 网上搜集的非常好的教学视频,供学
- 三菱plc上载最终程序.gxw
- asp.net 大文件上传(带进度条)
- 网络升级上位机源码(STM32远程升级程
- 数据自动上传
- asp.net网上购物系统源码
- FTP上传 文件
- C# 上下滚动的字幕
- 上位机语音识别控制PLC源码(附西门
- 串口上位机
- C#上位机电表数据采集
- MVC图片上传实例58438
- asp.net 网上商城源码
评论
共有 条评论