繁体   English   中英

在Python中以视觉方式绘制Wave文件音频

[英]Plot a Wave files Audio Visually In Python

我试图弄清楚如何在视觉上绘制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

代码只生成音频频谱的这一小段

waveFile.readframes(-1)给了我整个波形文件的音频频谱

文档

Wave_read.readframesn

读取并返回最多n帧音频,作为一串字节。

所以要阅读一大块24帧你只需要打电话

waveData = waveFile.readframes(24)

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

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

顺便说一句,这种行为与标准文件对象在Python中的工作方式非常一致。

我记得有点,上面回答了帮助,但我需要做更多的按摩。 因此,如果您需要以实时方式绘制音频,只需调整您想要接收的帧的读取帧。要绘制每个帧,我必须单独制作plt.figure id's此代码片段将使您获得你想去

wave_file = wave.open('mono.wav', 'r')
data_size = wave_file.getnframes()
sample_rate = wave_file.getframerate()


while True:

    waveData = wave_file.readframes(10000)
    signal = np.fromstring(waveData , 'Int16')
    Time=np.linspace(0, len(signal), num=len(signal))

    plt.figure()
    fig = plt.figure(figsize=(xinch,yinch) , frameon=False)
    #fig = plt.figure(frameon=False)
    ax = fig.add_axes([0, 0, 1, 1])
    #ax.axis('off')

    plt.axis('off')
    line = plt.plot(Time,signal , 'w')
    plt.setp(line, linewidth=10)

    plt.savefig('signal' + str(x) + '.png')
    plt.close

    x+= 1
    if  wave_file.tell() == data_size:
            break

会产生这样的帧: 波形图实时例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM