Audio 如何显示麦克风的当前音量?
我对QMultimedia一无所知。目前,我试图从网络摄像头中的麦克风获取音频流,以便进一步处理。现在,我只是尝试用一个滑块连续显示麦克风“听到”的声音音量。所以我一起搜索了一些代码(发现了将近10吨的例子,我如何播放音频,但只有几个块的C++音频输入代码),并被卡住了。 这是我的实际代码:Audio 如何显示麦克风的当前音量?,audio,input,pyqt,volume,microphone,Audio,Input,Pyqt,Volume,Microphone,我对QMultimedia一无所知。目前,我试图从网络摄像头中的麦克风获取音频流,以便进一步处理。现在,我只是尝试用一个滑块连续显示麦克风“听到”的声音音量。所以我一起搜索了一些代码(发现了将近10吨的例子,我如何播放音频,但只有几个块的C++音频输入代码),并被卡住了。 这是我的实际代码: import sys, time from PyQt4 import Qt, QtGui, QtCore, QtMultimedia class VolumeSlider(QtGui.QSlider):
import sys, time
from PyQt4 import Qt, QtGui, QtCore, QtMultimedia
class VolumeSlider(QtGui.QSlider):
def __init__(self, parent=None):
super(VolumeSlider, self).__init__(parent)
self.audio = None
self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
self.volumeSlider.setTickInterval(1)
self.volumeSlider.setMaximum(100)
self.volumeSlider.setValue(49)
self.volumeSlider.show()
self.openMicStream()
# THIS IS WHAT I WANT - DOESN'T WORK
while True:
self.volumeSlider.setValue(self.audio.volume())
time.sleep(0.02)
def openMicStream( self ):
#audioInputDevices = QtMultimedia.QAudioDeviceInfo.availableDevices(QtMultimedia.QAudio.AudioInput)
#for d in audioInputDevices: d.deviceName()
info = QtMultimedia.QAudioDeviceInfo(QtMultimedia.QAudioDeviceInfo.defaultInputDevice())
print "Default audio input device:", info.deviceName()
audioFormat = QtMultimedia.QAudioFormat()
audioFormat.setFrequency(8000);
audioFormat.setChannels(1);
audioFormat.setSampleSize(8);
audioFormat.setCodec("audio/pcm");
audioFormat.setByteOrder(QtMultimedia.QAudioFormat.LittleEndian);
audioFormat.setSampleType(QtMultimedia.QAudioFormat.UnSignedInt);
audioDeviceInfo = QtMultimedia.QAudioDeviceInfo.defaultInputDevice();
if not audioDeviceInfo.isFormatSupported(audioFormat):
sys.stderr("default audioFormat not supported try to use nearest")
audioFormat = audioDeviceInfo.nearestFormat(audioFormat);
self.audioInput = QtMultimedia.QAudioInput(audioFormat);
fmtSupported = info.isFormatSupported(audioFormat)
print "Is the selected format supported?", fmtSupported
if not fmtSupported:
audioFormat = info.nearestFormat(audioFormat)
print "Is the nearest format supported?", info.isFormatSupported(audioFormat)
self.audio = QtMultimedia.QAudioInput(audioFormat, None)
self.audio.start()
if __name__ == "__main__":
app = Qt.QApplication(sys.argv)
x = VolumeSlider()
sys.exit(app.exec_())
有人能戳我的头吗?在“这是我想要的”位置,我必须做什么来计算和显示当前音量水平?无论在Qt4()还是Qt5中,都没有内置函数来计算输入声音信号的当前音量水平
但是你可以自己计算。信号移动窗口中的均方根通常用于测量当前响度。有关更多建议,请参阅。在处理其他零件一段时间后解决了此问题。现在,在我将OpenICStream(self)更改为以下内容后,我至少可以听到盒子外的声音:
在Qt4中没有获取或设置音量的函数(不过在Qt5中也有)。您可以尝试使用声子来代替。。。好的,thanx,我试试其中一种。你不应该在Qt中使用sleep。用定时器代替。在Qt5中,
QAudioInput
类可以(只要设备支持)。@ekhumoro我看到了,但我认为如果我理解正确,它们可能意味着与OP希望的当前音频音量不同的音量。它更像是一个额外的增益因子。但我不完全确定这里到底是什么意思。我想我们必须等待OP回来并提供更多信息。
def openMicStream( self ):
info = QAudioDeviceInfo(QAudioDeviceInfo.defaultInputDevice())
print "Default audioInput input device: ", info.deviceName()
audioFormat = QAudioFormat()
audioFormat.setFrequency(44100);
audioFormat.setChannels(1);
audioFormat.setSampleSize(16);
audioFormat.setCodec("audioInput/pcm");
audioFormat.setByteOrder(QAudioFormat.LittleEndian);
audioFormat.setSampleType(QAudioFormat.UnSignedInt);
audioDeviceInfo = QAudioDeviceInfo.defaultInputDevice();
if not audioDeviceInfo.isFormatSupported(audioFormat):
messages.error(__name__, "default audioFormat not supported try to use nearest")
audioFormat = audioDeviceInfo.nearestFormat(audioFormat);
print audioFormat.frequency()
print audioFormat.channels()
print audioFormat.sampleSize()
print audioFormat.codec()
print audioFormat.byteOrder()
print audioFormat.sampleType()
self.audioInput = QAudioInput(audioFormat);
audioFmtSupported = info.isFormatSupported(audioFormat)
messages.info(__name__, "Is the selected format supported?"+str(audioFmtSupported))
if not audioFmtSupported:
audioFormat = info.nearestFormat(audioFormat)
messages.info(__name__, "Is the nearest format supported?"+str(info.isFormatSupported(audioFormat)))
self.audioInput = QAudioInput(audioFormat, None)
self.audioOutput = QAudioOutput(audioFormat, None)
device = self.audioOutput.start()
self.audioInput.start(device)