前言
libsndfile 是一款开源的音频编解码库,可以进行一些常见的音频格式转换、音频文件拼接、单声道合成为立体声、立体声拆分为单声道等功能。本文将对libsndfile库移植至嵌入式arm进行一些介绍。
软件平台:ubuntu 16.04
移植库:libsndfile1-dev
硬件平台:zedboard开发板(arm)
获取源码
sudo apt-get source libsndfile1-dev
如果未安装dpkg指令,则获取的源码不会被自动解压,需要下载安装dkpg指令手动解压。
dpkg-source -x libsndfile_1.0.25-10ubuntu0.16.04.1.dsc
若已安装dpkg指令,下载源码的时候会自动解压到对应文件夹。
交叉编译
(1) ./configure
./configure -prefix=/home/test/tts-arm/libsndfile --host=arm-linux --target=arm CC=/opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-gcc --disable-external-libs --enable-alsa LDFLAGS="-L/usr/local/arm-alsa/lib" CPPFLAGS="-I/usr/local/arm-alsa/include"
CC是交叉编译工具的绝对路径;
–disable-external-libs是关闭一些外部库,没有这一项会报FLAC库相关的错误;
–enable-alsa是开启alsa库;
LDFLAGS和CPPFLAGS与之前als库移植的路径一致,后面移植到arm开发板上是需要使用alsa库的,alsa库的移植见:
传送门
若直接进行编译安装,移植至开发板运行会报如下错:
sndfile.c 313 assert 'sizeof (sf_count_t) == 8 ' failed!
由于我们是在arm开发板上运行,其为32位,将sndfile.c源文件313行的判断屏蔽,// assert (sizeof (sf_count_t) == 8) ;也可加入printf打印语句进行测试。
SNDFILE*
sf_open (const char *path, int mode, SF_INFO *sfinfo)
{ SF_PRIVATE *psf ;
/* Ultimate sanity check. */
printf("sizeof (sf_count_t) =%d",sizeof (sf_count_t));
// assert (sizeof (sf_count_t) == 8) ;
if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
{ sf_errno = SFE_MALLOC_FAILED ;
return NULL ;
} ;
memset (psf, 0, sizeof (SF_PRIVATE)) ;
psf_init_files (psf) ;
psf_log_printf (psf, "File : %s
", path) ;
copy_filename (psf, path) ;
psf->file.mode = mode ;
if (strcmp (path, "-") == 0)
psf->error = psf_set_stdio (psf) ;
else
psf->error = psf_fopen (psf) ;
return psf_open_file (psf, sfinfo) ;
} /* sf_open */
(2)make
(3)sudo make insatall
移植测试
(1)将安装目录下的bin文件都拷贝至开发板的bin文件下;
cp -ra /home/test/tts-arm/libsndfile-1.0.25/bin/* /bin/
(2)将安装目录下的lib文件都拷贝至开发板的lib文件下;
cp -ra /home/test/tts-arm/libsndfile-1.0.25/lib/* /lib/
(3)指令使用和测试
arm-sndfile-info可以查看音频文件的信息。
arm-sndfile-info Front_Center.wav
使用arm-sndfile-play可以进行音频文件的播放。测试成功调用了alsa库实现了音频播放。
至此,libsndfile1-dev库已成功移植至嵌入式arm开发板。
附件(apt-get 获取源码、安装下载、更新软件包等常用命令)
sudo apt-get install package 安装软件包
sudo apt-get install package - - reinstall 重新安装软件包
sudo apt-get -f install 修复安装软件包"-f = ——fix-missing"
sudo apt-get remove package 删除软件包
sudo apt-get remove package - - purge 删除软件包,包括删除配置文件等
sudo apt-get update 更新源及/etc/apt/sources.list
sudo apt-get upgrade 更新已安装的软件包
sudo apt-get dist-upgrade 升级系统安装的软件包
sudo apt-get dselect-upgrade 使用 dselect 升级
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get clean && sudo apt-get autoclean 清理无用的软件包
sudo apt-get check 检查是否有损坏的依赖
apt-cache search package 搜索软件包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
apt-cache depends package 了解使用依赖
apt-cache rdepends package是查看该软件包被哪些软件包依赖