本文介绍音频函数中解码、编码与变换类函数的用法,包括 AUDIO_DECODE、AUDIO_ENCODE、AUDIO_CONVERT_FORMAT、AUDIO_STANDARDIZE、AUDIO_RESAMPLE 和 AUDIO_CONCAT。
本文函数由Python 多模态函数库提供(VVR 11.8+),使用前需在 SQL 作业开头添加:
LOAD MODULE python;
USE MODULES python, core;音频解码与编码函数在编码字节和 float32 PCM 波形之间转换;变换函数直接作用于波形,改变采样率、声道数或拼接多段音频。多数下游音频处理函数(如切分、语音识别)都需要以解码后的波形作为输入。
函数一览
函数 | 类别 | 说明 |
解码 | 将 | |
编码 | 将 float32 PCM 音频波形编码为 WAV、FLAC、AIFF、MP3 或 OGG 字节。适合在波形完成变换、拼接或切分后落盘、传输,或交给只接受编码文件的系统,例如把标准化后的 16 kHz 单声道波形保存为 WAV。 | |
格式转换 | 先解码输入,再按目标格式重新编码为新字节。适合在下游要求特定容器或编码格式时使用,例如将来源不统一的音频归一成 WAV、FLAC 等格式。 | |
变换 | 先转换声道,再重采样,将音频波形统一为指定采样率和声道数。适合在 ASR、VAD 或模型推理前规范不同来源的输入。 | |
变换 | 使用 soxr HQ 改变音频波形的采样率,同时保留原声道数。适合在下游只要求特定采样率、但需要保持原声道布局时使用,例如把 48 kHz 立体声录音转换为 16 kHz 立体声。 | |
变换 | 按数组顺序拼接多个采样率、声道数和采样格式一致的音频波形。适合重组切分片段或合并分段处理结果,例如把并行降噪后的连续片段恢复为一段音频。 |
音频解码、编码与变换
AUDIO_DECODE
把编码音频或音频片段引用解码为 float32 PCM 波形。
AUDIO_DECODE(
audio_input
[, on_error
[, max_decoded_bytes]]
)参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 编码音频字节、URI 或音频片段引用。 |
|
|
| 错误处理策略: |
|
|
| 单行解码后 PCM 张量的最大字节数,必须大于 0 且不超过 |
返回类型: 音频波形 ROW。
SQL 的默认
on_error是'null'。这与 Python DataFrame 接口的默认值不同。解码大小按
frames × channels × 4计算,默认上限为 1 GiB。'null'可处理损坏、截断、空音频和解码大小超限等媒体数据错误;URI 访问错误、非法片段引用、依赖缺失、参数错误和其他内部错误仍会抛出。对片段引用,输出起止时间会按实际采样帧边界换算;对字节输入,来源 URI 和起止时间为
NULL。
SELECT AUDIO_DECODE(audio_bytes) AS waveform
FROM raw_audio;AUDIO_ENCODE
把音频波形编码为指定格式的字节。
AUDIO_ENCODE(audio_input [, format])参数 | 类型 | 默认值 | 说明 |
| 音频波形 | 必填 | 要编码的音频波形。 |
|
|
| 目标格式,大小写不敏感。 |
返回类型: BYTES。输入为 NULL 时返回 NULL。
支持的规范格式和别名如下:
规范格式 | 别名 | 默认编码子类型 |
|
| PCM 16 bit |
| 无 | PCM 16 bit |
|
| MPEG Layer III |
|
| Vorbis |
|
| PCM 16 bit |
实际可用格式还取决于运行环境中的 soundfile/libsndfile。格式或编码子类型不受运行时支持、波形结构非法,或者样本包含 NaN 或无穷值时,函数抛出异常。
SELECT AUDIO_ENCODE(waveform, 'flac') AS flac_bytes
FROM audio_waveforms;AUDIO_CONVERT_FORMAT
把编码音频转换为另一种编码格式。该函数先解码,再按目标格式重新编码。
AUDIO_CONVERT_FORMAT(
audio_input
[, format
[, on_error
[, max_decoded_bytes]]]
)参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 编码音频字节或 URI;不支持音频片段引用和音频波形。 |
|
|
| 目标格式,取值与 |
|
|
| 解码错误处理策略: |
|
|
| 中间 PCM 张量的最大字节数,约束与 |
返回类型: BYTES。
SQL 的默认 on_error 是 'null'。'null' 只处理解码阶段可识别的媒体数据错误;目标格式无效、编码阶段失败、URI 错误、依赖错误和参数错误仍会抛出。输入为 NULL 时返回 NULL。
SELECT AUDIO_CONVERT_FORMAT(audio_bytes, 'flac') AS flac_bytes
FROM raw_audio;AUDIO_STANDARDIZE
把音频波形统一为指定采样率和声道数。
AUDIO_STANDARDIZE(audio_input [, sample_rate [, channels]])参数 | 类型 | 默认值 | 说明 |
| 音频波形 | 必填 | 要标准化的音频波形。 |
|
|
| 目标采样率,必须大于 0。 |
|
|
| 目标声道数,必须大于 0。 |
返回类型: 音频波形 ROW。输入为 NULL 时返回 NULL。
函数先转换声道,再使用 soxr HQ 重采样。多声道转单声道时取声道平均值;单声道转多声道时复制单声道;多声道转为其他多声道数量时,先混为单声道再复制。输出保留输入的 source_uri、start_time_ms 和 end_time_ms。
SELECT AUDIO_STANDARDIZE(AUDIO_DECODE(audio_bytes), 16000, 1)
FROM raw_audio;AUDIO_RESAMPLE
只改变音频波形的采样率,保留声道数。
AUDIO_RESAMPLE(audio_input, sample_rate)参数 | 类型 | 默认值 | 说明 |
| 音频波形 | 必填 | 要重采样的音频波形。 |
|
| 必填 | 目标采样率,必须大于 0。 |
返回类型: 音频波形 ROW。输入为 NULL 时返回 NULL。
函数使用 soxr HQ 重采样,并把输出帧数调整为 ceil(输入帧数 × 目标采样率 / 输入采样率);必要时裁剪或补零。目标采样率等于输入采样率时,函数验证波形后原样返回。输出保留声道数和来源字段。
SELECT AUDIO_RESAMPLE(waveform, 8000)
FROM audio_waveforms;AUDIO_CONCAT
按数组顺序拼接多个音频波形。
AUDIO_CONCAT(audio_inputs)参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 非空的音频波形数组。 |
返回类型: 音频波形 ROW。
输入数组为
NULL时返回NULL,空数组抛出异常。所有波形必须具有相同的采样率、声道数和采样格式,并满足 float32、交错排列的波形约束。
只有一个输入时,原样保留其来源 URI 和起止时间,包括只设置部分来源字段的情况。
多个输入只有在
source_uri全部相同、每段都有完整起止时间,并且后一段起点等于前一段终点时,才保留合并后的来源和起止时间;否则三个来源字段都置为NULL。
SELECT AUDIO_CONCAT(ARRAY[segment_1, segment_2]) AS combined
FROM audio_segments;