Ошибка struct.unpack только на последней итерации цикла while - PullRequest
0 голосов
/ 31 марта 2020

Я хочу сделать анализ моего аудио файла в реальном времени, при преобразовании из двоичного файла wav в int с помощью struct.unpack я получаю ошибку:

 data_int =struct.unpack(format, data)
struct.error: unpack requires a buffer of 4096 bytes

Каждый раз, когда я изменяю Аудиоформат или частота, соответствующие размеру буфера 4096, увеличиваются в 2 раза или что-то в этом роде.

Странно то, что в то время как l oop, я не вижу ошибок только на последней итерации, пока l oop и тогда я не могу выйти из этого.

import numpy as np
import pyaudio
import matplotlib.pyplot as plt
import wave
import argparse
from struct import *
import struct

#Get file
filename = 'snare16.wav'  

# Set chunk size of 1024 samples per data frame
chunk = 1024

# Open the sound file
wf = wave.open(filename, 'rb')

# Create an interface to PortAudio
p = pyaudio.PyAudio()

# Open a .Stream object to write the WAV file to
stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = wf.getframerate(),
                output = True)

# Read data in chunks
data = wf.readframes(chunk)

#Convert binary numbers into int (Bit-Depth)
count = len(data)/2
format = "%dh"%(count) #results in '2048h' as format: 2048 short

# Play the sound by writing the audio data to the stream
while data != '':
#play audio
    stream.write(data)

#Read the chunk each rate
    data = wf.readframes(chunk)

#Convert data into np array, i.e integers
    data_int =struct.unpack(format, data)
...