【问题标题】:Simple Babymonitor with Bass.DLL带有 Bass.DLL 的简单婴儿监视器
【发布时间】:2017-03-12 16:32:31
【问题描述】:

我正在尝试为 Windows 编写一个简单的 Babymonitor(个人使用)。 babymonitor 应该只检测麦克风的 dB 级别并在一定音量下触发。

经过一番研究,我找到了 Bass.dll 库,发现了它的函数 BASS_ChannelGetLevel,它很棒,但似乎有局限性,不符合我的需求(峰值等于 DWORD 值)。

在示例中,我发现了一个“几乎”我需要的 livespec 示例。示例使用BASS_ChannelGetData,但是我不太清楚如何处理返回的数组...

我想让它尽可能简单:检测麦克风的音量为 dB 或任何其他值(例如值 0-MAXINT)。

如何使用 Bass.dll 库来做到这一点?

【问题讨论】:

  • 检查this
  • DWORD 是一个 32 位无符号值。那有什么问题?您说您可以使用介于0MaxInt 之间的值,那么为什么不使用DWORD?哎呀,即使它是 8 位 Byte 或 8 位 Shortint,你也只需要缩放它。我不太明白你的问题。
  • 您需要找到降低录音音量的方法,以便检测峰值。
  • 如果你耳语已经到极限了,是High(DWORD),是MaxInt的两倍,所以这不是DLL的问题,是你的音源问题.
  • @BenjaminWeiss 如果耳语已经达到极限,那么我想您可能需要在声卡设置中调整(降低)麦克风音量。还要确保禁用声卡的麦克风自动电平调整功能(有时称为麦克风自动增益)。此功能很有用,因此您无需一直直接对着麦克风讲话,因为如果您的嘴不直接面对麦克风,您的讲话将以较低的音量录制,因为声音来自您的嘴巴是有方向的。

标签: delphi bass bass.dll


【解决方案1】:

BASS_ChannelGetLevel 返回上限为 0dB 的值(在本例中返回值为 32768)。如果您调整源电平(声卡设置中的较低麦克风电平),那么它会正常工作。

另一种方法,如果您想获得无上限的值,请改用BASS_ChannelGetLevelEx 函数:它返回浮点电平,其中 1 是对应于 BASS_ChannelGetLevel 的 32767 的最大 (0dB) 值,但它可以超过 1 来检测声级高于 0dB,这是您可能需要的。

我还建议您监视一段时间的声音级别:仅当某个级别至少存在 2-3 秒时才触发(这样您将排除误报)。

【讨论】:

  • 我设法让它与 Ex 函数一起工作。正是我想要的!非常感谢!
【解决方案2】:

在给定输入流句柄 (streamHandle) 的情况下,以下是获取 db 级别的方法:

var peak = (double)Bass.BASS_ChannelGetLevel(streamHandle);
var decibels = 20 * Math.Log10(peak / Int32.MaxValue);

或者,您可以使用以下方法获取 RMS(平均)峰值。要获得 RMS 值,您必须将样本长度传递给 BASS_ChannelGetLevel。我在这里使用 20 毫秒,但您可以使用该值来查看哪个最适合您的需求。

var decibels = 0m;
var channelCount = 2; //Assuming two channels
var sampleLengthMS = 20f;
var rmsLevels = new float[channelCount];
var rmsObtained = Bass.BASS_ChannelGetLevel(streamHandle, rmsLevels, sampleLengthMS / 1000f, BASSLevel.BASS_LEVEL_RMS);

if (rmsObtained)
     decibels = 20*Math.Log10(rmsLevels[0]);   //using first channel (index 0) but you can get both if needed.
else
     Console.WriteLine(Bass.BASS_ErrorGetCode());

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2010-10-11
    • 2010-12-16
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多