Unity STT


NuGetForUnity

  • https://github.com/GlitchEnzo/NuGetForUnity
  • 우측메뉴 Release

  • NuGetForUnity.4.1.0.unitypackage 다운
  • Unity Project에 import

  • Main Manu > NuGet > Manage NuGet Packages
  • Microsoft.Extensions.DependencyInjection 설치
  • Microsoft.Extensions.Http 설치
  • Newtonsoft.Json 설치

OpenAI 키등록

  • https://platform.openai.com/settings/organization/billing/overview
  • 키 등록전 지불(Payment)방법 등록을 해야합니다. 키생성을 먼저하면 지불방법 등록후 다시 키등록 해야함

  • https://platform.openai.com/api-keys
  • Create new secret key
  • 생성된 key는 생성시 한번만 볼 수 있습니다. 잘 보관해야합니다.

  • 윈도우 > 시작메뉴 > cmd(터미널)
  • setx OPENAI_API_KEY 키값 환경변수로 키 등록
  • https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety 환경변수를 이용한 키설정 참고
  • echo %OPENAI_API_KEY% 등록된 키 보기

OpenAI API Dotnet

  • https://github.com/OkGoDoIt/OpenAI-API-dotnet
  • Download 압축 해제 후, OpenAI_API 폴더째로 드래그 드랍하여 import

AudioSource to MP3

EncodeMP3.convert (AudioClip clip, string path, int BitRate);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OpenAI_API;
using OpenAI_API.Audio;
using System;

public class STT : MonoBehaviour
{
    //OpenAIAPI.Transcriptions
    private String my_api_key;
    private OpenAIAPI api;
    private AudioSource audioSource;
    private AudioClip clip;
    private string path = "file.mp3";

    private void Start()
    {
        my_api_key = Environment.GetEnvironmentVariable("OPENAI_API_KEY", EnvironmentVariableTarget.User); //환경변수로 부터 API 키를 가져옴
        api = new OpenAIAPI(my_api_key); //API 키를 이용하여 API 객체 생성

        //transcriptions.GetTextAsync("path/to/file.mp3");
        //get microphone name
        foreach (string device in Microphone.devices)
        {
            Debug.Log("Device Name: " + device);
        }

        //get audio source reference
        AudioSource audioSource = GetComponent<AudioSource>();
    }

    private void Update(){
        //push q key for start recording
        if(Input.GetKeyDown(KeyCode.Q)){
            clip = Microphone.Start(Microphone.devices[0], true, 10, 44100);
        }
        //push w key for stop recording
        if(Input.GetKeyDown(KeyCode.W)){
            Microphone.End(Microphone.devices[0]);
        }

        //push space key for get text
        if(Input.GetKeyDown(KeyCode.Space)){
            EncodeMP3.convert (clip, path, 44100);
            GetTextAsync(path);
        }
    }

    async void GetTextAsync(string path)
    {
        string text = await api.Transcriptions.GetTextAsync(path);
        Debug.Log(text);
    }
}