Sox

如何監控麥克風音量?

  • January 24, 2019

我找到了一個對我不起作用的解決方案:

音頻 - 在 Linux 中使用命令行工具監控麥克風電平 - 超級使用者 https://superuser.com/questions/306701/monitoring-the-microphone-level-with-a-command-line-tool-in-linux

問題是他們使用最大振幅來檢測聲音。然而它的價值對我來說總是一樣的,無論錄製的音頻是只包含靜音還是一些聲音。例如:

10 秒的靜默(可在此處下載:http: //denis-aristov.ucoz.com/en/test-mic-silence.wav):

$ arecord -f S16_LE -D hw:2,0 -d 10 /tmp/test-mic-silence.wav

$ sox -t .wav /tmp/test-mic-silence.wav -n stat
Samples read:             80000
Length (seconds):     10.000000
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000015
Mean    norm:          0.202792
Mean    amplitude:     0.009146
RMS     amplitude:     0.349978
Maximum delta:         0.913849
Minimum delta:         0.000000
Mean    delta:         0.001061
RMS     delta:         0.005564
Rough   frequency:           20
Volume adjustment:        1.000

10 秒有一些聲音(可以在這裡下載:http: //denis-aristov.ucoz.com/en/test-mic-sounds.wav):

$ arecord -f S16_LE -D hw:2,0 -d 10 /tmp/test-mic-sounds.wav

$ sox -t .wav /tmp/test-mic-sounds.wav -n stat
Samples read:             80000
Length (seconds):     10.000000
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000015
Mean    norm:          0.185012
Mean    amplitude:     0.010225
RMS     amplitude:     0.334286
Maximum delta:         1.999969
Minimum delta:         0.000000
Mean    delta:         0.006213
RMS     delta:         0.057844
Rough   frequency:          220
Volume adjustment:        1.000

有什麼不同?聲音檢測使用什麼值?還是我必須設置一些東西,因為出現問題?

我剛剛使用了另一台電腦(帶有內置麥克風的筆記型電腦)。我使用 Windows“錄音機”錄製了兩個 WMA 文件(有聲音和沒有聲音)。使用將它們轉換為 WAV 文件audacity並獲得以下輸出。這次最大振幅不同:

有聲音:

$ sox -t .wav /tmp/mic-sounds.wav -n stat
Samples read:            581632
Length (seconds):      6.594467
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000015
Mean    norm:          0.013987
Mean    amplitude:     0.000062
RMS     amplitude:     0.065573
Maximum delta:         1.999969
Minimum delta:         0.000000
Mean    delta:         0.011242
RMS     delta:         0.047009
Rough   frequency:         5031
Volume adjustment:        1.000

沒有聲音:

$ sox -t .wav /tmp/mic-silence.wav -n stat
Samples read:            372736
Length (seconds):      4.226032
Scaled by:         2147483647.0
Maximum amplitude:     0.029022
Minimum amplitude:    -0.029114
Midline amplitude:    -0.000046
Mean    norm:          0.005082
Mean    amplitude:    -0.000053
RMS     amplitude:     0.006480
Maximum delta:         0.030487
Minimum delta:         0.000000
Mean    delta:         0.005815
RMS     delta:         0.007285
Rough   frequency:         7891
Volume adjustment:       34.348

這可能表明另一台電腦上的麥克風有問題嗎?

(根據各種評論回答,因為這種方法似乎可以接受,並且評論不保證留下。)

在音頻編輯器中查看第一個錄音(“10 秒的靜音”),例如audacity. 當電平從 0 秒時的 1 到 1 秒時的 -1 到 1.5 秒時的 0.5,然後在接近尾聲時下降到接近零時,您會看到 DC(極低頻)分量。那段時間你插麥克風了嗎?如果是,你需要等待大約。振幅穩定前 10 秒,然後測量。如果沒有,您需要以某種方式濾除 DC(直流電,即恆定電壓偏移)分量。sox有幾個過濾器你可以試試。

您可以sox毫無問題地使用 shell 腳本中的過濾器。試試 eg highpass 100,它會過濾掉除初始跳轉之外的大部分內容。

如果過濾掉直流分量太費力,您也可以忽略初始部分,直接使用剩餘部分。

引用自:https://unix.stackexchange.com/questions/364943