是否可以将时间序列从单声道转换为立体声?

Posted

技术标签:

【中文标题】是否可以将时间序列从单声道转换为立体声?【英文标题】:Is it possible to convert a time series from mono to stereo? 【发布时间】:2020-07-01 06:36:07 【问题描述】:

我正在使用 librosa 加载音频文件,如果文件是单声道,我希望将其从单声道转换为立体声。

我确定不需要说,但音频时间序列是“np.ndarray [shape=(n,) or (2, n)]”。本质上,我真的在问我是否有shape=(n,)np.ndarray,如何将其转换为shape=(2,n)?这可能吗?我不熟悉这个术语。

或者,有没有办法只使用 librosa 和 only librosa 作为立体声文件加载文件(如果需要,它会为我进行转换)?存在 librosa.to_mono() 函数而不是 librosa.to_stereo 函数的事实让我感到害怕。

对于上下文,我正在尝试根据一些参数(通道数、样本大小和频率等)标准化音频文件。它们都将转换为.wav 文件。据推测,可以使用wave 库将符合.wav PMC 的文件转换为立体声,但我宁愿本质上不创建两个wav 文件(我想该函数需要重建wav 文件) .

有什么建议吗?

编辑:

好的,所以我发现了np.reshape() 函数。现在的问题是,我将如何重塑数组?

如果我有一个音频时间序列shape=(746572,),那么立体声形状应该是什么?它将是一个本质上是第一个数组两次的二维数组吗?所以

[[1, 2, 3, ..., 746572],
    [1, 2, 3, ..., 746572]]

还是没那么简单?

【问题讨论】:

【参考方案1】:

好吧,我想我明白了。具体来说,对于这个问题,我认为我的假设是数组需要重复两次是正确的。因此,一个简单的:

y = np.array([y, y])

够了。

但是!!!如果尝试使用librosa.output.write_wav() 写入波形文件,则 np 数组需要与 fortran 兼容。所以,

y = np.asfortranarray(np.array([y, y]))

是完整、正确的答案。干杯

如果有更好的答案欢迎评论!

【讨论】:

以上是关于是否可以将时间序列从单声道转换为立体声?的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要将立体声音频转换为单声道以进行 FFT?

Python将立体声.flac转换为单声道

将 16 位立体声转换为 16 位单声道声音

是否可以在不重新编码的情况下将立体声合并/缩混为单声道(m4a 或 opus)

将 .caf 文件从立体声转换为单声道

如何使用 naudio 将立体声 pcm 样本转换为单声道样本