前提・実現したいこと
pysptkを使ってwavファイルを読み込んで解析して、そのデータをwavファイルを復元したい。
発生している問題・エラーメッセージ
読み込むファイルがモノラルだった場合は問題なく実行できるが、ステレオファイルを使うと失敗した。
そこで、ステレオをモノラルに変換してみたが、それでもエラーが出る。
RuntimeError: failed to compute mgcep; error occured in theq
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3import numpy as np 4import pysptk 5import librosa 6import librosa.display as disp 7import wave 8import audioop 9from pylab import * 10from scipy.io import wavfile 11from pysas import excite 12from pysptk.synthesis import MGLSADF, Synthesizer 13 14def GetWaveChannels(filename): 15 wr=wave.open(filename, 'rb') 16 ch=wr.getnchannels() 17 sw=wr.getsampwidth() 18 wr.close() 19 return ch, sw 20 21def pplot(sp,envelope,title='no title'): 22 plot(sp, color='blue', linewidth=2) 23 plot(20.0/np.log(10)*envelope, color='red', linewidth=3) 24 xlim(0,len(sp)) 25 26wavefile='materials/stereo.wav' 27 28fs,x=wavfile.read(wavefile) 29ch,sw=GetWaveChannels(wavefile) 30if ch==2: #ステレオならモノラルに変換 31 x=np.frombuffer(audioop.tomono(x, sw, 1, 1), dtype=np.int16) 32 33frame_length=1024 34hop_length=80 35order=25 36alpha=0.41 37stage=5 38ganma=-1.0/stage 39 40frames=librosa.util.frame(x, frame_length=frame_length, hop_length=hop_length).astype(np.float64).T 41frames*=pysptk.hamming(frame_length) 42 43f0=pysptk.swipe(x.astype(np.float64), fs=fs, hopsize=hop_length, min=50, max=500) 44gen=excite.ExcitePulse(fs, hop_length, False) 45sourceExcitation=gen.gen(f0) 46 47mc=np.apply_along_axis(pysptk.mgcep, 1, frames, order, alpha, ganma) 48#このmcがメルケプストラムデータになる 49 50#sp=pysptk.mgc2sp(mc, alpha, ganma, frame_length) 51#logH=np.apply_along_axis(pysptk.mgc2sp, 1, mc, alpha, 0.0, frame_length).real 52#このlogHがスペクトラル包絡データになる, 53#""" 54 55""" 56#解析結果をwavファイルに変換する。 57b=np.apply_along_axis(pysptk.mgc2b, 1, mc, alpha, ganma) 58synthe=Synthesizer(MGLSADF(order=order, alpha=alpha, stage=stage), hop_length) 59xSynthe=synthe.synthesis(sourceExcitation, b).astype(np.int16) 60 61wavfile.write('xsynthe.wav', fs, xSynthe) 62#"""
補足情報(FW/ツールのバージョンなど)
・環境
win10 64bit
Anaconda3(Spyder)
・pysptkについて
http://r9y9.github.io/blog/2015/09/06/pysptk/
どうやればステレオでも処理ができるのか教えてください。
あなたの回答
tips
プレビュー