有没有办法使用 librosa 以字节为单位设置音频文件的样本大小?
Is there a way to set an audio file's sample size in bytes using librosa?
在 from pydub import AudioSegment
的 AudioSegment
中,有一个函数 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')
.
希望这对您有所帮助。
在 from pydub import AudioSegment
的 AudioSegment
中,有一个函数 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 valuenp.array([42], dtype='int32')
, to asubtype='FLOAT'
file, the file will then containnp.array([42.], dtype='float32')
.
希望这对您有所帮助。