Есть ли какой-либо способ исправить проблему с struct.error? (структурная ошибка: для распаковки требуется буфер размером 12 байт)

#python #struct #decode #wav #unpack

Вопрос:

 def decode_wav(wave):
    offset = 0
    riff, size, fformat = struct.unpack('<4sI4s', wave[offset:offset   12])
    offset  = 12
    # print("Riff: %s, Chunk Size: %i, format: %s" % (riff, size, fformat))
    (omitted below, skip)
    return np.array(list(zip(*data))).astype(np.float32) / np.math.pow(2, bps - 1), samplerate, channels

signal, sample_rate, channel_count = decode_wav(wave)
 

Следующая ошибка возникает при получении и декодировании файла wav в байтовом формате с сервера:

 Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/grpc/_server.py", line 443, in _call_behavior
    response_or_iterator = behavior(argument, context)
  
File "/ip_boundary/ip_bound_server.py", line 32, in GetBoundary
    signal, sample_rate, channel_count = decode_wav(wave)
  
File "/ip_boundary/pause_times.py", line 16, in decode_wav
riff, size, fformat = struct.unpack('<4sI4s', wave[offset:offset   12])

struct.error: unpack requires a buffer of 12 bytes
 

Это нормально работало при локальном тестировании, но есть ли проблемы при отправке и получении на сервере?

Или, может быть, что-то не так с форматом файла wav?

В чем причина этого и как это исправить?

Комментарии:

1. Вы передаете что-то короче 12 байт как wave . Вы упомянули «отправка и получение на сервере» — вы уверены, что действительно получили весь файл, прежде чем вызывать эту функцию? Один вызов .recv() не вернет какой-либо определенный объем данных, он просто выдаст вам то, что было получено в данный момент.