2016-08-03 135 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(沒有多大意義,因爲其他程序無論如何都是一個新進程)。