gpt4 book ai didi

python - 在 Python 中以视觉方式绘制波形文件音频

转载 作者:行者123 更新时间:2023-11-28 18:34:10 32 4
gpt4 key购买 nike

我想弄清楚如何直观地绘制 wav 文件的音频。在我的代码中,如果我执行 wavefile.readframe(-1) 我会绘制整个 wav 文件,我的代码现在的工作方式是我只得到一个银(一帧!)我想要在波形文件的每个图像图上显示 24 帧音频,这样我就可以制作动画了。希望这很清楚。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import wave , sys , os , struct

waveFile = wave.open('mono.wav','r')
length = waveFile.getnframes()
for i in range(0,length):
print i # so we know where we are at.
waveData = waveFile.readframes(i)
fs = waveFile.getframerate()
signal = np.fromstring(waveData, 'Int16')
Time=np.linspace(0, len(signal)/fs, num=len(signal))
plt.axis('off')
plt.plot(Time,signal , 'w')
plt.savefig('signal' + str(i) + '.png' , facecolor='none', edgecolor='none', transparent=True, frameon=False)
plt.close

Code generates just this minute sliver of the audio spectrum

waveFile.readframes(-1) gives me the whole wave file audio spectrum

最佳答案

来自 the documentation :

Wave_read.readframes(n)

Reads and returns at most n frames of audio, as a string of bytes.

所以要读取一 block 24 帧,您只需调用

waveData = waveFile.readframes(24)

当您以读取 ('r') 模式打开文件时,文件指针从第 0 帧开始。当您从文件中读取帧时,您会将文件指针前进相同数量的帧。这意味着重复调用 waveFile.readframes(24) 将产生连续的 24 帧 block ,直到您到达文件末尾 - 无需传递不断变化的索引 i .

要跟踪您在文件中的位置,您可以调用 waveFile.tell() , 并向前或向后跳到第 k 帧,您可以使用 waveFile.setpos(k) .

顺便说一下,这个行为非常符合标准 file objects在 Python 中工作。

关于python - 在 Python 中以视觉方式绘制波形文件音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097795/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com