项目需求需要录制音频文件,而amr格式可以将音频文件压缩到很小(wav大小大概是amr的10倍),非常适用于移动端音频传输。在iOS4.0之前是可以直接进行录制amr格式音频的,后来苹果取消了;现在就需要将wav格式转换为amr格式。所以使用到了opencore-amr来进行格式转换。在这里记录一下转换步骤

1.首先下载 opencore-amr(当然也可以找别人编译好的.a文件)

2.执行编译脚本编译opencore-amr

编译脚本参考

参照上面链接的脚本如果i386不能编译成功,添加--host=x86_64-apple-darwin \

以下为修改过的脚本(opencore-amr-0.1.5):

#!/bin/sh

set -xe

VERSION="0.1.5"

SDKVERSION="12.1"

LIBSRCNAME="opencore-amr"

CURRENTPATH=`pwd`

mkdir -p "${CURRENTPATH}/src"

tar zxvf ${LIBSRCNAME}-${VERSION}.tar.gz -C "${CURRENTPATH}/src"

cd "${CURRENTPATH}/src/${LIBSRCNAME}-${VERSION}"

DEVELOPER=`xcode-select -print-path`

DEST="${CURRENTPATH}/lib-ios"

mkdir -p "${DEST}"

ARCHS="armv7 armv7s arm64 i386 x86_64"

# ARCHS="armv7"

LIBS="libopencore-amrnb.a libopencore-amrwb.a"

DEVELOPER=`xcode-select -print-path`

for arch in $ARCHS; do

case $arch in

arm*)

IOSV="-miphoneos-version-min=7.0"

if [ $arch == "arm64" ]

then

IOSV="-miphoneos-version-min=7.0"

fi

echo "Building for iOS $arch ****************"

SDKROOT="$(xcrun --sdk iphoneos --show-sdk-path)"

CC="$(xcrun --sdk iphoneos -f clang)"

CXX="$(xcrun --sdk iphoneos -f clang++)"

CPP="$(xcrun -sdk iphonesimulator -f clang++)"

CFLAGS="-isysroot $SDKROOT -arch $arch $IOSV -isystem $SDKROOT/usr/include -fembed-bitcode"

CXXFLAGS=$CFLAGS

CPPFLAGS=$CFLAGS

export CC CXX CFLAGS CXXFLAGS CPPFLAGS

./configure \

--host=arm-apple-darwin \

--prefix=$DEST \

--disable-shared --enable-static

;;

*)

IOSV="-mios-simulator-version-min=7.0"

echo "Building for iOS $arch*****************"

SDKROOT=`xcodebuild -version -sdk iphonesimulator Path`

CC="$(xcrun -sdk iphoneos -f clang)"

CXX="$(xcrun -sdk iphonesimulator -f clang++)"

CPP="$(xcrun -sdk iphonesimulator -f clang++)"

CFLAGS="-isysroot $SDKROOT -arch $arch $IOSV -isystem $SDKROOT/usr/include -fembed-bitcode"

CXXFLAGS=$CFLAGS

CPPFLAGS=$CFLAGS

export CC CXX CFLAGS CXXFLAGS CPPFLAGS

./configure \

--host=x86_64-apple-darwin \

--prefix=$DEST \

--disable-shared

;;

esac

make > /dev/null

make install

make clean

for i in $LIBS; do

mv $DEST/lib/$i $DEST/lib/$i.$arch

done

done

for i in $LIBS; do

input=""

for arch in $ARCHS; do

input="$input $DEST/lib/$i.$arch"

done

lipo -create -output $DEST/lib/$i $input

done

3.如果编译过程中出现xcrun: error: SDK "iphoneos" cannot be located报错

//给Xcode命令行工具指定路径

$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/

//查看sdk路径

$ xcrun --sdk iphoneos --show-sdk-path

//查看所有可用sdk

$ xcodebuild -showsdks

4.编译成功后,得到如下文件

opencore-amrnb.a是针对8kHZ采样速率的,并提供了encode和decode的方法

opencore-amrwb.a是针对16Khz采样速率的,不过只提供了decode的方法

dd93b96902aa?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

头文件

dd93b96902aa?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

编译后的.a文件

5.网上有很多针对opencore-amr封装的工具类可以使用,核心实现方法都是一样的,下载下来和上面的.a文件、头文件导入到项目中,然后直接调用转换方法即可

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐