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, ограничивающую время воспроизведения мелодии.

Другие вопросы по тегам