簡體   English   中英

Raspberry Pi將Pyaudio Wav轉換為Flac 48000hz + Google Speech

[英]Raspberry Pi convert Pyaudio Wav to Flac 48000hz + Google Speech

我面臨以下問題:

我用Pyaudio錄制了聲音,並將其保存為Wav。 Wav文件為48000hz(沒有其他速率起作用(采樣率錯誤,但那是另一個故事))。Wav文件聽起來不錯,現在我想將wav轉換為flac並將其發送到Google語音api。

問題是avconf將我的48khz輸入wav轉換為8khz 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

轉換為Flac:

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

編輯1:

Flac實際上是48khz,我不知道為什么mplayer向我顯示flac是8khz,我在我的PC上播放了它,並且flac非常完美,無論如何google api似乎都存在問題,因為它什么也不返回。 我假設Rasberry上的mplayer的白噪聲問題與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

解決了:我不知道為什么,我打開pi,想測試一下,突然間它沒有任何改變就可以工作了。

泰語為您提供幫助。 來自德國,Flo的問候

我同意-為我努力:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM