2014-10-22 2 views
0

python 2.7 및 pyalsaaudio 0.7을 사용하여 내 필요에 맞는 작은 사용자 지정 믹서를 만들려고합니다.하지만 다른 프로그램에서 볼륨 값을 변경하면 alsamixer에서 가져온 이벤트가 붙어 있습니다. 다른 믹서의 작동 방식을 이해하려고 시도했는데 (예 : volti) 이해한다면 이해할 수있을만큼 예상대로 작동해야하지만 방법이 비슷하더라도 io_add_watch에서 이벤트 응답의 연속 루프가 계속 발생합니다. 그래서, 나는 io_add_watch가 어떻게 작동하는지 이해하지 못한다고 생각합니다.gobject.io_add_watch 연속 콜백 pyalsaaudio

이 코드의 작은 버전입니다 :

class MyMixer(gtk.Window): 
    def __init__(self): 
     super(MyMixer, self).__init__() 
     self.m = alsaaudio.Mixer(control='Headphone', id=1, cardindex=0) 
     """ here go the mixer widgets """ 
     self.show_all() 
     fd, event = self.m.polldescriptors()[0] 
     self.watch = gobject.io_add_watch(fd, event, self.update) 


    def update(self, *args): 
     print 'changed' 
     """ here I update mixer widgets """ 
     return True 

mixer = MyMixer() 
gtk.main() 

내가 잘못 무엇입니까 무엇입니까?

답변

0

폴 설 명자에서 이벤트를 받으면 snd_mixer_handle_events()을 호출해야합니다. pyalsaaudio에 대한 메커니즘이 없습니다.

+0

나는이 문제에 대해 제출 된 패치를 발견했는데, 정확하게 이해한다면, 내 문제가 아닌 특정 이벤트를 처리 할 수있게되었습니다. 내 문제는 믹서의 값을 변경 한 후에도 지속적인 이벤트가 발생하고 그것을 "멈추는"방법을 모른다. 저는 여전히 파이썬 초보자입니다. 그렇기 때문에 폴링이 어떻게 작동하는지 실제로 이해하지 못했을 것입니다. – musicamante

+1

이벤트가 처리되지 않기 때문에 계속 이벤트가 발생합니다. –

+0

좋아, 그 패치로 고칠 수 있다면 고마워. – musicamante