gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:43:38 26 4
gpt4 key购买 nike

我希望能够生成某种文件来存储音频文件的音量级别。我对此非常灵活,但一个例子是每秒显示音量的 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, 0, 0, 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], 0, 0, 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", left, 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 毫秒(20minimum)

./levels 1.mp3 5000 >levels.txt

这是 levels.txt,每 5 秒获取一次级别(左 channel ,右 channel ):

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 文件的时间为 100 毫秒。

关于linux - 在 Linux 中导出音频文件音量 dB 级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com