Audio 在SoX中将.aiff转换为.wav

Audio 在SoX中将.aiff转换为.wav,audio,sox,Audio,Sox,我在一个目录中有多个.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 $o

我在一个目录中有多个.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
for i in `/Users/me/RainbowAiff/ *.aiff`; do echo -e "$i"; sox $i $i.wav; echo -e "$i.wav"; done;
和网站,如下所示

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
for i in `/Users/me/RainbowAiff/ *.aiff`; do echo -e "$i"; sox $i $i.wav; echo -e "$i.wav"; done;

但在这两种情况下,我都会收到一条错误消息,上面写着“无法执行二进制文件”。此错误的来源可能是什么?

不兼容的二进制文件导致此错误

如果
文件sox
uname-a
命令的输出表明二进制文件与您的操作系统(即x86与ARM)之间存在差异,则需要为sox找到正确的二进制文件。尽管自2015年以来没有SoX版本,但请检查并查找与您的系统兼容的版本


问题还与sox的文件属性有关。为了给它可执行属性,只需转到sox所在的文件夹并运行
chmod+xsox
命令(首先需要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 {} \;
要解释它:

  • 查找
    :可以查找任何内容

  • -E
    :启用*

  • :在当前工作目录中启动。可替换为相对路径或绝对路径

  • -maxdepth 1
    :仅在第一个目录层中查找。将1替换为2以同时查找文件夹中的文件,将3替换为同时查找文件夹中文件夹中的文件…
    删除此选项将启用完全递归(一直向下查找文件)

  • -iregex
    :使用不区分大小写的正则表达式

  • .*(aif | aiff)
    :匹配以任何长度(
    *
    )的任何(
    )开头的任何内容,后跟句点(
    .
    )和字符串“aif”或“aiff”(或“aif”、“aiff”、“aiff”…)(
    (aif | aiff)

  • -execbash-c
    :在非交互式bash shell中执行以下操作

就在这里,事情变得有点复杂了

  • “$0”$1”“${1%.*}.wav”
    :这是要在bash shell中运行的调用<代码>$0将扩展到<代码>“$1”将扩展到第一个(在本例中仅此)参数,在空格处用双引号括起来
    “${1%.*}.wav”
    也将扩展到第一个参数,但在结尾标记“.wav”之前,它将扩展到第一个参数。有效地替换文件扩展名

  • sox{}
    :这些是传递给shell调用的参数。第一个(
    sox
    )是我们想要使用的程序,在调用中称为
    $0
    。第二个(
    {}
    )是任何
    find
    找到的文件,在shell调用中称为
    $1

这是一个相当多的口头禅,我不是专家,所以我写的东西可能有一些错误,虽然总的大纲应该是坚实的

*这是OSX特有的,一个不那么漂亮但更便于携带的选项是:


文件sox
的输出是
Mach-O 64位可执行x86_64
uname-a
的输出是
14.5.0达尔文内核版本14.5.0:Tue Apr 11 16:12:42 PDT 2017;root:xnu-2782.50.9.2.3~1/RELEASE_X86_64 X86_64
这些是否不兼容?(我不熟悉二进制文件)。谢谢你的帮助。我不是Mac用户,不幸的是,我对它不熟悉。不过,它们似乎都是64位。您是否可以尝试使用
su
命令切换到root用户并转到sox所在的目录,然后运行
chmod+x sox
?然后再次尝试运行它,最好是使用root权限使用
sudosox
。另外,人们在Mac中似乎也有类似的问题,所以您可能想尝试安装一个较旧版本的sox,它可能是兼容的:这是可行的,但现在我收到了一个语法错误。我想这应该是一个单独的问题。非常感谢。不客气。请问:
chmod+xsox
或安装旧版本是否有助于运行它?我问的原因是我可以编辑我的答案,使其涵盖所有相关步骤。
chmod+x sox
似乎是有效的,或者至少给我一个不同的错误消息。