声波的最小表示?
Minimal representation of a sound wave?
我想从音轨中提取一个一维的单一矢量,简单地表示它在给定时间的 "volume" 或 "intensity"(我不确定这个术语)。
以可用样本为例:
wget https://freewavesamples.com/files/Ensoniq-ESQ-1-Sympy-C4.wav
并将其转换为 mono
:
ffmpeg -i Ensoniq-ESQ-1-Sympy-C4.wav -acodec pcm_s16le -ac 1 -ar 44100 audio_test.wav
我从一个 related Q&A thread 中收集到这种可视化声波的方法:
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
input_data = read("audio_test.wav")
audio = input_data[1]
plt.plot(audio)
plt.ylabel("Amplitude")
plt.xlabel("Time")
plt.title("Sample Wav")
plt.show()
"positive"和"negative"两边相当对称但不完全对称。有没有办法将它们合并成一个 "positive" 行?如果是,我如何从 audio
变量中提取这些数据点?
非常感谢您的帮助!
根据 @anerisgreat 和一位同事的建议,我找到了这个解决方案(这对更大的音频样本更有意义):
wget https://file-examples.com/wp-content/uploads/2017/11/file_example_WAV_10MG.wav
ffmpeg -i file_example_WAV_10MG.wav -acodec pcm_s16le -ac 1 -ar 44100 audio_test.wav
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
def positive_enveloppe(wav_dat):
freq = wav_dat[0]
pts = np.absolute(wav_dat[1])
pos_env = np.zeros(len(pts) // freq + int(bool(len(pts) % freq)))
env_idx, pts_idx = 0, 0
while pts_idx < len(pts):
sub_ar = pts[pts_idx:pts_idx+freq]
mov_avg = np.mean(sub_ar)
pos_env[env_idx] = mov_avg
pts_idx += freq
env_idx += 1
return pos_env
input_data = read("audio_test.wav")
enveloppe_data = positive_enveloppe(input_data)
plt.plot(enveloppe_data)
plt.show()
产量:
我想从音轨中提取一个一维的单一矢量,简单地表示它在给定时间的 "volume" 或 "intensity"(我不确定这个术语)。
以可用样本为例:
wget https://freewavesamples.com/files/Ensoniq-ESQ-1-Sympy-C4.wav
并将其转换为 mono
:
ffmpeg -i Ensoniq-ESQ-1-Sympy-C4.wav -acodec pcm_s16le -ac 1 -ar 44100 audio_test.wav
我从一个 related Q&A thread 中收集到这种可视化声波的方法:
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
input_data = read("audio_test.wav")
audio = input_data[1]
plt.plot(audio)
plt.ylabel("Amplitude")
plt.xlabel("Time")
plt.title("Sample Wav")
plt.show()
"positive"和"negative"两边相当对称但不完全对称。有没有办法将它们合并成一个 "positive" 行?如果是,我如何从 audio
变量中提取这些数据点?
非常感谢您的帮助!
根据 @anerisgreat 和一位同事的建议,我找到了这个解决方案(这对更大的音频样本更有意义):
wget https://file-examples.com/wp-content/uploads/2017/11/file_example_WAV_10MG.wav
ffmpeg -i file_example_WAV_10MG.wav -acodec pcm_s16le -ac 1 -ar 44100 audio_test.wav
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
def positive_enveloppe(wav_dat):
freq = wav_dat[0]
pts = np.absolute(wav_dat[1])
pos_env = np.zeros(len(pts) // freq + int(bool(len(pts) % freq)))
env_idx, pts_idx = 0, 0
while pts_idx < len(pts):
sub_ar = pts[pts_idx:pts_idx+freq]
mov_avg = np.mean(sub_ar)
pos_env[env_idx] = mov_avg
pts_idx += freq
env_idx += 1
return pos_env
input_data = read("audio_test.wav")
enveloppe_data = positive_enveloppe(input_data)
plt.plot(enveloppe_data)
plt.show()
产量: