편집 : 오디오 수 있습니다Python : 클래스가없는 모듈의 영구 변수?
sounds.py
import audio
import time
localAudioPlayer = None
def Play(soundString, wait=True):
if (localAudioPlayer != None):
localAudioPlayer.stop()
localAudioPlayer = audio.stream("sound/%s.ogg" % soundString)
localAudioPlayer.play()
if (wait == True):
while (localAudioPlayer.playing == True):
time.sleep(0.1)
return
"오디오"(AN 초기화있는 폴더에서) 내가 쓴 완벽한 라이브러리입니다 : 여기에 내가 실패했습니다 실제 코드는 재생.
사운드가 이미 재생되는 동안 Play()가 호출되면 해당 사운드가 중지되어야한다는 아이디어가 있습니다.
실제 코드를 재생하지 않고도 audio.stream() 객체를 인스턴스화 할 수 있도록 코드를 설정하지 않았으므로 미리 초기화하는 것이 좋습니다.
나는 원래의 예제와 비슷한 코드를 시도했다. (stuffLocalVar = None으로 설정 한 다음 함수에서 None을 테스트했다.) 정상적으로 작동했다. 그래서 이것은이 특정 코드에 특정한 것입니다.
파이썬 콘솔에서 "사운드 가져 오기"를 수행하고 직접 Play()를 실행하려고했을 때 동일한 추적 기능을 사용했습니다.
역 추적 :
>>> sounds2.Play("file.ogg")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sounds2.py", line 7, in Play
if (localAudioPlayer != None):
UnboundLocalError: local variable 'localAudioPlayer' referenced before assignment
원래
나는이 설정에 대한 적절한 용어의 확실하지 않다, 그래서 내가 당신에게 간단한 예를주게 :
mainApp.py을 :
import stuff
print stuff.do() # should print 16
stuff.stuffLocalVar = 8
print stuff.do() # should print 32
stuff.py
stuffLocalVar = 4
def do():
return stuffLocalVar * 4
이 작업을 수행 할 수 있습니까? 나는 이것을하기를 원한다. 왜냐하면 stuff.py (이것은 질문의 요점을 강조하기 위해 엄청나게 단순화 되었기 때문에)가 사용자가 여러 클래스를 인스턴스화 할 수 없도록하려는 코드를 포함하기 때문이다. 이 코드에는 응용 프로그램과 관련된 하나의 "인스턴스"만 있으면됩니다. 그러나 stuff.py의 함수는 해당 코드 섹션 내에 보유 된 데이터에 의존합니다.
왜이 작업을 수행해야합니까? – Blender
이것을 시도해보고 효과가 있는지 쉽게 알 수 있습니다 ... –
이들은 두 가지 완전히 다른 질문이지만 내 대답을 업데이트했습니다. – Marcin