using Cysharp.Threading.Tasks;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
public class VoiceInputs : MonoBehaviour
{
/// <summary>
/// 录制的最大音频长度
/// </summary>
public int m_MaxRecordingLength = 60;
[SerializeField] private AudioClip m_TrimmedClip;
private AudioClip m_OrigionRecording;
private int m_RecordingFrequency = 16000;
[SerializeField] private float _time;
private CancellationTokenSource _cancelToken;
private void Start()
{
_cancelToken = new CancellationTokenSource();
}
/// <summary>
/// 开始录制声音
/// </summary>
public void StartRecordAudio()
{
m_OrigionRecording = Microphone.Start(null, false, m_MaxRecordingLength, m_RecordingFrequency);
GetRecordingTime().Forget();
}
private async UniTaskVoid GetRecordingTime()
{
_time = 0;
while (true)
{
await UniTask.Yield(cancellationToken: _cancelToken.Token);
_time += Time.deltaTime;
}
}
/// <summary>
/// 结束录制,返回audioClip
/// </summary>
/// <param name="_callback"></param>
public void StopRecordAudio(Action<AudioClip> _callback)
{
// 停止录制
Microphone.End(null);
_cancelToken.Cancel();
_cancelToken.Dispose();
_cancelToken = new CancellationTokenSource();
TrimAudioClip(_callback);
}
private void TrimAudioClip(Action<AudioClip> _callback)
{
// 计算截取的样本数
int startSample = Mathf.FloorToInt(0 * m_OrigionRecording.frequency);
int endSample = Mathf.FloorToInt(_time * m_OrigionRecording.frequency);
int length = endSample - startSample;
// 创建截取后的音频数据数组
float[] data = new float[length * m_OrigionRecording.channels];
m_OrigionRecording.GetData(data, startSample * m_OrigionRecording.channels);
for (int i = 0; i < data.Length; ++i)
{
data[i] = data[i] * 0.5f;
}
// 创建截取后的AudioClip
m_TrimmedClip = AudioClip.Create("TrimmedClip", length, m_OrigionRecording.channels, m_OrigionRecording.frequency, false);
m_TrimmedClip.SetData(data, 0);
// 可以将trimmedClip用于播放或保存等操作
_callback?.Invoke(m_TrimmedClip);
}
private void OnDestroy()
{
_cancelToken.Cancel();
_cancelToken.Dispose();
}
}
【Unity学习】使用Unity自带API录制音频,自动根据录制时间调整音频大小
最新推荐文章于 2024-07-22 06:41:45 发布