WAV를 Base64로 변환하는 방법
.wav파일을 상자에 놓거나 파일 선택기로 고르세요.- 미리보기에서 재생해 보세요.
- 출력 형식은 Data URI로 설정되어 있습니다. API용이라면 일반 Base64를, 이름, MIME 유형, 크기를 포함하려면 JSON을 고르세요.
- 출력 복사를 누르세요. 몇 초가 넘는 녹음은 긴 문자열이 되므로 .txt로 저장이 다루기 쉽습니다.
Base64 WAV의 크기
비압축 PCM은 계산하기 쉽습니다. 샘플 레이트 × 샘플당 바이트 × 채널 수가 초당 바이트입니다. 표준 44바이트 헤더를 더하고 Base64를 위해 4/3을 곱하세요.
| 형식 | 1초 | 10초 | 1분 |
|---|---|---|---|
| 8 kHz, 모노, 16비트 (전화) | 21,392자 | 213,392자 | 1,280,060자 |
| 16 kHz, 모노, 16비트 (음성) | 42,728자 | 426,728자 | 2,560,060자 |
| 44.1 kHz, 모노, 16비트 | 117,660자 | 1,176,060자 | 7,056,060자 |
| 44.1 kHz, 스테레오, 16비트 (CD) | 235,260자 | 2,352,060자 | 14,112,060자 |
| 48 kHz, 스테레오, 16비트 | 256,060자 | 2,560,060자 | 15,360,060자 |
일부 앱으로 녹음한 파일에는 메타데이터가 담긴 추가 청크가 있어 실제 크기가 조금 더 클 수 있습니다.
WAV와 음성 API
음성 인식 서비스는 손실 없이 디코딩되고 코덱이 필요 없는 비압축 16비트 PCM을 흔히 받습니다. JSON 요청 안에 오디오를 인라인으로 받을 때는 Base64로 넣고, 인코딩, 샘플 레이트, 채널 수를 설명하는 필드를 함께 보냅니다. 이 값은 파일과 일치해야 합니다. 44.1 kHz 스테레오 녹음을 16 kHz 모노라고 선언하면 엉터리 받아쓰기나 오류가 나옵니다.
음성 모델은 보통 16 kHz 모노 이하에서 동작합니다. CD 품질 스테레오 녹음을 인코딩 전에 16 kHz 모노로 바꾸면 요청이 약 5.5분의 1로 줄고, 대개 인식 품질도 떨어지지 않습니다. 오디오 편집기나 명령줄 변환기로 바꾸세요. 이 페이지는 파일을 있는 그대로 인코딩합니다.
긴 녹음에 인라인 제한이 여전히 작다면, 이런 서비스는 보통 스토리지에 있는 파일의 링크도 받으므로 Base64를 아예 쓰지 않아도 됩니다.
Python으로 WAV를 만들고 인코딩하기
표준 라이브러리로 WAV를 만들고 인코딩할 수 있어 테스트 픽스처에 편리합니다. 다음은 880 Hz의 200 ms 비프음을 만듭니다.
import base64, io, math, struct, wave
rate = 8000
samples = b"".join(
struct.pack("<h", int(12000 * math.sin(2 * math.pi * 880 * i / rate)))
for i in range(rate // 5)
)
buf = io.BytesIO()
with wave.open(buf, "wb") as w:
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(rate)
w.writeframes(samples)
uri = "data:audio/wav;base64," + base64.b64encode(buf.getvalue()).decode()
파일은 3,244바이트이고 data URI는 4,350자이며 data:audio/wav;base64,UklGRqQMAABXQVZF로 시작합니다. 파일과 스트림에 관해서는 Python에서 Base64를 참고하세요.
되돌리기
Base64를 WAV로는 Base64 WAV 문자열을 재생하고 파일로 저장합니다. 웹용으로 오디오를 줄이려면 압축 형식을 쓰세요. 크기 비교는 MP3를 Base64로를 보세요.
자주 묻는 질문
WAV의 Base64가 이렇게 긴 이유는 무엇인가요?
WAV는 보통 원시 PCM 샘플을 압축 없이 저장합니다. CD 품질 스테레오 1초는 오디오 176,400바이트이고, 헤더를 포함하면 Base64로 235,260자입니다. 모노와 더 낮은 샘플 레이트로 바꾸면 크게 줄어듭니다.
audio/wav와 audio/x-wav 중 무엇이 맞나요?
둘 다 쓰이며 브라우저는 어느 쪽이든 재생합니다. 보통은 audio/wav를 쓰고, 일부 오래된 시스템은 audio/x-wav나 audio/wave를 보냅니다. 도구는 브라우저가 알려 주는 유형을 씁니다.
Base64로 된 WAV의 앞 글자들은 무슨 뜻인가요?
UklGR는 RIFF 컨테이너 헤더로, WebP와 AVI도 같습니다. WAVE 태그는 12~16번째 문자에 XQVZF로 나타나고, 바로 뒤의 Zm10은 fmt 청크입니다.