Характеристики и форматы аудио
Любой звук — это волны разных частот и амплитуд, которые распространяются в воздухе. Чтобы получить аудиофайл, звуковые волны нужно преобразовать сначала в электрические сигналы, а потом — в двоичные данные, которые умеют обрабатывать электронные устройства.
Наиболее широко для оцифровки звуковых сигналов применяется импульсно-кодовая модуляция (PCM, Pulse-code Modulation).
Частота дискретизации и битовая глубина
Звуковые сигналы оцифровываются с помощью дискретизации — семплирования. Сигнал измеряется через равные
промежутки времени, и значение амплитуды сигнала фиксируется в момент измерения — это и есть семпл. Если сигнал
замеряется 16 000 раз за секунду, частота дискретизации
(sample rate) равна 16 000 Гц.
Например, для телефонной связи обычно используется частота 8 000 Гц.
Если есть выбор, при распознавании лучше использовать аудио с частотой 16 000 Гц и выше, так как дискретизация с меньшей частотой может привести к потере точности распознавания — особенно если в аудио есть фоновые шумы.
После оцифровки сигналы переводятся в двоичную форму. Битовая глубина
(bit depth) определяет, сколько бит отводится для хранения одного семпла.
Чем больше битовая глубина и частота дискретизации, тем точнее получившийся цифровой сигнал соответствует исходному.
Сжатие и потеря качества
Аудиофайлы могут быть сжаты для хранения и передачи. Сжатие может
происходить с потерями информации (lossy
) или без (lossless
).
При сжатии с потерями часть данных аудиосигнала отбрасывается, и восстановить их не удастся. Не сжатое аудио наиболее приближено к исходному звуку.
Какие форматы и кодеки поддерживаются
Формат аудио — это своеобразный контейнер, в который с помощью специальной программы — кодека — записывается аудиосигнал. Для некоторых форматов кодек можно определить однозначно. Например, для формата MP3 всегда используется кодек MPEG Audio Layer III, а для FLAC могут использоваться разные кодеки.
Таблица с кодеками и примеры форматов, которые поддерживаются в VoiceKit:
Кодеки | |||||
---|---|---|---|---|---|
LINEAR16 (Linear PCM) | WAV, FLAC | + | + | + | + |
ALAW (a-law) | WAV, WMA, FLAC | + | + | + | - |
MULAW (μ-law) | WAV, FLAC | + | + | + | - |
OPUS | Ogg, WebM, MPEG, MP4 | + | + | - | - |
MP3 (MPEG Audio Layer III) | MP3, MPEG, MP4 | + | - | - | - |
Также можно использовать raw-файлы, которые содержат необработанные аудиосигналы. Если аудио находится в контейнере (WAV, Ogg и так далее), перед распознаванием его нужно декодировать — кроме MP3: его можно передавать, как есть.
Метод синтеза речи возвращает raw-файл — если нужно, запакуйте полученные семплы в нужный формат.
Как правильно указать encoding
Чтобы понять, какое значение encoding
нужно указать для ваших аудиофайлов:
Посмотрите на расширение файла:
.mp3
— указывайтеMPEG_AUDIO
;.opus
— указывайтеRAW_OPUS
;.aac
— указывайтеADTS_AAC
.
Воспользуйтесь специальными утилитами, чтобы проверить свойства аудио. Примеры запуска утилит для файла
test.wav
с выводом:утилита
file
:$ file test.wav
test.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 mu-law, mono 48000 Hzутилита
sox
:$ soxi test.wav
Input File : 'test.wav'
Channels : 1
Sample Rate : 48000
Precision : 14-bit
Duration : 00:00:34.31 = 1646649 samples ~ 2572.89 CDDA sectors
File Size : 1.65M
Bit Rate : 384k
Sample Encoding: 8-bit u-lawутилита
ffprobe
из ffmpeg:ffprobe -i
Input #0, wav, from 'test.wav':
Duration: 00:00:34.31, bitrate: 384 kb/s
Stream #0:0: Audio: pcm_mulaw ([7][0][0][0] / 0x0007), 48000 Hz, 1 channels, s16, 384 kb/s
Таблица с важными значениями в выводе утилит и вариантами encoding
для каждого значения:
file | sox | ffprobe | encoding |
---|---|---|---|
A-law | 8-bit a-law | pcm_alaw | ALAW |
mu-law | 8-bit u-law | pcm_mulaw | MULAW |
Microsoft PCM, 16 bit | 16-bit Signed Integer PCM | pcm_s16le (или s16be) | LINEAR16 |
Opus audio | Opus | opus | RAW_OPUS |
MPEG | MPEG audio (layer I, II or III) | mp3 | MPEG_AUDIO |