2016-08-03 136 views
0

我的问题是,每个按钮下的音频文件都很长,如果我按错了按钮,我将不得不等待它播放结束。我怎样才能让每个按钮按1)停止可能播放的音频文件,然后2)播放它自己的文件? 我使用mpg123播放音频文件和文件名是占位符。如何让按钮先按停止播放音频文件,然后播放自己的音频?

代码:

#!/usr/bin/env python 

import os 
from time import sleep 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(18, GPIO.IN) 
GPIO.setup(19, GPIO.IN) 
GPIO.setup(20, GPIO.IN) 
GPIO.setup(21, GPIO.IN) 
GPIO.setup(22, GPIO.IN) 
GPIO.setup(23, GPIO.IN) 
GPIO.setup(24, GPIO.IN) 
GPIO.setup(25, GPIO.IN) 
GPIO.setup(26, GPIO.IN) 
GPIO.setup(27, GPIO.IN) 

while True: 

    if (GPIO.input(18)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(19)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(20)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(21)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(22)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(23)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(24)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(25)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(26)==False): 
     os.system('mpg123 audio.mp3 &') 
    if (GPIO.input(27)==False): 
     os.system('mpg123 audio.mp3 &') 

sleep(0.1): 

回答

0

您可以使用subprocess异步所以立刻函数调用返回。我认为有可能得到一个“处理”对象与外部进程进行通信,这也允许你“kill”它。

同样,你可以在主程序中检查你的密钥并启动一个线程进行播放:http://docs.python.org/3/library/threading.html(没有多大意义,因为其他程序无论如何都是一个新进程)。