2012-07-04 2 views
1

나는 사운드 보드 프로그램을 만들고 있습니다. 이 창은 아래 SoundPlayer 클래스의 여러 인스턴스로 채워집니다. 내 프로그램을 실행할 때 볼륨 슬라이더가 자신의 플레이어에 영향을 미치지 않습니다. 마지막으로 시작한 플레이어의 볼륨 슬라이더가 전체 프로그램의 볼륨을 제어합니다. audioObjects, volumeSliders 등의 모든 인스턴스를 인쇄했으며 플레이어간에 공유되는 인스턴스는 없습니다. 나는 각 플레이어에게 그 볼륨을 출력하게하고, 올바른 볼륨 슬라이더를 사용하면 볼륨을 변경하지만 (audioOutput.volume()), 들리는 효과는 없다. 마지막으로 초기화 된 볼륨 슬라이더를 사용하면 다른 플레이어의 audioOutput 볼륨은 볼륨 값을 변경하지 않지만 들리는 효과가 있습니다. 이 우분투 12.04 아니라 여러 Windows 컴퓨터에서 완벽하게 잘 작동하기 때문에 나는 손실에있어. 다른 곳에서 도움을 구하고 이것을 여러 컴퓨터에서 실행 한 후에는 리눅스에서 PySide/Phonon 문제라고 생각하기 시작했습니다.여러 Phonon audioOutput 인스턴스가 Linux에서 제대로 작동하지 않습니까?

EDIT : audioOutput에 문제가있는 것 같습니다. .setVolume()에 몇 개의 버튼을 연결하고 수동으로 볼륨을 조절하면 이전과 동일하게 울려 퍼졌습니다. 마지막으로 시작한 플레이어의 음량 만 실제로 가청 사운드에 영향을 미치며 모든 플레이어에게 적용됩니다.

SoundPlayer 클래스 : (.. UI를 설정까지 중 일부는 간결하게 정돈 된 주요 부분이 audioOutputs 및 MediaObjects가 생성됩니다 createAttr()/loadAttr() 및 볼륨 슬라이더가 생성됩니다 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)) 

답변

0
대부분의 아마

하지 당신의 잘못 : 링크 전용 답변 SO 여기에 낙담하는 것을 https://bugs.kde.org/show_bug.cgi?id=321288

+0

참고. [대답 편집] (http://meta.stackexchange.com/a/8259/186599)을 고려하고 여기에 개요를 추가하십시오. – NAZIK