你对如何处理这个问题有什么建议吗?我会很感激.
解决方法 您可以使用 BASS library(非商业免费)并使用 BASS_ChannelGetLevel().以下是获取级别并将其输出到STDOUT的代码:
#include <cstddef>#include <stdio.h>#include <stdlib.h>#include "bass.h"int main(int argc,char **argv){ BASS_Init(0 /* "NO SOUND" device */,44100,NulL); if ( argc == 3 ) { int block = atoi( argv[2] ); // take levels every argv[2] ms if ( block < 20 ) block = 20; HSTREAM chan = BASS_StreamCreatefile(FALSE,argv[1],BASS_STREAM_DECODE); if ( chan ) { // BASS_ChannelGetLevel takes 20ms from the channel QWORD len = BASS_ChannelSeconds2Bytes(chan,(float)block / (float)1000 - (float)0.02); char data[len]; DWORD level,left,right; while ( -1 != (level = BASS_ChannelGetLevel(chan) ) ) // takes 20ms { left=LOWORD(level); // the left level right=HIWORD(level); // the right level printf("%i,%i\n",right); BASS_ChannelGetData(chan,data,len); // get data away from the channel } BASS_StreamFree( chan ); } } BASS_Free(); return 0;}
从bass24-linux.zip存档中提取bass.h和libbass.so并使用以下命令构建cpp文件:
g++ levels.cpp -o levels -lbass
如何执行:levels filename milliseconds(20minimum)
./levels 1.mp3 5000 >levels.txt
这是levels.txt,每5秒采取一次水平(左声道,右声道):
1,223235,2036322704,2060127203,2247610384,1208212059,133879600,1006314590,1226116428,1474517569,1472329628,2791320799,2355424056,2056420344,2124221318,2288825389,2905027185,2392425469,2254028453,2903719669,1979716497,1608612081,1184320030,2005020512,1953719347,1461027673,2656326414,2469619775,2286924137,2512722093,2318426563,2442227718,2379124456,2659829353,22647562,508
该级别从0(静音)到32768(最大)线性范围.
时间为6mb mp3文件,100ms周期:
# time ./levels 1.mp3 100 >levels.txtreal 0m0.981suser 0m0.972ssys 0m0.008s
大约一秒钟产生22Kb levels.txt文件,周期为100ms.
总结以上是内存溢出为你收集整理的在Linux中导出音频文件音量dB级别全部内容,希望文章能够帮你解决在Linux中导出音频文件音量dB级别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)