質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,725
退会済みユーザー

退会済みユーザー

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
とエラーが出ました。

#coding:utf-8

import wave
import numpy as np
#Signal Processing
import scipy.signal
#Fourier Transforms
import scipy.fftpack

import scipy.fftpack.realtransforms

from pylab import *

def wavread(filename):
    wf = wave.open(filename,"r")
    #サンプル周波数を返す
    fs = wf.getframerate()
    #readframes 音声の最も多いフレームを返す
    #getnframes 音声のフレームの数を返す
    x = wf.readframes(wf.getnframes())
    x = np.frombuffer(x,dtype="int16")/32768.0
    wf.close()
    return x,float(fs)

def hz2mel(f):
    """Hzをmelに変換"""
    return 1127.01048 * np.log(f/700.0+1.0)

def mel2hz(m):
    """melをhzに変換"""
    return 700.0 * (np.exp(m/1127.01048)-1.0)

def melFilterBank(fs, nfft, numChannels):
    """メルフィルタバンクを作成"""
    #ある周波数〜ある周波数までの領域を通すフィルタ
    #ナイキスト周波数(Hz)
    fmax = fs/2
    #ナイキスト周波数(mel)
    melmax = hz2mel(fmax)
    #周波数インデックスの最大数
    #global nmax
    #nmax = nfft/2
    #周波数解像度(周波数インデックス1あたりのHz幅)
    df=fs/nfft
    #メル尺度における各フィルタの中心周波数を求める
    dmel = melmax/(numChannels+1)
    melcenters = np.arange(1,numChannels+1)*dmel
    #各フィルタの中心周波数をHzに変換
    fcenters = mel2hz(melcenters)
    #各フィルタの中心周波数を周波数インデックスに変換
    indexcenter = np.round(fcenters/df)
    #各フィルタの開始位置のインデックス
    indexstart = np.hstack(([0],indexcenter[0:numChannels -1]))
    #各フィルタの終了位置のインデックス
    indexstop = np.hstack((indexcenter[1:numChannels],[nmax]))

    filterbank = np.zeros((numChannels,nmax))
    for c in np.arange(0,numChannels):
        #三角フィルタの左の直線の傾きから点を求める
        increment= 1.0/(indexcenter[c]-indexstart[c])
        for i in np.arange(indexstart[c],indexcenter[c]):
            i=int(i)
            filterbank[c,i]=(i - indexstart[c])*increment
        #三角フィルタの直線の傾きから点を求める
        decrement = 1.0/(indexstop[c]-indexcenter[c])
        for i in np.arange(indexcenter[c],indexstop[c]):
            i=int(i)
            filterbank[c,i] = 1.0-((i - indexcenter[c])*decrement)
    return filterbank,fcenters

def preEmphasis(signal,p):
    return scipy.signal.lfilter([1.0,-p],1,signal)

def mfcc(signal,nfft,fs,nceps):
    global nmax
    nmax = int(nfft / 2)
    p = 0.97 
    signal = preEmphasis(signal,p)

    hammingWindow = np.hamming(len(signal))
    signal = signal * hammingWindow

    spec = np.abs(np.fft.fft(signal,nfft))[:nmax]
    fscale =np.fft.fftfreq(nfft,d=1.0/fs)[:nmax]

    numChannels = 20 
    df = fs/nfft 
    filterbank,fcenters = melFilterBank(fs,nfft,numChannels)

    mspec = np.log10(np.dot(spec,filterbank.T))

    ceps = scipy.fftpack.realtransforms.dct(mspec,type=2,norm="ortho",axis=-1)
    return ceps[:nceps]

def get_feature(wavfile,nfft,nceps):
    wav,fs = wavread(wavfile)
    t = np.arange(0.0,len(wav)/fs,1/fs)

    center =len(wav)/2 
    cuttime = 0.8 
    global wavdata
    wavdata = wav[int(center-cuttime/2*fs):int(center+cuttime/2*fs)]

    global time
    time = t[int(center-cuttime/2*fs):int(center+cuttime/2*fs)]
    ceps = mfcc(wavdata,nfft,fs,nceps)
    return ceps.tolist()

if __name__ == "__main__":
    wavfile ="3_7_9.wav"
    nfft=2048
    nceps=12
    tmp=get_feature(wavfile,nfft,nceps)
    print(tmp)

    #波形をプロット
    plot(time*1000,wavdata)
    xlabel("time [ms]")
    ylabel("amplitude")
    savefig("waveform.png")
    show()


Tracebackでは

Traceback (most recent call last):
  File "mfcc.py", line 154, in <module>
    show()
  File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/matplotlib/pyplot.py", line 253, in show
    return _show(*args, **kw)
  File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 193, in __call__
    self.mainloop()
  File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py", line 71, in mainloop
    Tk.mainloop()
  File "/Users/XXX/anaconda/envs/py36/lib/python3.6/tkinter/__init__.py", line 557, in mainloop
    _default_root.tk.mainloop(n)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte


と出ました。
これはグラフのplotがutf-8ではできない、ということでしょうか?
どう直せば良いのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る