невозможно прочитать файл .WAV с помощью python - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь прочитать FM-сигнал, который записывается в виде файла WAV с помощью GNU radio Companion, с использованием Python. Я прилагаю используемый файл .grc.

Я отчетливо слышу записанный сигнал, но чтение данных дает нулевое значение ([]).

Код питона

import soundfile as sf
data, fs = sf.read('/home/fm_record_RSM_10_01_2019_dat.wav')
for i in data:
    print(i)

это дает

data
     array([], dtype=float64) 
fs 
     96000

Когда используется следующий код,

import wave
input_wave_file= wave.open('/home/fm_record_RSM_10_01_2019_dat.wav', 'r')
nc,sw,fr,nf,ct,cn = input_wave_file.getparams()

возникает другая ошибка, как указано ниже

Error                                     Traceback (most recent call last)
<ipython-input-3-5009fe3506e7> in <module>()
      1 import wave
      2 
----> 3 input_wave_file= wave.open('/home/fm_record_RSM_10_01_2019_dat.wav', 'r')
      4 nc,sw,fr,nf,ct,cn = input_wave_file.getparams()
      5 frame_data = input_wave_file.readframes(5)

~/anaconda3/lib/python3.7/wave.py in open(f, mode)
    508             mode = 'rb'
    509     if mode in ('r', 'rb'):
--> 510         return Wave_read(f)
    511     elif mode in ('w', 'wb'):
    512         return Wave_write(f)

~/anaconda3/lib/python3.7/wave.py in __init__(self, f)
    162         # else, assume it is an open file object already
    163         try:
--> 164             self.initfp(f)
    165         except:
    166             if self._i_opened_the_file:

~/anaconda3/lib/python3.7/wave.py in initfp(self, file)
    131             raise Error('file does not start with RIFF id')
    132         if self._file.read(4) != b'WAVE':
--> 133             raise Error('not a WAVE file')
    134         self._fmt_chunk_read = 0
    135         self._data_chunk = None

Error: not a WAVE file

Может ли кто-нибудь помочь мне выяснить, в чем может быть проблема? Это из-за какой-либо ошибки в настройке блока записи wav в файле .grc или из-за ошибки в файле python? Пожалуйста, помогите

Большое спасибо Msr

1 Ответ

0 голосов
/ 22 января 2019
#! /usr/bin/env python3
import soundfile as sf
import wave
import sys
if len(sys.argv) < 2:
    print("Expected filename.wav on cmdline")
    quit(1)
data, fs = sf.read(sys.argv[1])
for i in range(10):
    print(i)

print('...')
input_wave_file= wave.open(sys.argv[1], 'r')
nc,sw,fr,nf,ct,cn = input_wave_file.getparams()
print('nc', nc) 
print('sw', sw) 
print('fr', fr) 
print('nf', nf) 
print('ct', ct) 
print('cn', cn)
chunk = 1024
data = input_wave_file.readframes(chunk)
print('data[0:10] =', data[0:10])
print('data[0:10] =', end='')
for i in range(10):
    print(data[i],' ',end='')
print('')

В среде linux я поместил вышеупомянутое в файл с именем playsound.py. Затем я выполнил (в командной строке cmdline)

$ chmod +x playsound.py
$ ./playsound.py file.wav
[ 0.06454468  0.05557251]
[ 0.06884766  0.05664062]
[ 0.0552063   0.06777954]
[ 0.04733276  0.0708313 ]
[ 0.05505371  0.065979  ]
[ 0.05358887  0.06677246]
[ 0.05621338  0.06045532]
[ 0.04891968  0.06298828]
[ 0.04986572  0.06817627]
[ 0.05410767  0.06661987]
...
nc 2
sw 2
fr 44100
nf 32768
ct NONE
cn not compressed
data[0:10] = b'C\x08\x1d\x07\xd0\x08@\x07\x11\x07'
data[0:10] =67  8  29  7  208  8  64  7  17  7 

file.wav был существующим файлом .wav, который мне пригодился. Я раньше пробовал для меня в данных: печать (я) как и вы, это тоже сработало, но на выходе было слишком много.

Я думаю, вам следует проверить, что имя файла, которое вы указываете, указывает на действительный файл WAV. Например, путь, который вы указываете, является "/home/filename.wav". Обычно это будет как минимум "/home/username/filename.wav"

...