我对python和一般代码都很陌生,所以请接受我的建议。你知道吗
我有一段代码可以运行并播放文件列表(就像在itunes播放列表上一样)。我需要通过切换从touchosc发送的按钮/变量来停止和重新启动循环。你知道吗
循环将触发并正常运行,但我无法在不按ctrl-c的情况下使其停止。问题似乎是,当循环运行时,我的程序不会用新值更新“loop”变量,以便在它更改为0时停止进程。我尝试了很多不同的方法,但都失败了。其中包括循环和线程(在我头上的方式)。如果有人能给我指出正确的方向,我将不胜感激!另外,请原谅我的黑客代码——r、s、sp和sr标志主要用于正在工作的程序的另一部分,因此我可以确保在录制或触发不同的播放文件时终止进程,以避免cpu过载,并且如果要同时录制到同一个文件并从中播放,也可以避免反馈。如果你有关于如何让这更好的感觉自由的指针,但我真的只是想解决目前的主要问题。你知道吗
代码如下:
from OSC import OSCServer,OSCClient, OSCMessage
import sys
from time import sleep
import time
import types
import os
import subprocess
server = OSCServer( ("10.1.1.143", 7002) )#This has to be the IP of the RaspberryPi on the network
client = OSCClient()
r = None
p = None
sr = 0
sp = 0
loop = 0
def playall(path, tags, args, source):
global sp
global p
global sr
global r
global loop
loop = int(args[0])
if loop == 1:
print "Play on Loop";
for x in range(1,10):
i = ""
i = str(x)
print "Loop Duration", loop;
if sp == 0:
if sr == 0:
p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
sp = 1
else:
r.kill()
p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
sp = 1
sr = 0
else:
if sr == 0:
p.kill()
p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
sp = 1
else:
p.kill()
r.kill()
p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
sp = 1
sr = 0
time.sleep(5)
if loop == 0:
break
server.addMsgHandler("/3/playall", playall)
while True:
server.handle_request()
server.close()
目前没有回答
相关问题 更多 >
编程相关推荐