Как пользоваться
- Вставьте аудио в Base64 или data URI вида data:audio/mpeg;base64,... в поле ввода.
- Проверьте определённый формат и нажмите кнопку воспроизведения в аудиоплеере.
- Скачайте файл. Он получит расширение, соответствующее определённому формату, например .mp3 или .wav.
Декодирование результата синтеза речи
Сервисы синтеза речи, которые отвечают в формате JSON, не могут поместить в ответ двоичное аудио, поэтому кодируют его. Например, Google Cloud Text-to-Speech возвращает речь в виде строки Base64 в поле audioContent в запрошенном вами формате кодирования, например MP3 или OGG Opus. Другие голосовые API и 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) | блок ftyp с брендом M4A | по-разному (начинается с поля размера) |
Сырой PCM: когда аудио не воспроизводится
Некоторые голосовые API, особенно работающие в реальном времени и в потоковом режиме, передают сырые отсчёты PCM без заголовка файла, чаще всего 16-битные моно с частотой 16 или 24 кГц. Телефонные потоки точно так же передают звук μ-law с частотой 8 кГц без заголовка. Без заголовка ничто в байтах не говорит о том, что это такое: формат определить нельзя, браузеры не могут воспроизвести данные, а этот инструмент не может угадать частоту дискретизации или число каналов. Декодированные байты всё равно можно скачать, но чтобы их услышать, нужно добавить заголовок WAV с параметрами из документации API:
# FFmpeg: 16 бит, little-endian, 24 кГц, моно
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 без префикса. В обоих случаях формат определяется по декодированным байтам.Отправляется ли моё аудио на сервер?
Нет. Декодирование, определение формата и воспроизведение выполняются в вашем браузере.