質問編集履歴

3

自分でやったことの追加

2019/07/09 06:50

投稿

yuuki_yui_
yuuki_yui_

スコア14

test CHANGED
@@ -1 +1 @@
1
- write() argument must be str, not bytesというエラー困ってい
1
+ write() argument must be str, not bytesが解決せん
test CHANGED
@@ -62,47 +62,37 @@
62
62
 
63
63
  from scipy import fromstring, int16
64
64
 
65
-
65
+ from struct import unpack
66
+
66
-
67
+ import binascii
68
+
69
+
70
+
67
- wavfile = 'test.wav'
71
+ wavfile = '/Users/yuuki/pianola16bit.wav'
72
+
73
+
68
74
 
69
75
  wr = wave.open(wavfile, "rb")
70
76
 
71
- ch = wr.getnchannels()
72
-
73
- width = wr.getsampwidth()
74
-
75
77
  fr = wr.getframerate()
76
78
 
77
- fn = wr.getnframes()
79
+ fn = wr.getnframes()#オーディオフレーム数(サンプリング数*時間)
78
80
 
79
81
  fs = fn / fr
80
82
 
81
-
82
-
83
- origin = wr.readframes(wr.getnframes())
83
+ origin = wr.readframes(fn) #bytesオブジェクトに変換
84
-
84
+
85
- data = origin[:fn]
85
+ data = origin[:fn]#最初からfnまで取得
86
86
 
87
87
  wr.close()
88
88
 
89
- amp = max(data)
89
+
90
-
91
- print(amp)
90
+
92
-
93
-
94
-
95
- #print('len of origin', len(origin))
96
-
97
- #print('len of sampling: ', len(data))
98
-
99
-
100
-
101
-
102
-
103
- y = np.frombuffer(data, dtype="int16") /32768.0
91
+ y = np.frombuffer(data, dtype="int16") /32768.0 #バイナリをintに変換、正規化
104
-
92
+
105
- x = np.linspace(0,fs, fn/2, endpoint=False)
93
+ x = np.arange(y.shape[0]) / fr*2
94
+
95
+
106
96
 
107
97
  plt.plot(x, y)
108
98
 
@@ -110,9 +100,15 @@
110
100
 
111
101
 
112
102
 
103
+ y = str(binascii.hexlify(y), 'utf-8')
104
+
113
105
  Fs = 1/0.01
114
106
 
115
- omega0 = 2
107
+ omega0 = 2 #0.2 #1 #2 #8
108
+
109
+
110
+
111
+ # (1) Freqを指定してcwt
116
112
 
117
113
  freqs=np.arange(0.1,20,0.025)
118
114
 
@@ -122,6 +118,100 @@
122
118
 
123
119
 
124
120
 
121
+ plt.rcParams['figure.figsize'] = (10, 6)
122
+
123
+ fig = plt.figure()
124
+
125
+ ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2])
126
+
127
+ ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1)
128
+
129
+ ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])
130
+
131
+
132
+
133
+ ax1.plot(x, y, 'k')
134
+
135
+
136
+
137
+ img = ax2.imshow(np.flipud(rr), extent=[0, 3,0.1, 20], aspect='auto')
138
+
139
+ twin_ax = ax2
140
+
141
+ twin_ax.set_yscale('log')
142
+
143
+ twin_ax.set_xlim(0, 3)
144
+
145
+ twin_ax.set_ylim(0.1, 20)
146
+
147
+ ax2.tick_params(which='both', labelleft=False, left=False)
148
+
149
+ twin_ax.tick_params(which='both', labelleft=True, left=True, labelright=False)
150
+
151
+ fig.colorbar(img, cax=ax3)
152
+
153
+ plt.show()
154
+
125
- ```
155
+ ```
156
+
157
+
158
+
126
-
159
+ yがbytes型なので
160
+
161
+ y = str(binascii.hexlify(y), 'utf-8')
162
+
163
+ とstr型に変換したところ、新たにエラーが出ます。
164
+
165
+
166
+
167
+ ```エラー
168
+
169
+ ValueError Traceback (most recent call last)
170
+
171
+ <ipython-input-23-ddd435324d4b> in <module>
172
+
173
+ 29 # (1) Freqを指定してcwt
174
+
175
+ 30 freqs=np.arange(0.1,20,0.025)
176
+
177
+ ---> 31 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0))
178
+
179
+ 32 rr=np.abs(r)
180
+
181
+ 33
182
+
183
+
184
+
127
- ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。単純にstr()で変換すれば良いと思ったのですが、変換をしても他のエラーが出てくる始末です。ご教授よろしくお願いいたします。
185
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose)
186
+
187
+ 230 scales = wavelet.f0/freqs
188
+
189
+ 231 dt = 1./Fs
190
+
191
+ --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose)
192
+
193
+ 233
194
+
195
+ 234
196
+
197
+
198
+
199
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_a(signal, scales, sampling_scale, wavelet, ppd, verbose)
200
+
201
+ 188 padded_signal[-padlen2:] = padfunc(padded_signal[-padlen2:],signal[-1])
202
+
203
+ 189
204
+
205
+ --> 190 padded_signal[padlen1:-padlen2] = signal
206
+
207
+ 191
208
+
209
+ 192
210
+
211
+
212
+
213
+ ValueError: could not convert string to float:
214
+
215
+ ```
216
+
217
+ ご教授お願いいたします

2

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

2019/07/09 06:50

投稿

yuuki_yui_
yuuki_yui_

スコア14

test CHANGED
File without changes
test CHANGED
@@ -11,6 +11,34 @@
11
11
  byte型ではなく、str型を使うようにエラーが出るのですが、どのように対処していいかわかりません。
12
12
 
13
13
  ```
14
+
15
+ TypeError Traceback (most recent call last)
16
+
17
+ <ipython-input-6-dc8dddf3b7ab> in <module>
18
+
19
+ 33 # (1) Freqを指定してcwt
20
+
21
+ 34 freqs=np.arange(0.1,20,0.025)
22
+
23
+ ---> 35 r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0))
24
+
25
+ 36 rr=np.abs(r)
26
+
27
+ 37
28
+
29
+
30
+
31
+ ~/venv/lib/python3.7/site-packages/swan/pycwt.py in cwt_f(signal, freqs, Fs, wavelet, ppd, verbose)
32
+
33
+ 230 scales = wavelet.f0/freqs
34
+
35
+ 231 dt = 1./Fs
36
+
37
+ --> 232 return cwt_a(signal, scales, dt, wavelet, ppd, verbose=verbose)
38
+
39
+ 233
40
+
41
+ 234
14
42
 
15
43
  write() argument must be str, not bytes
16
44
 
@@ -96,4 +124,4 @@
96
124
 
97
125
  ```
98
126
 
99
- ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。ご教授よろしくお願いいたします。
127
+ ここから表をプロットするコードを書いていくつもりでしたが、下から2行目の場所でエラーが出てしまい、つまづいています。単純にstr()で変換すれば良いと思ったのですが、変換をしても他のエラーが出てくる始末です。ご教授よろしくお願いいたします。

1

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

2019/07/04 06:57

投稿

yuuki_yui_
yuuki_yui_

スコア14

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