我想做什么
我正在尝试转录电报音频消息,使用Mozillas语音转文本引擎deepspeech。
在 16 位 16khz 中使用*.wav
可以完美无缺。
我想添加*.ogg
作品支持,因为 Telegram 将这种格式用于其音频消息。
到目前为止我尝试过什么
到目前为止,我已经尝试了pyogg和声音文件,但没有运气。
声音文件可能完全无法读取作品格式,并且没有 conda 安装pyogg很痛苦。我有过非常奇怪的时刻,它真的崩溃了蟒蛇。
现在,我正在尝试librosa,结果好坏参半。
data, sample_rate = librosa.load(path)
tmp = np.array(data, np.float16)
tmp.dtype = np.int16
int16 = np.array(tmp, dtype=np.int16)
metadata = model.sttWithMetadata(int16)
Deepspeech真的很喜欢np.int16
。model.sttWithMetadata
本质上是对转录员的呼吁。
现在,它确实转录了一些东西,但与我在音频信息中所说的内容相去甚远。
librosa 返回一个数组浮点数,范围-1.0
到1.0
。在int16中,最大值为32767
。因此,您必须乘以缩放信号,然后转换为int16。
data, sample_rate = librosa.load(path)
int16 = (data * 32767).astype(np.int16)
metadata = model.sttWithMetadata(int16)
快速解释为什么 32767:
在 16 位计算中,一个整数可以存储 216 个不同的值。
这意味着,无符号整数的范围可以从 0 到 65,535,两个补码表示形式可以从 -32,768 到 32,767。这意味着,具有 16 个机器人内存地址的处理器一次可以访问 64KB(或 64 * 1024 = 65,436 个唯一地址(的内存。
如果我们的浮点数组具有介于 -1.0 到 1.0 之间的值,我们将信号缩放 32,767 倍,使其与您的深度语音模型期望找到的 16 位地址兼容。