나는 오디오를 재생 중이고 동시에 키보드에서 입력을 받는다. 나는 이것을 달성하기 위해 스레딩을 사용했다. 내가 오디오를 실행하고 메인 스레드에서 입력을 듣고 새 스레드를 만들었습니다. 하지만 키보드의 특정 입력을 기반으로 오디오 재생을 중지하고 싶습니다.파이썬에서 조건에 따라 오디오 재생을 중지하는 방법은 무엇입니까?
다른 스레드에서 스레드를 "종료"할 수 없기 때문에 오디오 재생이 중지되지 않은 한 오디오 스레드가 기본 스레드를 수신 대기 할 수 없으므로 어떻게해야합니까?
편집
: 이 나는이 코드를 작성했습니다 :started
inside loop
give input2
True
terminated
inside loop
give input4
False
terminated
왜 이런 일이 :
from multiprocessing import Process
import os
p = Process(target=os.system, args=("aplay path/to/audio/file",))
p.start()
print("started")
while p.is_alive():
print("inside loop")
inp = input("give input")
if inp is not None:
p.terminate()
print(p.is_alive()) # Returns True for the first time, False for the second time
print("terminated")
이 출력은? 또한 두 번째 루프 반복 후에도 프로세스가 종료되고 (p.is_alive()는 false를 반환 함) 오디오는 계속 재생됩니다. 오디오가 멈추지 않습니다.
루프에서 오디오 파일을 재생하려고하지 않습니다. 하나의 긴 오디오 파일로 방해 할 필요가 있습니다. 이 줄'while self.alarm_status == True : winsound.PlaySound ("alarm.wav", winsound.SND_FILENAME)'는 오디오 파일이 루프에서 재생 될 때만 작동합니다. 각 전체 재생 후에 만 상태를 확인할 수 있습니다. 오디오 파일을 재생하는 사이의 상태를 확인하지 않습니다. – anomaly
내 편집을 참조하십시오. 나는 멀티 프로세싱을 사용했다. – anomaly
일시 정지하고 다른 스레드에서 작업을 계속하려면 내 대답을 편집했지만 오디오를 일시 중지하기 위해 직접 파일을 디코딩하고 스트리밍하거나 해당 라이브러리를 사용하거나 사용중인 플레이어를 제어해야합니다 (대부분의 경우 재생은 일시 중지를 지원하지 않습니다). – CodeCollector