我有一个脚本,可以使用bash和sox吐出音频文件的文件名和文件长度。该脚本当前在特定的命名文件夹中循环,并为该文件夹中的每个文件添加一行“文件名,文件长度”。像这样:
A6-poff-pp-1.wav,5.280227
C#6-poff-pp-1.wav,6.946893
D#6-poff-pp-1.wav,7.874490
D6-poff-pp-1.wav,6.946893
这是我当前的脚本cd:s到一个文件夹,列出内容,然后cd:s再次返回到上一个文件夹,然后同样的内容再次显示下一个文件夹:
cd sus-1-poff-01-pp
pwd
for i in $( ls );
do
soxlengthseconds=$(soxi -D $i)
echo $i, $soxlengthseconds
done
cd ../
pwd
cd sus-1-poff-02-p
pwd
for i in $( ls );
do
soxlengthseconds=$(soxi -D $i)
echo $i, $soxlengthseconds
done
我想为每行添加3个新属性,也用逗号分隔:
基于令牌中密钥名称和编号的密钥编号,例如“ C#6”。
文件长度(以秒为单位),已在上面完成。
控制编号的第一个属性将是文件名称本身中的标记。 “ A6”或“ C#6” 都应基于键的类型(也称为“ C#”)和特定的八度(在这种情况下为“ 6”)具有特定的位置。每个八度中的音符编号和所需位置为:
文件从C-2开始,在C0之前有24个音符/键,因此前2个八度应在行1-24上。所以第一个和第二个八度是:
1, C-2, sample-length sec, sample length ms
2, C#-2, sample-length sec, sample length ms
3, D-2, sample-length sec, sample length ms
4, D#-2, sample-length sec, sample length ms
5, E-2, sample-length sec, sample length ms
6, F-2, sample-length sec, sample length ms
7, F#-2, etc…
8, G-2,
9, G#-2,
10, A-2,
11, A#-2,
12, B-2,
13, C-1,
14, C#-1,
15, D-1,
16, D#-1,
17, E-1,
18, F-1,
19, F#-1,
20, G-1,
21, G#-1,
22, A-1,
23, A#-1,
24, B-1,
25, C0,
26, C#0,
27, D0,
28, D#0, … …
我想像上面那样将文件排序到各自的八度,并停止查看G8。那应该是nr /行128。非常感谢您的帮助。