2013-11-21 2 views
2

Я столкнулся следующие проблемы:Raspberry Pi конвертировать Wav в Pyaudio Flac 48000Hz + Google Speech

Я записал звук с Pyaudio и сохранил его как Wav. Файл Wav составляет 48000hz (Никакой другой тариф работает (ошибка частоты дискретизации, но это другая история)) Wav-файл звучит хорошо, теперь я хочу преобразовать wav в flac, чтобы отправить его на google-речь api.

Проблема заключается в том, что avconf преобразует входной сигнал 48khz wav в 8chz flac (с -ar 48000). Файл flac - это только белый шум, я много раз пробовал, но даже у google нет ответа;)

Примечание: это сработало для меня отлично с другим микрофоном с 16Khz без проблем. Ни с ошибкой частоты дискретизации 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 

Чтобы Преобразовать в Флак:

os.system("avconv -i "+ filename+".wav -y -ar 48000 "+ filename+ ".flac") 

EDIT 1:

Flac на самом деле 48 кГц, я не знаю, почему mplayer показывает мне, что flac - 8 кГц, я играл его на своем компьютере, и flac идеально подходит, во всяком случае, у google api, похоже, есть проблемы с этим, потому что он ничего не возвращает. Я предполагаю, что проблема белого шума 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 

Решено: Я не знаю почему, я повернулся на пи и хотел проверить вокруг и вдруг он работал, ничего не меняя.

Ty для вашей помощи. Привет из германии, Flo

+0

Я просто проверял, что та же команда, против файла WAV 48 кГц и получил FLAC 48 кГц файл с другого конца , Можете ли вы изменить свой вопрос и опубликовать вывод «file » (входной файл) и «file » (что генерируется), пожалуйста? Я хочу получить второе мнение по обоим файлам и исключить возможность неправильного обращения в другом слое. –

+0

Ty я сделал редактирование сообщения, я не знаю, почему некоторые части работают, а другие нет (например, google api, я на 100% уверен, что everythink работает, потому что я ничего не изменил в отношении google api, я просто подключил теперь микрофон и должен был изменить скорость до 48 кГц) –

ответ

1

Я согласен - работает по линии для меня:

[email protected] /mnt/share/Audio/xxxxxx $ file sample_audio.wav 
sample_audio.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 8000 Hz 
[email protected] /mnt/share/Audio/xxxxxx $ file sample_audio.flac 
sample_audio.flac: FLAC audio bitstream data, 16 bit, stereo, 48 kHz, 9131406 samples