美文网首页音、視頻編解碼iOS开发
使用opencore_amr实现WAV 转 AMR (8Khz,

使用opencore_amr实现WAV 转 AMR (8Khz,

作者: 77168ddcf2c6 | 来源:发表于2016-06-17 16:02 被阅读2339次

    由于公司正在做声纹方面的开发,所以需要对语音数据做压缩,目前想到了三种压缩方式,1是AMR,2是Speex,3是Opus,这里先说第一种方式,在iOS4.0之前是可以进行amr格式的录音的,后来苹果取消了这个声音格式,但是可以使用opencore-amr来将wav格式转换为amr格式。

    目前网上的例子大多数都是8Khz采样率的wav文件转AMR,具体可以参照iOS音频格式之AMR和WAV互转(更新支持64位),这里也要感谢这篇博文的作者黄俊鹏,他给我提供了帮助我才找到了方法。但是我们公司由于对于声音采集样本的要求比较高,所以我们要使用16Khz的采样率,那么问题就出现了,在opencore-amr中并没有提供amr-wb的encode方法,8kHZ使用的opencore-amrnb.a的静态库,其中提供了encode和decode的方法,但是对于16Khz使用的是opencore-amrwb的静态库,其中里面只提供了decode的方法,后来通过其他资料我我才明白encode在另外一个项目vo-amrwbenc里面,如果要使用的话必须要单独编译这个项目才可以,项目下载可以看opencore-amr,所以如果需要将16Khz wav文件转为amr文件,只需要编译这个库然后使用就可以了,如果要解码那么还是需要使用原来的opencore-amr库。

    下面就可以编译vo-amrwebenc

    1.首先新建一个文件夹,将下载到的vo-amrwbenc-0.1.3.tar.gz压缩包放到里面,然后进入这个文件夹,在里面创建build.sh文件,将以下脚本粘贴到文件里面

    #!/bin/sh
    
    set -xe
    
    VERSION="0.1.3"
    
    LIBSRCNAME="vo-amrwbenc"
    
    CURRENTPATH=`pwd`
    
    mkdir -p "${CURRENTPATH}/src"
    
    tar zxvf ${LIBSRCNAME}-${VERSION}.tar.gz -C "${CURRENTPATH}/src"
    
    cd "${CURRENTPATH}/src/${LIBSRCNAME}-${VERSION}"
    
    # 设置环境变量并创建lib-ios文件夹,后续生成的.a类库都会放在这个文件夹里边
    
    DEST="${CURRENTPATH}/lib-ios"
    
    mkdir -p "${DEST}"
    
    ARCHS="armv7 armv7s arm64 i386 x86_64"
    
    LIBS="libvo-amrwbenc.a"
    
    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 ****************"
    
    # 编译 $arch 环境的类库(amr类型类型)
    
    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 \
    
    --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
    

    2.修改build.sh的权限,打开终端,cd到新建的文件夹,使用命令 chmod 777 build.sh 修改权限。

    3.修改完成之后在终端执行 ./build.sh 就会在vo-amrwbenc里面生成一个lib-ios文件夹,里面就包含了libvo-amrwbenc.a的静态库和enc_if_h的头文件。

    最后我已经将编译好的项目放到github上面

    vo-amrwbenc编译

    相关文章

      网友评论

        本文标题:使用opencore_amr实现WAV 转 AMR (8Khz,

        本文链接:https://www.haomeiwen.com/subject/pnsvdttx.html