gpt4 book ai didi

python - 多个 Phonon audioOutput 实例在 Linux 上不能正常工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:41 24 4
gpt4 key购买 nike

我正在研究音板程序。该窗口填充了以下 SoundPlayer 类的多个实例。运行我的程序时,音量 slider 不会影响它们自己的播放器。最后启动的播放器的音量 slider 控制整个程序的音量。我已经打印出 audioObjects、volumeSliders 等的所有实例,并且它们都不在播放器之间共享。我让每个播放器都打印出它的音量,使用正确的音量 slider 确实会改变音量(audioOutput.volume()),但没有声音效果。使用最后启动的音量 slider ,其他播放器的 audioOutput 音量不会改变音量值,但仍然有声音效果。我很茫然,因为这在多台 Windows 机器上工作得很好,但在 ubuntu 12.04 上却不行。在其他地方寻求帮助并在多台机器上运行后,我开始认为这是 linux 的 PySide/Phonon 问题?

编辑:似乎问题更多在于音频输出。我将一些按钮连接到 .setVolume() 并手动调整了音量,它和以前一样出现了故障。只有最后启动的玩家的音量实际上会影响可听到的声音,并且对每个玩家都是如此。

SoundPlayer 类:(为简洁起见,对一些 UI 设置进行了删减。关键部分包括创建音频输出和媒体对象的 createAttr()/loadAttr(),以及创建音量 slider 的 setupUi()。)

class SoundPlayer():
def __init__(self, MainWindow, position, instance, attributes):
self.instance = instance
self.mainWindow = MainWindow
self.pos = position
self.setupUi(self.pos)
if attributes == '':
self.createAttr()
self.attributes = [self.name, self.filename]
else:
self.attributes = attributes
self.loadAttr()
self.buttons()
self.directory = QDesktopServices.storageLocation(QDesktopServices.MusicLocation)

def updateDevice(self, device):
self.audio.setOutputDevice(device)
Phonon.createPath(self.media, self.audio)

def loadAttr(self):
self.name = self.attributes[0]
self.filename = self.attributes[1]
self.media = Phonon.MediaObject(self.instance)
self.audio = Phonon.AudioOutput(Phonon.MusicCategory, self.instance)
self.source = Phonon.MediaSource(self.filename)
Phonon.createPath(self.media, self.audio)
self.label.setText(self.name)
self.updateUi()

def createAttr(self):
self.filename = ''
self.name = 'None'
self.media = Phonon.MediaObject(self.instance)
self.audio = Phonon.AudioOutput(Phonon.MusicCategory, self.instance)
self.source = Phonon.MediaSource(self.filename)
Phonon.createPath(self.media, self.audio)
self.media.stateChanged.connect(lambda x,y: self.changed(x,y))
self.label.setText(self.name)
self.updateUi()

def saveAttr(self):
self.attributes = [self.name, self.filename]

def buttons(self):
self.playButton.clicked.connect(self.onplaybutton())
self.resetButton.clicked.connect(self.onresetbutton())
self.stopButton.clicked.connect(self.onstopbutton())
self.optionButton.clicked.connect(self.optionDialog())

def onplaybutton(self):
state = self.media.state()
if state != Phonon.State.PausedState and state != Phonon.State.PlayingState:
self.playButton.setIcon(QtGui.QIcon(":pause.png"))
self.media.setCurrentSource(self.source)
self.media.play()
elif state == Phonon.State.PlayingState:
self.playButton.setIcon(QtGui.QIcon(":play.png"))
self.media.pause()
elif state == Phonon.State.PausedState:
self.playButton.setIcon(QtGui.QIcon(":pause.png"))
time = self.media.currentTime()
self.media.play()
self.media.seek(time)

def onresetbutton(self):
self.media.setCurrentSource(self.source)
self.media.play()
self.playButton.setIcon(QtGui.QIcon(":pause.png"))

def onstopbutton(self):
self.media.stop()
self.playButton.setIcon(QtGui.QIcon(":play.png"))

def updateUi(self):
self.seek = Phonon.SeekSlider(self.media, self.widget)
self.seek.resize(111, 21)
self.seek.show()
self.volume = Phonon.VolumeSlider(self.audio, self.volumeWidget)
self.volume.resize(111, 21)
self.volume.show()
self.playButton.setIcon(QtGui.QIcon(":play.png"))
self.media.stateChanged.connect(lambda x,y: self.changed(x,y))

最佳答案

关于python - 多个 Phonon audioOutput 实例在 Linux 上不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com