将.aiff转换为SoX中的.wav
我在.aiff格式的目录中有多个文件,并且我想使用SoX将它们转换为.wav。我曾尝试代码上this网站,这是如下将.aiff转换为SoX中的.wav
theFiles = `/Users/me/RainbowAiff/*.aiff`;
for eachFile in $theFiles; do v1=${eachFile%*.aiff};
oldFile="$v1.aiff"; newFile = "$v1.wav";
echo oldFile $oldFile; echo newFile $newFile; sox $oldFile $newFile; done
和this网站,这是如下
for i in `/Users/me/RainbowAiff/ *.aiff`; do echo -e "$i"; sox $i $i.wav; echo -e "$i.wav"; done;
,但我得到了这两种情况下,指出错误消息“无法执行二进制文件”。什么可能是这个错误的来源?
不兼容的二进制文件导致此错误,see this question。
如果file sox
和uname -a
命令的输出指示二进制文件与操作系统(即x86与ARM)之间存在差异,则需要为SoX找到正确的二进制文件。虽然自2015年以来没有发布SoX,但请检查this和this以查找与您的系统兼容的版本。
该问题也与sox的文件属性有关。为了赋予它可执行属性,只需转到sox所在的文件夹,然后运行chmod +x sox
命令(首先需要root访问权限)。
您链接到的两个片段看起来有点粗略,我使用ls
和echo
。 echo -e
可能实际上是给你的语法错误,因为OSX(BSD)echo
没有-e
选项。 (输入man echo
进入终端即可看到)。
我冒昧地组建了一个替代性的单线,基于find
及其-exec
选项。
find -E . -maxdepth 1 -iregex '.*\.(aif|aiff)' -exec bash -c '$0 "$1" "${1%.*}.wav"' sox {} \;
来解释它:
find
:可以找到对任何事情-E
:使extended regex *.
:在当前工作目录开始。可以用相对或绝对路径替换-maxdepth 1
:只在第一个目录层看起来。更换1与2至还找到文件夹中的文件,有3到文件夹中的文件夹中还可以找到文件...
删除此选项将启用全递归(查找文件一路下跌)-iregex
:使用不区分大小写正则表达式'.*\.(aif|aiff)'
:匹配任何在任何长度(*
)任何(.
)开始,后跟一个句点(\.
)和琴弦 'AIF' 或 'AIFF'(或 'AIF',“AIFF ','aiFF'...)((aif|aiff)
)-exec bash -c
:执行以下的非交互的Bash shell
权在这里它变得有点复杂
'$0 "$1" "${1%.*}.wav"'
:这是bash的内部运行通话贝壳。$0
将展开至program name。"$1"
将展开为第一个(在这种情况下,仅限于)参数,如果使用空格,则使用双引号括起来。"${1%.*}.wav"
也将扩展到第一个参数,除了它将在strip away the last period and everything after之前,在最后标记'.wav'之前。有效替换文件扩展名。sox {}
:这些是传递给shell调用的参数。第一个(sox
)是我们要使用的程序,在呼叫中称为$0
。第二({}
)是什么文件find
发现,壳呼叫
这是相当拗口内被称为$1
和我不是专家,所以有可能是在我所一些错误书面的,但大纲应该是坚实的。
*这是OSX具体,不那么漂亮,但更便携的选择是:
find . -maxdepth 1 \(-iname "*.aif" -o -iname "*.aiff" \) -exec bash -c '$0 "$1" "${1%.*}.wav"' sox {} \;
的'文件sox'输出是'Mach-O的64位可执行x86_64'和输出'uname -a'是'14.5.0 Darwin Kernel版本14.5.0:2017年4月11日星期二16:12:42 PDT; root:xnu-2782.50.9.2.3〜1/RELEASE_X86_64 x86_64'这些不兼容吗? (我不熟悉二进制文件)。感谢您的帮助。 – Lisa
我不是Mac用户,不幸的是,我不熟悉它。不过,它们似乎都是64位的。你可以尝试用'su'命令切换到root用户并转到sox所在的目录,然后运行'chmod + x sox'?然后尝试再次运行它,最好使用'sudo sox',并具有root权限。此外,人们似乎也有类似的问题,所以你可能想尝试安装旧版本的sox,这可能是兼容的:https://*.com/questions/13499871/sox-sound-exchange-on- mac-ppc-10-4-installation-questions –
这工作,但现在我收到语法错误。我想这应该是一个单独的问题。谢谢! – Lisa