Raspberry Pi и Mplayer ошибка звуковой петли
Я пытаюсь воспроизвести звук в течение 1 секунды, используя mplayer
, Когда я запускаю код, он выходит из строя. Я заметил, что несколько раз несколько экземпляров mplayer
процессы зависали в диспетчере задач, поэтому я добавил код, чтобы получить идентификатор процесса pidof
а также kill
Это.
Но процесс продолжает появляться несколько раз, и малина продолжает падать после некоторых циклов.
Кроме того, иногда кажется, что звук перекрывается (вероятно, из-за нескольких экземпляров процесса)
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
, но проблема точно такая же.
1 ответ
Если ваш звуковой файл в любое время длиннее, чем время ожидания в 1,5 секунды, естественно, что создается бесконечное количество процессов, потому что вы запускаете mplayer в фоновом режиме, как видно из завершающего символа "&".
Убивать процессы - это что-то вроде хака. И это вводит проблему, что вы открываете файловый объект с os.popen()
который вы никогда не закроете.
Скорее вы должны обрезать ваш звуковой файл до длины, которую вы хотите воспроизвести, и удалить "&" в конце командной строки. В качестве альтернативы обрезке звукового файла вы можете найти опцию mplayer, ограничивающую время воспроизведения мелодии.