资源简介
接到这个需求后先查看了网友们的教程,但大多数都是设定一个固定录音时长,即使是录音实际长度为几秒钟,但是生成文件的大小却是按照最大录音时长来生成,因此本人整理了一下代码,实现自由录音时长,并分段上传到服务器.
代码片段和文件信息
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
相关资源
- C# 内存处理器、网络上行与下行实时
- MPU6050 实时图表上位机 C#
- c#下的http请求通用类(自动实现保留
- 10万条天猫交易数据
- 史上最全的传智播客Net基础班和就业
- asp.net网上购物系统的源码
- 蓝牙版智能车上位机程序源代码C#.N
- winform上的mvvm框架
- ASP.NET动态网站开发教程第三版源代码
- C#上位机通讯控件(含PLC控件).rar
- 上位机通过TCP和库卡kuka机器人通讯
- C#通过winform和http上传文件
- oracle大作业--网上订餐系统基于oracl
- C# 与上位机松下plc通信的列子。
- 西门子PLC S7-300 400 1200 1500 TCP C#通讯组
- 西门子PLC S7-300与上位机以太网TCP通讯
- 上期所行情接口CTP的封装
- TrustPayClient_ASP.NET_V3.1.6.zip
- C#WinForm做FTP上传获取文件列表齐全
- winform实现FTP上传、、删除文件
- C# winform 上传文件夹到指定FTP
- 使用C#编程语言编写PLC上位机软件-m
- 通过SSH向Linux传文件,支持大数据文件
- 网上书店系统(asp.net + sql server)
- C#Webservice+微信小程序上传多个文件
- ASP.NET Web API 接收文件上传
- c#上位机串口通讯控制stm32步进电机
- c# usb-hid通信上位机
- C# WPF 操作sqlserver数据库 上传 文件
- 在域名马上释放的时候抢注域名用
评论
共有 条评论