我尝试使用命令arecord同时启动2个音频记录(使用2个不同的麦克风)。
首先,这是我用来从一个麦克风(record.py)录制的代码:
#!/usr/bin/env python2
# -*-coding:Latin-1 -*
from threading import Thread
import pyaudio, sys, wave, time, commands, os
# classe qui permet d'exécuter un second Thread qui va enregistrer en même temps
class Record(Thread):
def __init__(self, device):
super(Record, self).__init__()
self.device = device
def run(self):
# permet d'enregistrer en spécifiant le / les bons micros, et enregistre un fichier à la bonne date et heure, en spécifiant le numéro du micro
u = commands.getoutput('arecord -D plughw:' + self.device + ',0 -f cd -t wav -d 10 --use-strftime %Y/%m/%d/mic' + self.device + '-listen-%H-%M-%v.wav')
class ActionsPerMic(Thread):
def __init__(self, device):
super(ActionsPerMic, self).__init__()
self.device = device
def run(self):
rec = Record(self.device)
rec.start()
rec.join()
# pour un micro branché au Raspberry Pi
mic1 = ActionsPerMic(sys.argv[1])
mic1.start()
mic1.join()
然后,我用subprocess.Popen启动另一个程序,它调用record.py两次:
# #!/usr/bin/env python2
# # -*-coding:Latin-1 -*
import commands, time, subprocess, signal, os, pyaudio, sys, wave
from subprocess import Popen
from threading import Thread
listDevices = list()
p = pyaudio.PyAudio()
dev0 = ["python", "record.py", "3"]
dev1 = ["python", "record.py", "4"]
pDev0 = subprocess.Popen(dev0, stdin = subprocess.PIPE)
pDev1 = subprocess.Popen(dev0, stdin = subprocess.PIPE)
# pDev0.terminate()
# pDev1.terminate()
# pDev0.wait()
# pDev1.wait()
pDev0.finish()
pDev1.finish()
这些功能(终止,等待和结束)都不允许同时启动2条记录。