[Ffmpeg]语音文件采样率转换,左右双声道数据分离

单声道-多声道互转
ffpmeg -i test.mp3 -ar 16000 -ac 2 test.wav
test.mp3为原文件,可以为单声道,test.wav为输出文件
-ar表示新文件的采样率
-ac 2 为新文件的声道数
以上命令完成了将单声道test.mp3文件转为16k 双声道wav文件。
左右声道分拆
ffmpeg -i test.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav
以上命令表示将双声道test.wav分别拆成左声道右声道两个文件。
只用于双声道,具体解释见链接
PCM转wav
ffmpeg -f s16le -ar 16k -ac 1 -i file.pcm file.wav
s16le 表示16bit’小端

[Linux]静态库.a文件通过链接脚本加入特定段section

部分情况下我们需要将特定文件的特定段进行放入特定位置,在有源码的情况下,比较简单,但是有时候我们之后编译好的静态库。
由于.a文件是由.o文件压缩而来,所以想要修改.a文件,需要分别控制.o的链接位置。
可以通过ar -x libXXX.a解压,或者使用objdump -t libXXX.a查看所有文件。得到文件名之后(假设test0.o test1.o test2.o)
我们现在想把libXXX.a的data放入特定段,可以修改链接脚本
.data : {
. = ALIGN(0x4) ;
__sdata = .;
*(.data)
*(.data*)
修改为:
.data : {
. = ALIGN(0x4) ;
__sdata = .;
*(EXCLUDE_FILE(*test0.o test1.o test2.o).data*)
#此语句表示“除了3个.o文件之外的所有data*段”,所以需要删除下面两行,否则还是会链接到此处
*(.data)
*(.data*)
然后在需要放的位置修改链接脚本
.new_data :
{
. = ALIGN(0x4) ;
__newdata_start = . ;
*(.new_data) ;
*test0.o(.data*)
*test1.o(.data*)
*test2.o(.data*)
__newdata_end = . ;
} > NEW_PLACE
注意文件名前面的星号
NOLOAD :该section在程序运行时,不被载入内存。