列出具有基于文件名的重新排序和元文件长度输出的文件-SOXI和BASH

时间:2019-05-05 03:55:31

标签: bash awk sed sox

我有一个脚本,可以使用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”。

  • 文件长度(以秒为单位),已在上面完成。

  • 文件长度(以毫秒为单位),因此秒* 1000。
  • 基于键盘上的键的列表输出,从C-2开始,其中-2是“ C减2”,而不是C2。所以在C0下方有2个八度(24个键)。

控制编号的第一个属性将是文件名称本身中的标记。 “ A6”或“ C#6” 都应基于键的类型(也称为“ C#”)和特定的八度(在这种情况下为“ 6”)具有特定的位置。每个八度中的音符编号和所需位置为:

  1. C
  2. C#
  3. D
  4. D#
  5. E
  6. F
  7. F#
  8. G
  9. G#
  10. A
  11. A#
  12. B

文件从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。非常感谢您的帮助。

0 个答案:

没有答案