是否可以将 Asterisk 中的发送/接收音量降低到正常水平以下?

是否可以将 Asterisk 中的发送/接收音量降低到正常水平以下?

我正在尝试改变 Asterisk 的音量。有几个应用程序可以从中受益。其中大部分是增加但也有一些场景我希望减少低于默认值的音量。

我知道有人SET(VOLUME(TX)=10)在有人呼叫他的毫瓦线时使用它来实现非常逼真的 1004 Hz 测试音。

他还告诉我,他不确定,但他认为“3”是 TX 和 RX 的正常音量。我找不到任何文件来证实或否认这一点。但我想做一个简单的测试:

[mf] ; This is "supposed" to increase the transmit volume (what the caller would hear), execute a subroutine, and then "reset" the channel volume back to normal
exten => start,1,SayAlpha(A)    
    same => n,SayAlpha(A)   
    same => n,SayAlpha(A)   
    same => n,SET(VOLUME(TX)=1) 
    same => n,GoSub(mfer,start,1(${ARG1}))
    same => n,SayAlpha(A)
    same => n,SayAlpha(A)
    same => n,SET(VOLUME(TX)=0.4)
    same => n,SayAlpha(A)
    same => n,SayAlpha(A)
    same => n,SET(VOLUME(TX)=3) ; return volume to original loudness ** is the original volume 3?
    same => n,SayAlpha(A)
    same => n,SayAlpha(A)
    same => n,Return()

我只是听了听“A”数字,看看它们是否变大了或变小了。

令我惊讶的是,唯一的区别是最后 2 个声音听起来更响亮!前 6 个听起来都一样!

这告诉我“正常”频道音量不是 3 - 它一定是 2 或 1,也可能是 1。

而且 0.4 并没有使通道变得更柔和,所以这让我相信 1 是最小的可能值。

那么,是否可以将 Asterisk 中的发送或接收音量调得比默认音量小一些?似乎不支持小数,所以我现在不知道该怎么办。

答案1

简短回答:

要降低音量,请使用小于或等于的负整数-2。例如

same => n,SET(VOLUME(TX)=-4)

长答案:

免责声明:我的发现是基于阅读星号源代码。我没有构建或跟踪代码,只是阅读了它,有很大的误解空间。

  • 默认设置为零0。它禁用调用音量调节例程。
  • 要增加音量,请将调整设置为大于或等于的整数2
  • 要降低音量,请将调整设置为小于或等于的整数-2
  • 调整以短整数形式应用。将调整设置为十进制数最多可能会将其转换为短整数,但我不知道那里到底发生了什么。
  • 使用调整值-11对最终音量没有影响,但浪费 CPU 周期(原因见下文),使用零0代替-11
  • 在同一通道+方向(方向为 TX 或 RX)上多次设置音量调节不会产生复合效果。每次执行设置音量都会清除该通道+方向上的先前调节并设置新的调节。

推理:

  • 最终的调整是存储为 int并应用为短的。 我怀疑尝试使用小数(例如“1.5”或“0.1”)是没有意义的。坚持使用整数。
  • 零点调整方式无调整(默认)
  • 当调整积极的那么每个样本倍增通过调整并剪裁为16位有符号整数。
  • 当调整消极的那么每个样本分为由模数abs(adjustment)

如果我的理解正确的话:

; Reduce each sample to 50% the original value
same => n,SET(VOLUME(TX)=-2)

; Reduce each sample to 20% the original value
same => n,SET(VOLUME(TX)=-5)

; Reduce each sample to 10% the original value
same => n,SET(VOLUME(TX)=-10)

; Disable volume adjustments
same => n,SET(VOLUME(TX)=0)

; Waste CPU cycles by calling functions only to multiply by 1, the adjustment value of zero would achieve the same more efficiently
same => n,SET(VOLUME(TX)=1)

; Increase each sample to 200% of the original value
same => n,SET(VOLUME(TX)=2)

请注意,感知到的体积变化和样本缩放是大概不是同一件事,例如,将每个样本加倍可能不会使感知到的体积变化加倍。

答案2

VOLUME 功能运行正常。

请确保您的端点(软件电话或硬电话)没有“标准化声音水平”之类的功能。

相关内容