質問編集履歴
2
現状図と理想図を加え、要点だけを書き足しました。余計な説明は省きました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,10 +1,28 @@
|
|
1
|
-
###
|
1
|
+
###問題
|
2
2
|
|
3
3
|
Pythonで以下サイト様を参考に類似楽曲システムを作っている最中です。
|
4
4
|
|
5
5
|
http://aidiary.hatenablog.com/entry/20121014/1350211413
|
6
6
|
|
7
|
-
このサイトでは指定したディレクトリ直下のmp3フォルダを探索してそれぞれの形式に変換してい
|
7
|
+
このサイトでは指定したディレクトリ直下のmp3フォルダを探索してそれぞれの形式に変換しています。指定したディレクトリの最下層まで探索してくれたら便利だなぁと思ってコードを作り変えているのですが、うまく組み合わせられません。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
###やりたいこと
|
12
|
+
|
13
|
+
現在のコードでは、こうなります。
|
14
|
+
|
15
|
+
![現在の状態](6c7af691569aa01b9342b408769ca929.png)
|
16
|
+
|
17
|
+
↑これを
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
![理想状態](4f28dde772f354cf363b792d3a230640.png)
|
22
|
+
|
23
|
+
↑こうしたいです。こうするとmfccファイルとrawファイルが作れます。
|
24
|
+
|
25
|
+
コードをどう修正するとmfcc-mp3-raw-...といった感じにできるのでしょう?
|
8
26
|
|
9
27
|
|
10
28
|
|
@@ -143,59 +161,3 @@
|
|
143
161
|
continue
|
144
162
|
|
145
163
|
```
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
###これが問題の原因?
|
150
|
-
|
151
|
-
os.walk()では指定したディレクトリを含めたパスになります。↓
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
mp3/
|
156
|
-
|
157
|
-
mp3/.DS_Store
|
158
|
-
|
159
|
-
mp3/A
|
160
|
-
|
161
|
-
mp3/A/.DS_Store
|
162
|
-
|
163
|
-
mp3/A/B
|
164
|
-
|
165
|
-
mp3/A/a.mp3
|
166
|
-
|
167
|
-
mp3/A/B/.DS_Store
|
168
|
-
|
169
|
-
mp3/A/B/b.mp3
|
170
|
-
|
171
|
-
mp3/A/B/c.mp3
|
172
|
-
|
173
|
-
mp3/A/B/d.mp3
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
一方、shutil.copytree(src,dst)はコピーしたいディレクトリsrcの内容、つまりsrc以下のディレクトリまたはファイルをdstにコピーするので、上のコードの場合
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
raw/
|
182
|
-
|
183
|
-
raw/.DS_Store
|
184
|
-
|
185
|
-
raw/A
|
186
|
-
|
187
|
-
raw/A/.DS_Store
|
188
|
-
|
189
|
-
raw/A/B
|
190
|
-
|
191
|
-
raw/A/B/.DS_Store
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
のようになります。
|
196
|
-
|
197
|
-
os.walk()でトップディレクトリをAに変更するか、copytreeでディレクトリのをrawとAの間にmp3というディレクトリを入れることによって解決できると思われます。
|
198
|
-
|
199
|
-
しかしどう実装すれば実現するかが分からないです。
|
200
|
-
|
201
|
-
コードをどう変えればいいのか、わかる方いれば宜しくお願いします。
|
1
文を修正しました
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Pythonの
|
1
|
+
Pythonの探索システムで詰まっています
|
test
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
ここに質問したいことを詳細に書いてください
|
4
|
-
|
5
|
-
|
3
|
+
Pythonで以下サイト様を参考に類似楽曲システムを作っている最中です。
|
6
4
|
|
7
5
|
http://aidiary.hatenablog.com/entry/20121014/1350211413
|
8
6
|
|
9
|
-
このサイトでは指定したディレクトリ直下のmp3フォルダを探索してそれぞれの形式に変換しているのですが、指定したディレクトリの最下層まで探索してくれるコードに書きかえようとしています。
|
7
|
+
このサイトでは指定したディレクトリ直下のmp3フォルダを探索してそれぞれの形式に変換しているのですが、指定したディレクトリの最下層まで探索してくれるコードに書きかえようとしていますが、うまく組み合わせられません。
|
10
8
|
|
11
9
|
|
12
10
|
|
@@ -42,6 +40,8 @@
|
|
42
40
|
|
43
41
|
###該当のソースコード
|
44
42
|
|
43
|
+
拡張子変換についての関数とかは関係なさそうなので、問題がありそうな部分だけ載せておきます。
|
44
|
+
|
45
45
|
```Python
|
46
46
|
|
47
47
|
#coding:utf-8
|
@@ -52,100 +52,6 @@
|
|
52
52
|
|
53
53
|
import shutil
|
54
54
|
|
55
|
-
from distutils.dir_util import copy_tree
|
56
|
-
|
57
|
-
# mp3_to_mfcc.py
|
58
|
-
|
59
|
-
# MP3からMFCCを抽出
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
def mp3ToRaw(mp3File, rawFile):
|
64
|
-
|
65
|
-
# mp3を16kHz,32bitでリサンプリング
|
66
|
-
|
67
|
-
os.system("lame --resample 16 -b 32 -a '%s' temp.mp3" % mp3File)
|
68
|
-
|
69
|
-
os.system("lame --decode temp.mp3 temp.wav")
|
70
|
-
|
71
|
-
os.system("sox temp.wav %s" % rawFile)
|
72
|
-
|
73
|
-
os.remove("temp.mp3")
|
74
|
-
|
75
|
-
os.remove("temp.wav")
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
def calcNumSample(rawFile):
|
82
|
-
|
83
|
-
#1サンプルはshort型なので ファイルサイズ / 2 する
|
84
|
-
|
85
|
-
filesize = os.path.getsize("temp.raw")
|
86
|
-
|
87
|
-
numsample = filesize / 2
|
88
|
-
|
89
|
-
return numsample
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
def extractCenter(inFile, outFile, period):
|
96
|
-
|
97
|
-
# 波形のサンプル数を求める
|
98
|
-
|
99
|
-
numSample = calcNumSample(inFile)
|
100
|
-
|
101
|
-
print "DD"
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
fs = 16000
|
106
|
-
|
107
|
-
center = numSample / 2
|
108
|
-
|
109
|
-
start = center - fs*period
|
110
|
-
|
111
|
-
end = center + fs*period
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
if start < 0:
|
116
|
-
|
117
|
-
start = 0
|
118
|
-
|
119
|
-
if end > numSample - 1:
|
120
|
-
|
121
|
-
end = numSample - 1
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
# SPTKのbcutコマンドで切り出す
|
126
|
-
|
127
|
-
os.system(" bcut +s -s %d -e %d < '%s' > '%s' " % (start, end, "temp.raw", rawFile))
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
def calcMFCC(rawFile, MFCCFile):
|
134
|
-
|
135
|
-
#fs = 16000
|
136
|
-
|
137
|
-
#Frames = 400 sample
|
138
|
-
|
139
|
-
#Shift_width = 160 sample
|
140
|
-
|
141
|
-
#Channels = 40
|
142
|
-
|
143
|
-
#MFCC = 19 dimension + Energy
|
144
|
-
|
145
|
-
#
|
146
|
-
|
147
|
-
os.system("x2x +sf < '%s' | frame -l 400 -p 160 | mfcc -l 400 -f 16 -n 40 -m 19 -E > '%s'" % (rawFile, MFCCFile))
|
148
|
-
|
149
55
|
|
150
56
|
|
151
57
|
def find_all_files(mp3Dir):
|
@@ -240,7 +146,7 @@
|
|
240
146
|
|
241
147
|
|
242
148
|
|
243
|
-
###原因
|
149
|
+
###これが問題の原因?
|
244
150
|
|
245
151
|
os.walk()では指定したディレクトリを含めたパスになります。↓
|
246
152
|
|
@@ -290,6 +196,6 @@
|
|
290
196
|
|
291
197
|
os.walk()でトップディレクトリをAに変更するか、copytreeでディレクトリのをrawとAの間にmp3というディレクトリを入れることによって解決できると思われます。
|
292
198
|
|
293
|
-
|
199
|
+
しかしどう実装すれば実現するかが分からないです。
|
294
|
-
|
200
|
+
|
295
|
-
宜しくお願いします。
|
201
|
+
コードをどう変えればいいのか、わかる方いれば宜しくお願いします。
|