Python/Pygame按钮按下可获得声音

Python/Pygame按钮按下可获得声音,python,audio,raspberry-pi,pygame,Python,Audio,Raspberry Pi,Pygame,我对编程很陌生。我正在建立一个项目:当我按下门铃按钮时,一张图片会发送到我的手机(带有twilio和Imgur),我还希望按下同一个按钮时门铃会响。我对初始部分的编码正在工作,图片正在发送到我的手机 import os.path as pth import os import re import pyimgur import time import picamera import RPi.GPIO as GPIO from twilio.rest import TwilioRestClient

我对编程很陌生。我正在建立一个项目:当我按下门铃按钮时,一张图片会发送到我的手机(带有
twilio
Imgur
),我还希望按下同一个按钮时门铃会响。我对初始部分的编码正在工作,图片正在发送到我的手机

import os.path as pth
import os
import re
import pyimgur
import time
import picamera
import RPi.GPIO as GPIO
from twilio.rest import TwilioRestClient

# Defining GPIO port on RPI
BUTTON = 19 

# setup GPIO using Broadcom SOC channel numbering
GPIO.setmode(GPIO.BCM)

# set to pull-up (normally closed position for a pushbutton)
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Twilio credentials 
TWILIO_SID = "####"
TWILIO_AUTH = "####"

# Phone Numbers
HOME_PHONE = "####"
TWILIO_PHONE = "####"

# text message to send with photo
TXT = "Someones at the Door!"

# directory to save the snapshot in
IMAGE_STORAGE = "/home/pi/Pictures/"

# imgur client setup
IMGUR_ID = "#####"

# name and dimensions of snapshot image
IMG = "snaps.jpg"
IMG_WIDTH = 800
IMG_HEIGHT = 600

# initalize the Twilio client
client = TwilioRestClient(TWILIO_SID, TWILIO_AUTH)

# initialize imgur client
im = pyimgur.Imgur(IMGUR_ID)


try:


    # indefinite loop for the doorbell
    while True:

        GPIO.wait_for_edge(BUTTON, GPIO.RISING)
        print("DoorBell\n")
        with picamera.PiCamera() as camera:
            camera.resolution = (IMG_WIDTH, IMG_HEIGHT)
            camera.capture(IMAGE_STORAGE + IMG)  

        uploaded_image = im.upload_image(IMAGE_STORAGE + IMG, title=TXT)
        client.messages.create(
            to=HOME_PHONE,
            from_=TWILIO_PHONE,
            body=TXT,
            media_url=uploaded_image.link,
        )
finally:
    GPIO.cleanup() # ensures a clean exit
这个代码可以很好地将图片发送到我的手机,我现在需要的是让按钮通过我的RPI上的3.5毫米插孔发出声音的代码。我对此(不起作用)的编码如下:

当我尝试运行此功能时,我得到:

文件“/home/pi/Desktop/sound code.py”,第23行,在 mixer.music.play(sndA)类型错误:需要整数

我想知道是否有人知道如何解决这个问题,是否有办法将这两个脚本组合成一个脚本

我已经在这最后一部分进行了大约4天了,我在一个时间表上,所以我只是在寻找任何帮助

mixer.music.load()
返回
None
,无论输入是什么(参见文档)。这意味着
sndA
也会得到
None

但是正如您所看到的,
pygame.mixer.music.play()
方法需要两个数字(实际上是可选的,所以您不需要指定它们)

您不必使用任何变量来保存声音。只需调用
play()
即可播放先前加载的文件:

mixer.music.load('/home/pi/Desktop/doorbell-7.mp3')

# ...

mixer.music.play(-1) # -1 = infinite loop

尝试使用混音器中的声音对象,而不是音乐功能

doorbell = pygame.mixer.Sound(filename)
doorbell.play()
查看此链接:

至于组合代码,我建议将发送图片的代码打包成一个函数,并在第二个函数的if语句中调用它。但是,对于循环的多次迭代,keypress函数将返回true,您可以通过存储前一个keypress值并将其与当前值进行比较来获得该值:

last_keypress = False
while True:
    if (not last_keypress) and (GPIO.Input(19)):
        <do stuff>
    last_keypress = GPIO.Input(19)
    time.sleep(.01)
last_keypress=False
尽管如此:
如果(不是最后一次按键)和(GPIO.Input(19)):
最后一次按键=GPIO.Input(19)
时间。睡眠(.01)

我不得不说这是一种更漂亮的方式谢谢!这帮了大忙,我明白了:)
last_keypress = False
while True:
    if (not last_keypress) and (GPIO.Input(19)):
        <do stuff>
    last_keypress = GPIO.Input(19)
    time.sleep(.01)