Raspberry Pi конвертирует Pyaudio Wav в Flac 48000 Гц + Google Speech
Я сталкиваюсь со следующей проблемой:
Я записал звук с помощью Pyaudio и сохранил его как Wav. WAV-файл имеет 48000 Гц (другие частоты не работают (ошибка частоты дискретизации, но это другая история)) WAV-файл звучит хорошо, теперь я хочу преобразовать wav в flac, чтобы отправить его в API Google Speech.
Проблема в том, что avconf преобразует мой входной WAV 48 кГц в 8 кГц (с -ar 48000). Файл flac - просто белый шум, я очень много пробовал, но даже у Google нет ответа;)
Примечание: у меня все работало нормально с другим микрофоном с 16 кГц без проблем. Ни с ошибкой скорости выборки Pyaudios, ни с проблемой avconv.
Вот код:
Запись:
chunk = 2048
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
THRESHOLD = 525 #The threshold intensity that defines silence signal (lower than).
SILENCE_LIMIT = 3 #Silence limit in seconds. The max ammount of seconds where only silence is recorded. When this time passes the recording finishes and the file is delivered.
#open stream
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
print "* listening. CTRL+C to finish manually."
all_m = []
data = ''
rel = RATE/chunk
slid_win = deque(maxlen=SILENCE_LIMIT*rel)
started = False
while (True):
data = stream.read(chunk)
slid_win.append (abs(audioop.avg(data, 2)))
if(True in [ x>THRESHOLD for x in slid_win]):
if(not started):
print "starting record"
started = True
all_m.append(data)
elif (started==True):
print "finished"
#the limit was reached, finish capture and deliver
filename = save_speech(all_m,p)
result=stt_google_wav(filename)
#reset all
started = False
#slid_win = deque(maxlen=SILENCE_LIMIT*rel)
#all_m= []
print "Google STT Done"
stream.close()
p.terminate()
return result
А ТАКЖЕ:
def save_speech(data, p):
filename = 'output_'+str(int(time.time()))
# write data to WAVE file
data = ''.join(data)
wf = wave.open(filename+'.wav', 'wb')
wf.setnchannels(1)
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(48000)
wf.writeframes(data)
wf.close()
print "finished saving wav: %s" % filename
return filename
Чтобы преобразовать во Flac:
os.system("avconv -i "+ filename+".wav -y -ar 48000 "+ filename+ ".flac")
РЕДАКТИРОВАТЬ 1:
Flac на самом деле 48 кГц, я не знаю, почему mplayer показывает мне, что это 8 кГц, я играл на своем компьютере, а flac идеален, в любом случае у API Google, похоже, проблемы с этим, потому что он ничего не возвращает. Я предполагаю, что проблема белого шума mplayer на Rasberry связана с проблемой с Google Api, но я понятия не имею, что это может быть.
WAV файл:
output_1385413929.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hz
Файл Flac:
output_1385413929.flac: FLAC audio bitstream data, 16 bit, mono, 48 kHz, 204800 samples
Решено: я не знаю почему, я включил свой пи и хотел проверить, и вдруг это сработало, ничего не меняя.
Ты за помощь. Привет из Германии, Фло
1 ответ
Я согласен - работает по линии для меня:
me@raspberrypi /mnt/share/Audio/xxxxxx $ file sample_audio.wav
sample_audio.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 8000 Hz
me@raspberrypi /mnt/share/Audio/xxxxxx $ file sample_audio.flac
sample_audio.flac: FLAC audio bitstream data, 16 bit, stereo, 48 kHz, 9131406 samples