forked from cgvr/DeltaVR
transcribe voice to text with Whisper base model
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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<MeshRenderer>();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void OnTriggerEnter(Collider other)
|
||||
{
|
||||
KbmController controller = other.GetComponent<KbmController>();
|
||||
if (controller != null)
|
||||
{
|
||||
meshRenderer.material = activeMaterial;
|
||||
microphoneRecord.StartRecord();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
KbmController controller = other.GetComponent<KbmController>();
|
||||
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 + "...");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d28857190597d9a46a8ddf3cf902cc81
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user