AISmarteasy – 시맨틱 커널 포크로 개발하기 5fa – Worker – Audio – Whisper, NAudio

Whisper

openai가 2022년 10월에 출시한 음성 인식 모델이다. 68,000시간의 음성 데이터를 학습했다. 한국어를 포함한 99개 언어를 지원한다.  오픈소스로 공개했다. openapi는 whisper에 연동될 수 있는 ai service api를 제공한다.

버전 업그레이드가 되고 있지만, api에서는 첫 번째 버전에서 사용했던 모델명을 그대로 사용하고 있다. whisper-1

api의 request body를 보면, 언어 모델에서 사용하던 것들을 사용함을 볼 수 있다. whisper가 openai의 llm을 근간으로 한다는 것을 알 수 있다.

 

Whisper is a general-purpose speech recognition model. It is trained on a large dataset of diverse audio and is also a multitasking model that can perform multilingual speech recognition, speech translation, and language identification.

A Transformer sequence-to-sequence model is trained on various speech processing tasks, including multilingual speech recognition, speech translation, spoken language identification, and voice activity detection. These tasks are jointly represented as a sequence of tokens to be predicted by the decoder, allowing a single model to replace many stages of a traditional speech-processing pipeline. The multitask training format uses a set of special tokens that serve as task specifiers or classification targets.

 

[음성 인식; speech to text]

오디오 파일을 받아 텍스트로 변환한다.

다양한 음성 파일 형식(m4a, mp3, mp4, mpeg, mpga, wav, webm 등)을 지원한다.

프롬프트도 줄 수 있다. An optional text to guide the model’s style or continue a previous audio segment. The prompt should match the audio language.

텍스트 변환을 응답이라고 할 때, 응답 형식도 지정할 수 있다. 기본 값은 json이다. json, text, srt, verbose_json, vtt로 설정 가능

  • verbose_json – 타임스탬프 포함, 상세한 정보를 얻을 수 있다.

temperature도 설정할 수 있다.

NAudio

NAudio는 .NET에서 오디오 및 MIDI 작업을 수행할 수 있는 오픈 소스 라이브러리이다.

투토리얼을 해 보자.

오디오를 재생하려면 오디오 파일을 읽어야 한다.  AudioFileReader로 오디오 파일을 읽고, 읽은 오디오 파일을 WaveOutEvent로 재생한다.

string audioFilePath = “sample.wav”;

using (var audioFileReader = new AudioFileReader(audioFilePath))
{

// 볼륨 설정 (0.0 ~ 1.0)
audioFileReader.Volume = 0.8f;

using (var waveOut = new WaveOutEvent())
{
waveOut.Init(audioFileReader);

waveOut.Play();

while (waveOut.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}

// 오디오 파일의 총 길이 (시간)
TimeSpan duration = audioFileReader.TotalTime;
Console.WriteLine($”Audio duration: {duration}”);

}

녹음 하려면

녹음하고 녹음된 것을 파일로 저장해야 한다. WaveInEvent는 녹음을 하고, WaveFileWriter은 파일로 저장한다.

녹음을 시작하면 설정된 대로 녹음된 데이터가 있을 때 마다, WaveInEvent의 DataAvailable 이벤트가 발생한다.

openai whisper api는 오디오 파일을 25MB까지로 제한하기 때문에, 텍스트로 변환할 오디오 작성 시간에 제약을 둘 필요가 있다.

얼마만큼 녹음하면 25M가 넘는지 테스트 해 봐야 한다. 우선은 최대 1분으로 제약하자.

if (writer.Position > waveIn.WaveFormat.AverageBytesPerSecond * 30) { waveIn.StopRecording(); }

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*