有没有办法使用 librosa 以字节为单位设置音频文件的样本大小?

Is there a way to set an audio file's sample size in bytes using librosa?

from pydub import AudioSegmentAudioSegment 中,有一个函数 set_sample_width。来自文档:

Creates an equivalent version of this AudioSegment with the specified sample width (in bytes). Increasing this value does not generally cause a reduction in quality. Reducing it definitely does cause a loss in quality. Higher Sample width means more dynamic range.

librosa有没有类似的功能?如果可能的话,我想使用 librosa(而不是 pydub)将它设置为某个值。

简短的回答是否定的

这是更长的答案:

librosa 始终使用浮点数来表示音频,无论原始位深度是多少或您将如何保存它。

来自docs

Load an audio file as a floating point time series.

但是您可以通过 dtype 参数指定数据类型。然后 librosa(通常将加载委托给 SoundFile)也可以将音频表示为某种类型的 int。

加载音频后,您当然可以手动将其转换为不同的位深度,方法是缩放到与您所需的位深度对应的不同范围。

最后一次更改位深度的机会是将音频数据保存到文件中。 librosa 文档建议为此使用 SoundFile write()。它还允许您指定数据类型(在一定程度上):

The data type of data does not select the data type of the written file. Audio data will be converted to the given subtype. Writing int values to a float file will not scale the values to [-1.0, 1.0). If you write the value np.array([42], dtype='int32'), to a subtype='FLOAT' file, the file will then contain np.array([42.], dtype='float32').

希望这对您有所帮助。