사용 방법
- Base64 오디오 또는 data:audio/mpeg;base64,... 같은 data URI를 입력란에 붙여넣습니다.
- 감지된 형식을 확인하고 오디오 플레이어에서 재생 버튼을 누릅니다.
- 파일을 다운로드합니다. .mp3나 .wav처럼 감지된 형식에 맞는 확장자가 붙습니다.
텍스트 음성 변환(TTS) 출력 디코딩하기
JSON으로 응답하는 텍스트 음성 변환 서비스는 응답에 바이너리 오디오를 그대로 넣을 수 없으므로 인코딩해서 보냅니다. 예를 들어 Google Cloud Text-to-Speech는 요청한 인코딩(MP3, OGG Opus 등)으로 만든 음성을 audioContent라는 필드에 Base64 문자열로 담아 반환합니다. 다른 음성 및 챗봇 API는 audio, data, audio_base64 같은 필드를 사용합니다.
음성, 말하기 속도, 프롬프트를 비교할 때 이 값을 여기에 붙여넣으면 결과를 바로 들어 볼 수 있습니다. 따옴표 사이의 문자열만 복사하십시오. JSON을 먼저 파싱하면 따옴표나 \/ 같은 이스케이프 문자가 딸려 오는 것을 막을 수 있습니다.
감지되는 오디오 형식
형식은 디코딩된 데이터의 첫 바이트로 인식하므로 MIME 유형이 없거나 잘못되어 있어도 상관없습니다.
| 형식 | 시그니처 | Base64 시작 부분 |
|---|---|---|
| MP3 | ID3 태그 또는 MPEG 프레임 헤더 | SUQz 또는 대개 // |
| WAV | RIFF ... WAVE | UklGR |
| OGG(Vorbis, Opus) | OggS | T2dnUw |
| FLAC | fLaC | ZkxhQ |
| M4A(AAC) | 브랜드가 M4A인 ftyp 박스 | 파일마다 다름(크기 필드로 시작) |
원시 PCM: 오디오가 재생되지 않을 때
일부 음성 API, 특히 실시간 및 스트리밍 API는 파일 헤더 없이 원시 PCM 샘플을 보냅니다. 흔히 16kHz 또는 24kHz의 16비트 모노입니다. 전화 통신 스트림도 마찬가지로 헤더 없는 8kHz μ-law 오디오를 전달합니다. 헤더가 없으면 바이트만으로는 데이터의 정체를 알 수 없습니다. 형식을 감지할 수 없고, 브라우저가 재생할 수 없으며, 이 도구도 샘플링 레이트나 채널 수를 추측할 수 없습니다. 디코딩된 바이트는 다운로드할 수 있지만, 소리를 들으려면 API 문서에 나온 파라미터로 WAV 헤더를 추가해야 합니다.
# FFmpeg: 16비트 리틀 엔디언, 24kHz, 모노
ffmpeg -f s16le -ar 24000 -ac 1 -i speech.pcm speech.wav
# Python
import base64, wave
with wave.open('speech.wav', 'wb') as w:
w.setnchannels(1)
w.setsampwidth(2) # 16비트 샘플
w.setframerate(24000)
w.writeframes(base64.b64decode(pcm_base64))
결과가 너무 빠르거나 느리게 들리거나 잡음처럼 들린다면 샘플링 레이트, 샘플 크기, 바이트 순서가 데이터와 맞지 않는 것입니다. 정상적으로 재생된 뒤 문자열 형태가 필요하다면 오디오 Base64 변환 도구로 WAV를 다시 인코딩할 수 있습니다.
자주 묻는 질문
도구에서 오디오를 재생할 수 없는 이유는 무엇입니까?
데이터가 헤더 없는 원시 PCM이거나(위 설명 참고), 브라우저가 해당 코덱을 지원하지 않기 때문입니다. 두 번째 경우라면 다운로드한 파일은 여전히 정상이며 VLC 같은 미디어 플레이어에서 열 수 있습니다.
API가 오디오를 여러 개의 Base64 청크로 보냅니다. 어떻게 합칩니까?
각 청크를 바이트로 디코딩한 다음 순서대로 이어 붙이십시오. Base64 문자열을 먼저 이어 붙이는 방법은 마지막 청크를 제외한 모든 청크가 3바이트의 배수를 인코딩한 경우에만 통하며, 대개 이를 보장할 수 없습니다. 이 도구는 한 번에 문자열 하나만 디코딩하므로 스트리밍된 청크는 직접 작성한 코드에서 합치십시오.
디코딩한 오디오는 원본과 똑같습니까?
예. Base64는 무손실이므로 파일에는 인코딩된 바이트가 그대로 들어 있으며 음질과 비트레이트도 같습니다. 이 도구는 오디오를 다시 인코딩하거나 변환하지 않습니다.
data URI를 붙여넣어도 됩니까?
data:audio/...;base64, 문자열 전체를 붙여넣거나 접두사 없는 순수 Base64를 붙여넣으십시오. 어느 쪽이든 형식은 디코딩된 바이트로 감지합니다.오디오가 서버로 전송됩니까?
아니요. 디코딩, 형식 감지, 재생은 모두 브라우저에서 이루어집니다.