Изменение между двумя аудиофайлами с сенсорным датчиком

Lola Pfeifer спросил: 12 мая 2018 в 04:53 в: python

Я просто пытаюсь сделать это очень просто, когда хочу играть два разных звуковых файла в зависимости от сенсорного датчика. Проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что хотя сенсор работает, программа не изменит аудиофайл ... Итак, я сейчас не знаю, какая помощь? Спасибо заранее, Lola

import pygameimport RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN)pygame.mixer.pre_init(44100, -16, 12, 512)
pygame.mixer.init()
pygame.init()fastbeat = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/fastbeat.ogg')
fastbeat.set_volume(.4);slowbeat = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/slowbeat.ogg')
slowbeat.set_volume(.4)while True:    if(GPIO.input(7)): #interrupt pin is high        print ('touched')
        fastbeat.play()    else: # Interupt pin is low
        print ('not touched')
        slowbeat.play()

Теперь я изменил свой код на:

import pygameimport RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN)pygame.mixer.pre_init(44100, -16, 12, 512)
pygame.mixer.init()
pygame.init()fastbeat = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/fastbeat.ogg')
fastbeat.set_volume(.4);slowbeat = pygame.mixer.Sound('/home/pi/gpio-music-box/samples/slowbeat.ogg')
slowbeat.set_volume(.4)while True:    if(GPIO.input(7)): #interrupt pin is high        print ('touched')
        slowbeat.stop()
        fastbeat.play()    else: # Interupt pin is low
        print ('not touched')
        fastbeat.stop()
        slowbeat.play()

, и он работает для меня, но еще один вопрос: каким образом я могу изменить команду if, чтобы он только разыгрывать битбит один раз, а затем снова вернуться к медленному?

приветствия lola


1 ответ

Есть решение
Javier E. Gonzalez ответил: 12 мая 2018 в 05:02

Кажется, что вы играете slowbeat в бесконечном цикле, поэтому он не дает времени для начала воспроизведения звука.

Попробуйте это?

isButtonUp = true  #was the button untouched?
while True:if(GPIO.input(7)): #interrupt pin is high
    isButtonUp = false   #button is not untouched
    print ('touched')
    fastbeat.play()else if (!isButtonUp): #has button been untouched before?
    print ('not touched')
    isButtonUp=true #set button as touched
    slowbeat.play()
Lola Pfeifer ответил: 12 мая 2018 в 05:23
Большое вам спасибо за ответ! Меняет ли это что-либо, если у меня нет кнопки reallife, а MPR-121?
Lola Pfeifer ответил: 12 мая 2018 в 05:24
Я имею в виду, ардуино, который делает то же самое, если я прав
Javier E. Gonzalez ответил: 12 мая 2018 в 07:45
Он должен по-прежнему работать одинаково. Основная проблема заключалась в том, что ваша логика играла slowbeat.play () бесконечно, потому что вы не устанавливали флаги для проверки того, что slowbeat уже играл или нет. Если этот ответ сработал для вас, отметьте его как принятый. Ура!
Lola Pfeifer ответил: 13 мая 2018 в 05:43
я попробовал, но я, вероятно, сделал что-то неправильно, потому что он сказал что-то вроде "проблемы синтаксиса",
Lola Pfeifer ответил: 13 мая 2018 в 05:44
Теперь я попробовал это, просто поместив slowbeat.stop(), и теперь он работает ...