1

Magenta “Tone Transfer” colab获取一种乐器的音频并重新合成它,使其听起来像另一种乐器。凉爽的。

在此过程中,它会分析您上传的音频的特征: audio_features = ddsp.training.metrics.compute_audio_features(audio)

print这条线会产生各种数组,例如频率(以赫兹为单位):,220.2, 221.0, 300.5...每个数组都代表给定时间片的分析。

我的主要问题是,数组中切片/样本之间的时间间隔是audio_features多少?`(如果它甚至是恒定的......)其次,该间隔是否可以修改?第三(?),可以为每个数组元素获取时间戳吗?

我没有看到任何关于此的 API 文档。

我来自 Javascript;完全是 Python 的初学者,所以如果你从 colab 笔记本或 repo 本身中弄清楚了这一点,这也将有助于理解你是如何发现它的!

如果您好奇,我希望能够使用分析工具进行我自己的自定义音频操作、重新合成和分析,因此我试图ddsp.training.metrics.compute_audio_features(audio)更准确地理解。谢谢!

4

1 回答 1

0

有点简单的答案是:这取决于您上传的音频剪辑。

您需要的第一个直觉是,当音频剪辑以数字方式存储时,由于计算机的性质,它必须被分割成单独的组件。如果每秒这些组件的数量太少,音频对我们来说听起来会很不稳定。但是,如果每秒有足够数量的这些单独的组件,我们将无法感知数字音频剪辑和真实音频之间的差异。那么,这个每秒组件的属性是什么?它被称为采样率。采样率是每秒采集的样本数。

因此,您上传的每个音频剪辑都将具有特定的采样率。在每个样本中,您可以获得诸如音频幅度之类的值。让我举一个 Python 包 Librosa 的例子。

import librosa

# Load an example file in .ogg format
fileName = librosa.util.example_audio_file()
audioData, sampleRate = librosa.load(fileName)

print(audioData)
>>> [ -4.756e-06,  -6.020e-06, ...,  -1.040e-06,   0.000e+00]

print(audioData.shape)
>>> (1355168,)

print(sampleRate)
>>> 22050

# We can use the number of samples and the sampling rate to get the duration of the audio

librosa.core.get_duration(audioData, 22050) # output is seconds

>>> 61.4

audio_features 数组中切片/样本之间的时间间隔是多少?

时间间隔将取决于音频的采样率。如果采样率为每秒 22,050 个样本,则每个样本之间的时间间隔将为 1/22,050 秒。

可以为每个数组元素获取时间戳吗

通过快速搜索,我找到了一个名为 samples_to_time 的 Librosa 函数。

librosa.samples_to_time(np.arange(0, 22050, 512))
>>> array([ 0.   ,  0.023,  0.046,  0.07 ,  0.093,  0.116,  0.139,
        0.163,  0.186,  0.209,  0.232,  0.255,  0.279,  0.302,
        0.325,  0.348,  0.372,  0.395,  0.418,  0.441,  0.464,
        0.488,  0.511,  0.534,  0.557,  0.58 ,  0.604,  0.627,
        0.65 ,  0.673,  0.697,  0.72 ,  0.743,  0.766,  0.789,
        0.813,  0.836,  0.859,  0.882,  0.906,  0.929,  0.952,
        0.975,  0.998])

如果你有兴趣做一个项目,我的建议是查看一些关于音频处理的 Youtube 视频。此外,librosa 库非常方便。如果您打算使用 Python(一个不错的选择),您应该阅读他们的文档。

于 2021-09-17T18:29:02.933 回答