在Linux中导出音频文件音量dB级别

在Linux中导出音频文件音量dB级别,第1张

概述我希望能够生成某种存储音频文件音量级别的文件.我对此非常灵活,但一个例子是每隔一秒显示音量的csv.我不需要这个数字那么精确. 你对如何处理这个问题有什么建议吗?我会很感激. 您可以使用 BASS library(非商业免费)并使用 BASS_ChannelGetLevel(). 以下是获取级别并将其输出到STDOUT的代码: #include <cstddef>#include <stdio. 我希望能够生成某种存储音频文件音量级别的文件.我对此非常灵活,但一个例子是每隔一秒显示音量的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,%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级别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1022024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存