만든 이야기

오프라인 녹음 프로그램
MemoO를 만들며 정한 것들

MemoO는 녹음하면 PC 안에서 바로 한국어 텍스트로 바꿔주는 Windows 프로그램이에요. 겉으로는 빨간 버튼 하나가 전부지만, 그 뒤에는 몇 가지 고민이 있었어요. 만들면서 내린 결정과 그 이유를 정리해봤어요.

1. 음성을 밖으로 보내지 않기로 한 이유

가장 먼저, 그리고 가장 오래 고민한 결정이에요. 서버에서 변환하면 정확하고 빠른 큰 모델을 쓸 수 있지만, 녹음 파일을 어딘가로 올려야 해요. 녹음에는 회의 내용, 상담 이야기, 강의 중 질문처럼 나 말고 다른 사람의 목소리가 담기는 경우가 많아요. 그런 파일을 올려도 되는지는 쓰는 사람이 매번 고민해야 하는 문제가 돼요.

그래서 MemoO는 처음부터 인터넷에 연결하지 않는 구조로 만들었어요.

대신 변환 속도와 정확도가 사용자 PC 사양에 달리게 됐어요. 아래의 결정들은 대부분 이 약점을 줄이기 위한 거예요.

2. 녹음은 16kHz 모노로

MemoO가 쓰는 Whisper 계열 음성 인식 모델은 16kHz 모노 음성을 입력으로 받아요. 44.1kHz 스테레오로 녹음해도 변환 전에 어차피 16kHz 모노로 바꿔야 하니, 처음부터 그 형식으로 녹음해요. 1시간 녹음이 약 115MB로, 같은 길이의 CD 음질 녹음보다 5배 넘게 작아요.

왜 이 정도면 충분한지는 음성 인식용 녹음 설정 글에 자세히 정리해두었어요.

3. 강제 종료돼도 녹음이 남도록

긴 강의나 회의를 녹음하다가 노트북 배터리가 꺼지면, 그때까지의 녹음이 통째로 날아가는 프로그램이 의외로 많아요. 원인은 WAV 파일의 구조에 있어요.

WAV 파일은 맨 앞 44바이트 머리말(헤더)에 "뒤에 음성 데이터가 몇 바이트 있는지"를 적어둬요. 보통은 녹음을 끝낼 때 이 값을 한 번에 채우는데, 그 전에 프로그램이 꺼지면 헤더에는 "데이터 0바이트"라고 적힌 채로 남아요. 음성 데이터는 파일 안에 있는데도, 재생 프로그램은 빈 파일로 읽어요.

MemoO는 이 문제를 두 가지로 막아요.

  1. 녹음 중 1초마다 헤더를 갱신해서, 언제 꺼지더라도 헤더가 실제 데이터 길이와 거의 맞게 해요.
  2. 다음에 실행할 때 중단된 녹음을 찾으면, 파일 끝의 잘린 조각을 정리하고 헤더를 다시 써서 복구한 뒤 변환 대기열에 올려요.

4. 그래픽카드 없는 PC에서도 빠르게

변환에는 Whisper를 가볍고 빠르게 돌리도록 만든 오픈소스 엔진 faster-whisper를 써요. 기본 모델은 small이에요. medium이 더 정확하지만, 일반 사무용 PC에서는 변환 시간이 눈에 띄게 길어져서 기본값으로는 small을 골랐어요. 정확도가 더 필요한 분은 medium 모델을 추가로 받아 설정에서 바꿀 수 있어요.

이렇게 해서 일반 사무용 PC에서도 보통 녹음 길이보다 짧은 시간 안에 변환이 끝나요.

5. 조용한 구간은 건너뛰기

녹음에는 생각보다 침묵이 많아요. 회의 중 자료를 넘기는 시간, 강의 중 판서하는 시간 같은 것들이에요. MemoO는 변환 전에 음성 구간 감지(VAD)로 2초 이상 이어지는 침묵을 건너뛰어요.

이건 속도뿐 아니라 정확도에도 도움이 돼요. Whisper 계열 모델은 소리가 거의 없는 구간에서 실제로 하지 않은 말을 만들어내거나 앞 문장을 되풀이하는 경우가 있어서, 침묵을 미리 빼고 문장마다 앞 문맥에 덜 끌려가도록 설정해 이런 현상을 줄였어요.

6. 작고 단순한 화면

녹음 프로그램은 필요한 순간에 바로 눌러야 해요. 그래서 창을 작게 만들고 화면을 녹음, 목록, 상세 세 개로만 나눴어요. 설정은 모델과 테마 정도뿐이에요. 녹음 중에 창을 최소화하면 작은 캡슐 모양 창이 떠서 녹음 상태를 계속 볼 수 있어요.

7. 아직 못 하는 것

필요한 기능이 있다면 메일로 알려주세요. 어떤 기능을 먼저 만들지 정할 때 가장 크게 참고해요.

MemoO 무료 다운로드

Windows 10/11 · 약 510MB · 회원가입 없이 바로 쓸 수 있어요.

다운로드 페이지로