using UnityEngine; using System; using System.Collections.Generic; using AX.AudioSystem; public class MicrophoneTest : MonoBehaviour { public int recordTime = 60; public int deviceId = 0; int deviceCount; string frequency = "8000"; string log = ""; public AudioSource audioRecorder; public AudioSource audioPlayer; float[] array; public volatile bool IsRecording; void Start() { audioRecorder = GetComponent(); } void Log(string log) { this.log += log; this.log += "\r\n"; } void OnGUI() { deviceCount = Microphone.devices.Length; if (deviceCount == 0) { Log("没有发现麦克风!"); return; } GUILayout.BeginArea(new Rect(400, 0, Screen.width - 400, 600)); GUILayout.BeginVertical(); GUILayout.Label("麦克风测试:"); if (deviceCount > 0) { GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); if (GUILayout.Button("开始录音")) StartRecord(); if (GUILayout.Button("停止录音")) StopRecord(); GUILayout.EndVertical(); if (GUILayout.Button("播放")) PlayRecord(); frequency = GUILayout.TextField(frequency); GUILayout.EndHorizontal(); } GUILayout.Label(log); GUILayout.EndVertical(); GUILayout.EndArea(); } void StartRecord() { audioRecorder.Stop(); audioRecorder.loop = false; audioRecorder.mute = true; audioRecorder.clip = Microphone.Start(Microphone.devices[deviceId], false, recordTime, int.Parse(frequency)); IsRecording = true; Log("开始录音!"); } void StopRecord() { if (!Microphone.IsRecording(Microphone.devices[deviceId])) return; var pos = Microphone.GetPosition(Microphone.devices[deviceId]); Microphone.End(Microphone.devices[deviceId]); IsRecording = false; array = new float[pos * audioRecorder.clip.channels]; audioRecorder.clip.GetData(array, 0); var clip = AudioClip.Create("VoicePlay", pos, audioRecorder.clip.channels, audioRecorder.clip.frequency, false); clip.SetData(array, 0); audioPlayer.clip = clip; } void PlayRecord() { if (Microphone.IsRecording(Microphone.devices[deviceId])) return; if (audioRecorder.clip == null) return; if (audioPlayer.clip == null) return; audioPlayer.mute = false; audioPlayer.loop = false; audioPlayer.Play(); } }