using System.Diagnostics; using TMPro; using UnityEngine; using Whisper; using Whisper.Utils; public class VoiceTranscriptionTestBox : MonoBehaviour { public Material activeMaterial; public Material inactiveMaterial; private MeshRenderer meshRenderer; public WhisperManager whisper; public MicrophoneRecord microphoneRecord; public TextMeshProUGUI outputText; private string _buffer; private void Awake() { whisper.OnNewSegment += OnNewSegment; whisper.OnProgress += OnProgressHandler; microphoneRecord.OnRecordStop += OnRecordStop; } // Start is called before the first frame update void Start() { meshRenderer = GetComponent(); } // Update is called once per frame void Update() { } void OnTriggerEnter(Collider other) { KbmController controller = other.GetComponent(); if (controller != null) { meshRenderer.material = activeMaterial; microphoneRecord.StartRecord(); } } private void OnTriggerExit(Collider other) { KbmController controller = other.GetComponent(); if (controller != null) { meshRenderer.material = inactiveMaterial; microphoneRecord.StopRecord(); } } private async void OnRecordStop(AudioChunk recordedAudio) { _buffer = ""; var sw = new Stopwatch(); sw.Start(); var res = await whisper.GetTextAsync(recordedAudio.Data, recordedAudio.Frequency, recordedAudio.Channels); if (res == null) return; var time = sw.ElapsedMilliseconds; var rate = recordedAudio.Length / (time * 0.001f); UnityEngine.Debug.Log($"Time: {time} ms\nRate: {rate:F1}x"); var text = res.Result; outputText.text = text; } private void OnProgressHandler(int progress) { UnityEngine.Debug.Log($"Progress: {progress}%"); } private void OnNewSegment(WhisperSegment segment) { _buffer += segment.Text; UnityEngine.Debug.Log(_buffer + "..."); } }