如果声级超过某个阈值,听起来你想做某事(也许开始录音)。这有时被称为“门”。听起来您在误报方面也遇到了麻烦。这有时通过应用于门的“侧链”来处理。
门的一般原理是创建信号的包络,然后监视包络以发现它何时超过某个阈值。如果它高于阈值,则您的门“打开”,否则,您的门“关闭”。如果您在创建包络之前以某种方式处理信号以使其对信号/噪声的各个部分或多或少敏感,则该处理称为“侧链”。
您将不得不自己发现细节,因为问答网站的内容太多了,但也许这已经足够开始了:
float[] buffer; //defined elsewhere
float HOLD = .9999 ; //there are precise ways to compute this, but experimentation might work fine
float THRESH = .7 ; //or whatever
float env = 0; //we initialize to 0, but in real code be sure to save this between runs
for(size_t i = 0; i < buffer.size(); i++) {
// side-chain, if used, goes here
float b = buffer[i];
// create envelope:
float tmp = abs(b); // you could also do buffer[i] * buffer[i]
env = env * HOLD + tmp * (1-HOLD);
// threshold detection
if( env > THRESH ) {
//gate is "on"
} else {
//gate is "off"
}
}
侧链可能包含过滤器,如 eq。这是一个关于设计音频均衡器的教程:http: //blog.bjornroche.com/2012/08/basic-audio-eqs.html