我已经从Audacity生成了一个440 as的音调,振幅为1,持续1秒,如下所示:

我知道这将在1秒内创建440个峰值,振幅为1。这里我看到它是一个32位文件,44100 to是采样率,这意味着每秒有44100个样本。振幅是1,这是预期的,因为这是我选择的。

我不明白的是,这个振幅的单位是多少?当右击它显示线性(-1到+1)时,有一个选择dB的选项,它显示(0到-60到0),我不明白这是如何转换的!

现在,当我在python scipy中使用这个wav文件来读取wav并获取时间和振幅的值时,如何匹配或获取我读取wav文件时所生成的内容与所看到的内容之间的关系?峰值为振幅32767.987724003342频率439.99002267573695

我在python中使用的代码是
wavFileName ="440Hz.wav"
sample_rate, sample_data = wavfile.read(wavFileName)
print ("Sample Rate or Sampling Frequency is", sample_rate," Hz")
l_audio = len(sample_data.shape)
print ("Channels", l_audio,"Audio data shape",sample_data.shape,"l_audio",l_audio)
if l_audio == 2:
sample_data = sample_data.sum(axis=1) / 2
N = sample_data.shape[0]
length = N / sample_rate
print ("Duration of audio wav file in secs", length,"Number of Samples chosen",sample_data.shape[0])
time =np.linspace(0, length, sample_data.shape[0])
sampling_interval=time[1]-time[0]发布于 2020-12-04 04:14:29
请注意,在audacity中,当您在保存文件之前创建了1秒的音频,并选择了1.0,它显示有符号的16位整数,因此振幅从-1到+1表示PCM格式的WAV文件通过改变有符号整数从最大负数到最大正数来存储原始音频,因为2^16是65536,所以有符号的16位整数范围是-32768到32767,换句话说,从-2^15到( +2^15 -1) ...为了更好地绘制,我建议你选择一个比一秒短得多的时间段,比方说0.1秒…一旦你对此表示同意,然后将其恢复到使用整整一秒的时间,这在有44100个样本的曲线图上是难以想象的
import os
import scipy.io
import scipy.io.wavfile
import numpy as np
import matplotlib.pyplot as plt
myAudioFilename = '/home/olof/sine_wave_440_Hz.wav'
samplerate, audio_buffer = scipy.io.wavfile.read(myAudioFilename)
duration = len(audio_buffer)/samplerate
time = np.arange(0,duration,1/samplerate) #time vector
plt.plot(time,audio_buffer)
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title(myAudioFilename)
plt.show()

这里是0.1秒的440 Hz,使用带符号的16位注意,Y轴的振幅范围与上面提到的最小到最大有符号整数值范围相匹配
https://stackoverflow.com/questions/65132019
复制相似问题