在Linux中导出音频文件音量dB级别
发布时间:2020-12-14 00:05:03 所属栏目:Linux 来源:网络整理
导读:我希望能够生成某种存储音频文件音量级别的文件.我对此非常灵活,但一个例子是每隔一秒显示音量的csv.我不需要这个数字那么精确. 你对如何处理这个问题有什么建议吗?我会很感激. 解决方法 您可以使用 BASS library(非商业免费)并使用 BASS_ChannelGetLevel()
我希望能够生成某种存储音频文件音量级别的文件.我对此非常灵活,但一个例子是每隔一秒显示音量的csv.我不需要这个数字那么精确.
你对如何处理这个问题有什么建议吗?我会很感激. 解决方法
您可以使用
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,%in",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,2 23235,20363 22704,20601 27203,22476 10384,12082 12059,13387 9600,10063 14590,12261 16428,14745 17569,14723 29628,27913 20799,23554 24056,20564 20344,21242 21318,22888 25389,29050 27185,23924 25469,22540 28453,29037 19669,19797 16497,16086 12081,11843 20030,20050 20512,19537 19347,14610 27673,26563 26414,24696 19775,22869 24137,25127 22093,23184 26563,24422 27718,23791 24456,26598 29353,22647 562,508 该级别从0(静音)到32768(最大)线性范围. 时间为6mb mp3文件,100ms周期: # time ./levels 1.mp3 100 >levels.txt real 0m0.981s user 0m0.972s sys 0m0.008s 大约一秒钟产生22Kb levels.txt文件,周期为100ms. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |