Файл SimpleAudio WAV воспроизводится только один раз - PullRequest
0 голосов
/ 12 июля 2020

Заранее извиняюсь, так как я новичок в программировании. Я пишу простую программу, используя python на rasbperry pi. Предполагается, что каждый раз при обнаружении движения будет воспроизводиться случайный файл из списка файлов WAV, содержащихся в папке. Изначально у меня были «проигрывать случайный код файла» и «код детектора движения» в двух отдельных файлах, и каждый из них работал нормально. Однако при их объединении файл wav воспроизводится только при первом обнаружении движения (однако каждый раз, когда обнаруживается движение, он ДЕЙСТВИТЕЛЬНО печатает «Воспроизведение звука». Tkinter присутствует, поскольку у меня есть планы на будущее добавить кнопку записи в добавляю новые звуки через небольшой сенсорный экран, который у меня тоже есть. Я уверен, что это что-то простое, и пока я не выясню, что делаю не так, я продолжаю смотреть python обучающие программы. Код ниже

from tkinter import *
import glob
import random
import time
import simpleaudio as sa
from gpiozero import LED
from gpiozero import MotionSensor

green_led = LED(17)
pir = MotionSensor(4)
sound_list = glob.glob("sounds/*.wav")
sound_item = random.choice(sound_list)
wave_obj = sa.WaveObject.from_wave_file(sound_item)
play_obj = wave_obj.play()

green_led.off()

while True:

    pir.wait_for_motion()
    print("Motion Detected")
    green_led.on()

    play_obj.wait_done() #Wait until sound has finished playing
    print("Playing Sound")

    pir.wait_for_no_motion()
    green_led.off()
    print("No Motion")

1 Ответ

0 голосов
/ 19 июля 2020

В качестве альтернативы проблеме со звуком вы можете использовать pygame для загрузки звука и его использования, что совместимо почти со всеми ОС.

Вот как

pygame.mixer.init() #to initialize pygame mixer
pygame.mixer.music.load(file_name.wav) #load the music in
pygame.mixer.music.play() #play to music

и для остановки или паузы используйте:

pygame.mixer.music.pause() #to pause the music
pygame.mixer.music.unpause() #to start from where you paused the music

Если файл несовместим, попробуйте изменить его формат на, возможно, mp3, и он может работать, для получения дополнительной информации см. документы

...