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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2630閲覧

write() argument must be str, not bytesが解決できません

yuuki_yui_

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/02 03:20

編集2019/07/09 06:50

前提・実現したいこと

wavファイルをウェーブレット変換したいと考えています。

発生している問題・エラーメッセージ

byte型ではなく、str型を使うようにエラーが出るのですが、どのように対処していいかわかりません。

TypeError Traceback (most recent call last) <ipython-input-6-dc8dddf3b7ab> in <module> 33 # (1) Freqを指定してcwt 34 freqs=np.arange(0.1,20,0.025) ---> 35 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0)) 36 rr=np.abs(r) 37 ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose) 230 scales = wavelet.f0/freqs 231 dt = 1./Fs --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose) 233 234 write() argument must be str, not bytes

該当のソースコード

python3

1from swan import pycwt 2import numpy as np 3import matplotlib.pyplot as plt 4import wave 5from scipy import fromstring, int16 6from struct import unpack 7import binascii 8 9wavfile = '/Users/yuuki/pianola16bit.wav' 10 11wr = wave.open(wavfile, "rb") 12fr = wr.getframerate() 13fn = wr.getnframes()#オーディオフレーム数(サンプリング数*時間) 14fs = fn / fr 15origin = wr.readframes(fn) #bytesオブジェクトに変換 16data = origin[:fn]#最初からfnまで取得 17wr.close() 18 19y = np.frombuffer(data, dtype="int16") /32768.0 #バイナリをintに変換、正規化 20x = np.arange(y.shape[0]) / fr*2 21 22plt.plot(x, y) 23plt.show() 24 25y = str(binascii.hexlify(y), 'utf-8') 26Fs = 1/0.01 27omega0 = 2 #0.2 #1 #2 #8 28 29# (1) Freqを指定してcwt 30freqs=np.arange(0.1,20,0.025) 31r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0)) 32rr=np.abs(r) 33 34plt.rcParams['figure.figsize'] = (10, 6) 35fig = plt.figure() 36ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) 37ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1) 38ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6]) 39 40ax1.plot(x, y, 'k') 41 42img = ax2.imshow(np.flipud(rr), extent=[0, 3,0.1, 20], aspect='auto') 43twin_ax = ax2 44twin_ax.set_yscale('log') 45twin_ax.set_xlim(0, 3) 46twin_ax.set_ylim(0.1, 20) 47ax2.tick_params(which='both', labelleft=False, left=False) 48twin_ax.tick_params(which='both', labelleft=True, left=True, labelright=False) 49fig.colorbar(img, cax=ax3) 50plt.show()

yがbytes型なので
y = str(binascii.hexlify(y), 'utf-8')
とstr型に変換したところ、新たにエラーが出ます。

ValueError Traceback (most recent call last) <ipython-input-23-ddd435324d4b> in <module> 29 # (1) Freqを指定してcwt 30 freqs=np.arange(0.1,20,0.025) ---> 31 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0)) 32 rr=np.abs(r) 33 ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose) 230 scales = wavelet.f0/freqs 231 dt = 1./Fs --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose) 233 234 ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_a(signal, scales, sampling_scale, wavelet, ppd, verbose) 188 padded_signal[-padlen2:] = padfunc(padded_signal[-padlen2:],signal[-1]) 189 --> 190 padded_signal[padlen1:-padlen2] = signal 191 192 ValueError: could not convert string to float:

ご教授お願いいたします

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/07/02 04:40

エラーをTraceback含めて全文示していただけないでしょうか。
yuuki_yui_

2019/07/02 06:02

すみません。以下の通りです。 Traceback (most recent call last) <ipython-input-2-19f50826704f> in <module> 31 omega0 = 2 32 freqs=np.arange(0.1,20,0.025) ---> 33 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0)) 34 rr=np.abs(r) TypeError: write() argument must be str, not bytes
guest

回答1

0

型変換を行ってください
str(変数)

投稿2019/07/02 17:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuki_yui_

2019/07/04 03:03

全ての引数の型変換を行いましたが、新たにエラーが出るだけで解決はしませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問