我已经能够使用 librosa 读取波形文件,但能够获得频率和振幅列表,其中缺少最重要的部分"时间",我不知道如何进行 raound
import librosa
from matplotlib import pyplot as plt
from librosa import display
import seaborn as sns
sns.set() # Use seaborn's default style to make attractive graphs
plt.rcParams['figure.dpi'] = 100 # Show nicely large images in this notebook
samples, sampling_rate = librosa.load('last.aac')
plt.figure(figsize=(13,4))
librosa.display.waveplot(y = samples, sr = sampling_rate)
plt.xlabel("Time (Seconds)")
plt.ylabel("Amplitude")
plt.title("Time Domain Frequency")
plt.show()
print("sampling rate is :", sampling_rate)
print("Number of samples :", len(samples))
max1 = max(samples*10)
print("Maximum amplitude", round(max1, 2))
min1 = min(samples*10)
print("Minimum amplitude", round(min1, 2))
import pandas as pd
d=pd.DataFrame(samples,columns=["Amplitudes"], index=None)
d.head()
Amplitudes frequencies
0.091039 2756.813965
-0.040613 2427.044189
-0.046945 2347.927002
-0.136473 2323.757080
0.050659 2317.414062
我真正想提取的是下面这个
Time Frequency Amplitude
0 0.00000 -57.72730
0 21.53320 -63.55554
0 43.06641 -85.05077
0 64.59961 -91.29989
0 86.13281 -83.86144
0 107.66602 -81.54240
如果您有采样率(以 Hz 为单位(,则可以使用它在几秒钟内创建索引。 这是一个使用 4 秒音频文件的示例。
import librosa
import pandas as pd
y,sr = librosa.load('myfile.wav')
df = pd.DataFrame(y, columns=['Amplitude'])
df.index = [(1/sr)*i for i in range(len(df.index))]
print(df.head())
print(df.tail())
输出:
Amplitude
0.000000 -0.004855
0.000045 -0.007008
0.000091 -0.005919
0.000136 -0.006276
0.000181 -0.005805
Amplitude
3.999773 0.000892
3.999819 0.000765
3.999864 0.000543
3.999909 0.000428
3.999955 0.000216
索引现在以秒为单位。
请注意,您的示例中没有显示您获得Frequencies
列的位置,并且所有绘图内容都与问题无关,因此您应该修剪一些内容以在 SO 上发布问题。