teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

自分でやったことの追加

2019/07/09 06:50

投稿

yuuki_yui_
yuuki_yui_

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- write() argument must be str, not bytesというエラー困ってい
1
+ write() argument must be str, not bytesが解決せん
body CHANGED
@@ -30,35 +30,80 @@
30
30
  import matplotlib.pyplot as plt
31
31
  import wave
32
32
  from scipy import fromstring, int16
33
+ from struct import unpack
34
+ import binascii
33
35
 
34
- wavfile = 'test.wav'
36
+ wavfile = '/Users/yuuki/pianola16bit.wav'
37
+
35
38
  wr = wave.open(wavfile, "rb")
36
- ch = wr.getnchannels()
37
- width = wr.getsampwidth()
38
39
  fr = wr.getframerate()
39
- fn = wr.getnframes()
40
+ fn = wr.getnframes()#オーディオフレーム数(サンプリング数*時間)
40
41
  fs = fn / fr
41
-
42
- origin = wr.readframes(wr.getnframes())
42
+ origin = wr.readframes(fn) #bytesオブジェクトに変換
43
- data = origin[:fn]
43
+ data = origin[:fn]#最初からfnまで取得
44
44
  wr.close()
45
- amp = max(data)
46
- print(amp)
47
45
 
48
- #print('len of origin', len(origin))
46
+ y = np.frombuffer(data, dtype="int16") /32768.0 #バイナリをintに変換、正規化
49
- #print('len of sampling: ', len(data))
47
+ x = np.arange(y.shape[0]) / fr*2
50
48
 
51
-
52
- y = np.frombuffer(data, dtype="int16") /32768.0
53
- x = np.linspace(0,fs, fn/2, endpoint=False)
54
49
  plt.plot(x, y)
55
50
  plt.show()
56
51
 
52
+ y = str(binascii.hexlify(y), 'utf-8')
57
53
  Fs = 1/0.01
58
- omega0 = 2
54
+ omega0 = 2 #0.2 #1 #2 #8
55
+
56
+ # (1) Freqを指定してcwt
59
57
  freqs=np.arange(0.1,20,0.025)
60
58
  r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0))
61
59
  rr=np.abs(r)
62
60
 
61
+ plt.rcParams['figure.figsize'] = (10, 6)
62
+ fig = plt.figure()
63
+ ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2])
64
+ ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1)
65
+ ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])
66
+
67
+ ax1.plot(x, y, 'k')
68
+
69
+ img = ax2.imshow(np.flipud(rr), extent=[0, 3,0.1, 20], aspect='auto')
70
+ twin_ax = ax2
71
+ twin_ax.set_yscale('log')
72
+ twin_ax.set_xlim(0, 3)
73
+ twin_ax.set_ylim(0.1, 20)
74
+ ax2.tick_params(which='both', labelleft=False, left=False)
75
+ twin_ax.tick_params(which='both', labelleft=True, left=True, labelright=False)
76
+ fig.colorbar(img, cax=ax3)
77
+ plt.show()
63
78
  ```
79
+
80
+ yがbytes型なので
81
+ y = str(binascii.hexlify(y), 'utf-8')
82
+ とstr型に変換したところ、新たにエラーが出ます。
83
+
84
+ ```エラー
85
+ ValueError Traceback (most recent call last)
86
+ <ipython-input-23-ddd435324d4b> in <module>
87
+ 29 # (1) Freqを指定してcwt
88
+ 30 freqs=np.arange(0.1,20,0.025)
89
+ ---> 31 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0))
90
+ 32 rr=np.abs(r)
91
+ 33
92
+
64
- ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。単純にstr()で変換すれば良いと思ったのですが、変換をしても他のエラーが出てくる始末です。ご教授よろしくお願いいたします。
93
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose)
94
+ 230 scales = wavelet.f0/freqs
95
+ 231 dt = 1./Fs
96
+ --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose)
97
+ 233
98
+ 234
99
+
100
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_a(signal, scales, sampling_scale, wavelet, ppd, verbose)
101
+ 188 padded_signal[-padlen2:] = padfunc(padded_signal[-padlen2:],signal[-1])
102
+ 189
103
+ --> 190 padded_signal[padlen1:-padlen2] = signal
104
+ 191
105
+ 192
106
+
107
+ ValueError: could not convert string to float:
108
+ ```
109
+ ご教授お願いいたします

2

エラーコードを加えました

2019/07/09 06:50

投稿

yuuki_yui_
yuuki_yui_

スコア14

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,20 @@
5
5
  ### 発生している問題・エラーメッセージ
6
6
  byte型ではなく、str型を使うようにエラーが出るのですが、どのように対処していいかわかりません。
7
7
  ```
8
+ TypeError Traceback (most recent call last)
9
+ <ipython-input-6-dc8dddf3b7ab> in <module>
10
+ 33 # (1) Freqを指定してcwt
11
+ 34 freqs=np.arange(0.1,20,0.025)
12
+ ---> 35 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0))
13
+ 36 rr=np.abs(r)
14
+ 37
15
+
16
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose)
17
+ 230 scales = wavelet.f0/freqs
18
+ 231 dt = 1./Fs
19
+ --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose)
20
+ 233
21
+ 234
8
22
  write() argument must be str, not bytes
9
23
  ```
10
24
 
@@ -47,4 +61,4 @@
47
61
  rr=np.abs(r)
48
62
 
49
63
  ```
50
- ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。ご教授よろしくお願いいたします。
64
+ ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。単純にstr()で変換すれば良いと思ったのですが、変換をしても他のエラーが出てくる始末です。ご教授よろしくお願いいたします。

1

エラー個所を書き足しました

2019/07/04 06:57

投稿

yuuki_yui_
yuuki_yui_

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- 音声をpythonでウェブレット変換した
1
+ write() argument must be str, not bytesというエラで困ってます
body CHANGED
@@ -47,4 +47,4 @@
47
47
  rr=np.abs(r)
48
48
 
49
49
  ```
50
- ここから表をプロットするコードを書いていくつもりでしたが、エラーが出てしまい、つまづいています。ご教授よろしくお願いいたします。
50
+ ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。ご教授よろしくお願いいたします。