简体   繁体   中英

ValueError: x and y must have same first dimension, but have shapes (2140699,) and (4281398,)

I use miniconda jupyter notebook python and I'm trying to implement a machine (Audio filtering). I got this error and I really don't know how to fix it.

Here I imported libraries that I need with the path of the file:

import wave as we
import numpy as np
import matplotlib.pyplot as plt

dir = r'/home/pc/Downloads/Bubble audios'

Here the fuction that should plot the graph:

def read_wav(wavfile, plots=True, normal=False):
    f = wavfile
    params = f.getparams()
    # print(params)
    nchannels, sampwidth, framerate, nframes = params[:4]
    strData = f.readframes(nframes)  # , string format
    waveData = np.frombuffer(strData, dtype=np.int16) # Convert a string to an int
    # wave amplitude normalization
    if normal == True:
        waveData = waveData*1.0/(max(abs(waveData)))
    # 
    if plots == True:
        time = np.arange(0, nframes ,dtype=np.int16) *(1.0 / framerate)
        plt.figure(dpi=100)
        plt.plot(time, waveData)
        plt.xlabel("Time")
        plt.ylabel("Amplitude")
        plt.title("Single channel wavedata")
        plt.show()
        
    return (Wave, time)

def fft_wav(waveData, plots=True):
    f_array = np.fft.fft(waveData)  # Fourier transform, the result is a complex array
    f_abs = f_array
    axis_f = np.linspace(0, 250, np.int(len(f_array)/2))  # map to 250
    # axis_f = np.linspace(0, 250, np.int(len(f_array))) # map to 250
    if plots == True:
        plt.figure(dpi=100)
        plt.plot(axis_f, np.abs(f_abs[0:len(axis_f)]))
        # plt.plot(axis_f, np.abs(f_abs))
        plt.xlabel("Frequency")
        plt.ylabel("Amplitude spectrum")
        plt.title("Tile map")
        plt.show()
    return f_abs

And here I call the function with the file that I want to be read and plotted.

f = we.open(dir+r'/Ars1_Aufnahme.wav', 'rb')
Wave, time = read_wav(f)

The error that I got:

ValueError: x and y must have same first dimension, but have shapes (2140699,) and (4281398,)

I tried to use np.reshape but it didn't work or I might have used it wrong. So, any advice?

it's seems that your time is 1/2 of the size of your wave. Maybe your nframe is too short. If you do nframses = 2*nframes what is the error ?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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