1

我正在尝试使用循环播放 1 秒的声音mplayer。当我运行代码时,它会使覆盆子操作系统崩溃。我注意到有时mplayer进程的多个实例挂在任务管理器中,所以我添加了代码来获取进程 IDpidofkill它。
但是该过程不断出现多次,并且覆盆子在一些循环后不断崩溃。

此外,有时声音似乎重叠(可能是因为该过程的多个实例)

import os
import time
import serial

# arduino stuff
ser = serial.Serial('/dev/ttyACM0', 9600)

while True:
    os.system('mplayer -really-quiet /home/pi/Desktop/sound.mp3 &')
    time.sleep(1.5)
    ser.write('1') # send a signal to arduino 
    a = os.popen('pidof mplayer').read()
    if(a != ''):
        os.system('sudo kill ' + str(a))

注意:我尝试使用其他播放器,例如mpg123,但问题完全相同。

4

1 回答 1

0

如果你的声音文件的时间长于你的睡眠时间 1.5 秒,那么很自然地就会建立无数的进程,因为你在后台运行 mplayer,从尾随的“&”可以看出。

杀死进程有点像黑客。它引入了一个问题,即您打开了一个os.popen()您永远不会关闭的类似文件的对象。

相反,您应该将声音文件修剪到您想要播放的长度,并删除命令行末尾的“&”。作为修剪声音文件的替代方法,您可能会发现 mplayer 选项限制它播放曲调的时间。

于 2014-03-10T19:34:00.980 回答