로컬 음성 인식·합성
최종 업데이트
mlx-audio: 한 설치로 합성과 인식을 같이 써요
모델만 바꿔 끼우는 맥 오디오 도구예요
mlx-audio는 맥에서 음성을 만들고 받아쓰는 일을 한 패키지로 처리해요. 모델을 바꿔도 명령은 같아서 같은 문장으로 여러 모델을 비교하기 좋아요. 서버를 켜면 OpenAI 형식 API1로 다른 앱에서도 붙일 수 있어요.
텍스트와 음성을 한 패키지에서 다뤄요
mlx-audio는 애플 MLX2 위에서 도는 오디오 라이브러리예요. 텍스트를 넣으면 음성이 나오고, 음성을 넣으면 글이 나와요. 합성, 인식, 음성끼리의 변환, 음악 생성이 한 패키지에 들어 있어요.
모델마다 명령이 다른 게 아니라, 같은 CLI3와 같은 서버를 쓰고 모델 값만 바꿔요. 그래서 같은 문장으로 여러 모델을 비교할 때 코드를 다시 쓰지 않아도 돼요.
맥 전용이에요. 애플 실리콘에서 돌아가고, 쿠다나 ROCm4 경로는 없어요.
MLX 위에서 돌아서 애플 실리콘에 맞춰 최적화돼 있어요. 파이썬 패키지지만 계산은 MLX가 맡아요.

설치하고 문장 하나를 만들어요
pip으로 설치해요. mp3나 FLAC으로 저장하려면 ffmpeg도 필요하고, wav로만 쓸 거면 없어도 돼요.
명령 한 줄에 모델과 문장, 목소리를 넣어요. 문장이 여러 개면 조각별로 파일이 나오고, --join_audio를 붙이면 하나로 합쳐져요.
--stream을 붙이면 생성되는 대로 조각을 받아요. 바로 듣고 싶으면 --play를 쓰고, 스트리밍 결과를 파일로 남기려면 --save를 같이 붙여요.
| 명령 옵션 | 하는 일 |
|---|---|
| --model | 어떤 모델로 만들지 정해요 |
| --voice | 목소리를 골라요 |
| --lang_code | 언어를 알려 줘요 |
| --join_audio | 조각을 한 파일로 합쳐요 |
| --stream | 생성되는 대로 조각을 받아요 |
한국어는 모델을 골라야 해요
지원 언어는 모델마다 달라요. 표에 올라온 모델 중 한국어를 명시한 것은 여섯 개예요. 이름만 보고 고르면 영어 전용 모델을 받게 될 수 있어요.
음성 복제5를 쓰려면 참조 음성이 필요한 모델과 아닌 모델이 갈려요. 복제가 목적이면 그 기능이 있는 모델부터 확인하세요.
| 모델 이름 | 종류 | 특징 |
|---|---|---|
| Qwen3-TTS | 합성 | 목소리 설계 |
| Ming-3.0 TTS Tiny | 합성 | 전문가 구조, 복제 |
| Ming-3.0 TTS Dense | 합성 | 0.5B, 감정·방언 제어 |
| Higgs Audio v2 | 합성 | 5개 언어 |
| Qwen3-ASR | 인식 | 받아쓰기 |
| Qwen3-ForcedAligner | 문장 정렬 | 자막 타이밍 |
같은 문장을 여러 모델로 돌려 봐요
파이썬에서는 모델을 열고 문장을 넣어요. 모델 이름만 바꾸면 같은 코드로 다른 모델이 돌아가요.
모델을 바꿀 때마다 가중치를 새로 받아요. 첫 실행은 다운로드에 시간이 걸리고, 그다음부터는 로컬 캐시를 써요.
README에는 모델별 속도 수치가 없어요. 그래서 비교할 때는 생성된 길이와 메모리 크기를 보고, 마지막은 들어서 판단하는 편이 정확해요.
from mlx_audio.tts.utils import load_model
for name in [
"mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-8bit",
"mlx-community/Ming-3.0-tts-tiny-8bit",
]:
model = load_model(name)
for chunk in model.generate("같은 문장을 읽어 봐요.", lang_code="Korean"):
print(name, chunk.audio.shape[0])
서버로 열면 다른 앱에서 써요
서버를 켜면 OpenAI 형식과 같은 주소가 열려요. 이미 그 형식으로 붙어 있는 앱이라면 주소만 바꿔서 연결할 수 있어요.
합성은 JSON으로 문장을 보내고, 인식은 오디오 파일을 multipart로 보내요. 두 경로 모두 같은 서버에서 처리해요.
mlx_audio.server --host 0.0.0.0 --port 8000
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "mlx-community/Kokoro-82M-bf16", "input": "안녕하세요", "voice": "af_heart"}' \
--output speech.wav| API 경로 | 하는 일 | 보내는 것 |
|---|---|---|
| /v1/audio/speech | 문장을 음성으로 | JSON |
| /v1/audio/transcriptions | 음성을 글로 | 파일 |
웹 화면도 같이 들어 있어요. 다만 서버와 별도로 띄우는 구조라서, 명령 한 번으로 둘 다 열리지는 않아요.

받아쓰기와 자막 타이밍도 같이 해요
인식 쪽에는 Whisper 계열과 Qwen3-ASR, Parakeet 같은 모델이 들어 있어요. 합성과 같은 패키지라서 설치를 따로 하지 않아요.
정렬 모델은 문장과 음성을 시간 단위로 맞춰 줘요. 자막을 만들 때 문장이 시작하는 지점을 이 값으로 잡아요.
화자 분리6 모델도 표에 있어서 회의 녹음처럼 여러 사람이 말한 파일을 나눌 수 있어요.
Swift 패키지도 있어서 iOS나 macOS 앱 안에 넣을 수 있어요. 앱에서 서버를 거치지 않고 직접 호출하는 구성이에요.
양자화로 메모리를 줄여요
같은 모델을 3비트, 4비트, 6비트, 8비트로 올려 둔 저장소가 있어요. 모델 이름 끝의 접미사만 바꾸면 같은 문장을 다른 비트로 만들 수 있어요.
비트를 낮추면 필요한 메모리가 줄고 음질이 조금씩 달라져요. 대화용이면 8비트, 낭독용이면 4비트부터 비교해 보세요.
이 패키지가 정해주지 않는 것
음질과 속도의 기준값은 없어요. 모델마다 조건이 달라서, 같은 문장을 넣고 직접 비교해야 해요.
ffmpeg가 없으면 wav로만 저장돼요. mp3가 필요한 파이프라인7이면 먼저 설치하세요.
모델 라이선스는 저장소마다 달라요. 상업적으로 쓸 때는 모델 카드를 확인해야 해요.
용어 각주
API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.
본문으로 돌아가기MLX — Apple이 개발하는 머신러닝 프레임워크로, Apple Silicon의 CPU와 GPU가 공유하는 메모리를 활용해 모델을 실행합니다.
본문으로 돌아가기CLI — Command-Line Interface의 약자입니다. 터미널에 명령어를 입력해 프로그램을 조작하는 방식입니다.
본문으로 돌아가기ROCm — AMD GPU에서 AI와 고성능 계산을 실행하는 소프트웨어 플랫폼입니다. 지원 여부는 GPU 모델뿐 아니라 운영체제·드라이버·프레임워크 버전의 조합으로 확인합니다.
본문으로 돌아가기음성 복제 — 참고 음성에서 화자 특성을 추출해 비슷한 목소리의 음성을 합성하는 기술입니다. 본인 또는 사용 허가를 받은 음성만 참고 자료로 사용해야 합니다.
본문으로 돌아가기화자 분리 — 녹음에서 누가 언제 말했는지 구간을 나누고 화자별로 표시하는 작업입니다.
본문으로 돌아가기파이프라인 — 입력부터 결과까지 이어지는 처리 단계의 묶음입니다. 각 단계에서 서로 다른 모델이나 도구를 사용할 수 있습니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- mlx-audio는 맥에서 음성을 만들고 받아쓰는 일을 한 패키지로 처리해요. 모델을 바꿔도 명령은 같아서 같은 문장으로 여러 모델을 비교하기 좋아요. 서버를 켜면 OpenAI 형식 API로 다른 앱에서도 붙일 수 있어요.
- 필요한 메모리는 어느 정도인가요?
- 비트를 낮추면 필요한 메모리가 줄고 음질이 조금씩 달라져요. 대화용이면 8비트, 낭독용이면 4비트부터 비교해 보세요.
- 조건과 출처는 어디서 확인하나요?
- 모델 라이선스는 저장소마다 달라요. 상업적으로 쓸 때는 모델 카드를 확인해야 해요.
