我想将 .au 音频数据集转换为 .wav 。它存储在文件夹中的流派(流派 - >摇滚,爵士,金属等)。我可以使用命令
找到音频文件find -type f -name '*.au'
但我不知道如何将该列表传递给sox。该列表也在开头附加了子目录名。如何删除它?
答案 0 :(得分:1)
不是专家;拿一小撮盐:
使用awk将find
的输出转换为sox
命令。然后将这些命令作为字符串传递给bash,这将解释它们(就好像你给了他们一个脚本):
find -type f -name '*.au' | awk '{printf "sox [your format options] %s %s\n",$0,$0".wav" }' | bash
我认为,更优雅且可能更好的解决方案是使用xargs将awk的输出转换为sox的参数;类似的东西:
find -type f -name '*.au' | awk '{printf "[your format options] %s %s\n",$0,$0".wav" }' | xargs sox
但我不确定如何使用xargs,所以......如果你想使用它,你可能需要充实细节。
该列表也在开头附加了子目录名称。如何删除它?
为什么要删除它?您需要它来引用目录中的文件。 Aynway,你可以使用这样的东西而不是找到:
ls Files/relationship/ | grep '\.old'
答案 1 :(得分:0)
有问题的文件夹是从数据集genres.tar.gz中提取的,可从此处获取 - http://opihi.cs.uvic.ca/sound/genres.tar.gz
我得到了目录中所有文件的列表"流派"使用查找并将其存储在文件中。
find -type f -name' * .au' > names.txt中
此列表未排序,因此我在python中打开它,读取每一行,将其附加到列表中,对其进行排序,然后将该列表保存在此文件中。
使用此循环,将每个文件转换为.wav,虽然我无法恢复文件名,因此使用变量重命名它们。
a = 0 #Integer。 读线;做sox" $ line" " $一个"的.wav;让" a + = 1&#34 ;;完成< names.txt