源码:https://github.com/fly-studio...条件树莓派4B无源蜂鸣器3V:3美分一根杜邦线:2种语言:Python3接线蜂鸣器正极:作者使用GPIO1为28接口.对GPIO端口没有要求。只要GPIO口可用,看GPIO引脚图:https://pinout.xyz/PWM脉冲importtimeimportRPi.GPIOasGPIOGPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(1,GPIO.OUT)#设置GPIO1为输出pwm=GPIO.PWM(1,4978)#SetGPIO1作为PWM输出,脉冲为4978Hzpwm.start(0)pwm.ChangeDutyCycle(50)#Continuouslysendpulseleveltime.sleep(0.5)#Continuous0.5ssoundpwm.stop()GPIO.cleanup()在GPIO上面。PWM(1,4978)是GPIO1的输出脉冲,设置为4978Hz,即1秒内有4978个输出周期。pwm.ChangeDutyCycle(50)不能为100,因为100等于没有振荡电流,设置为50。注意对照表参考:https://shumeipai.nxez.com/20...其实注意里面4978对应的上面的例子是D8#,其他的音符可以看下面的音符定义频率音名音符,开始写歌。所以,只要知道编号并对照上表,就可以调用不同的PWM脉冲来产生不同的声音。如果要实现和弦,需要多个蜂鸣器和三个文件txdx.py#组织tone.py#音符表main.pytxdx.py#铁血丹心的笔记#可以有2种格式#[音符名称(字符串),时长(s)]#[频率(int),持续时间(s)]txdx_sheet=[#1['NOTE_A4',1.5],#6['NOTE_G4',0.5],#5['NOTE_A4',1],#6['NOTE_G4',0.5],#5['NOTE_E4',0.5],#3#2['NOTE_G4',1],#5['NOTE_D4',3],#2#3['NOTE_C4',1.5],#1['NOTE_A3',0.5],#.6['NOTE_D4',0.5],#2['NOTE_E4',0.5],#3['NOTE_G4',0.5],#5['NOTE_F4',0.5],#4#4['NOTE_E4',3],#3['NOTE_E4',0.5],#3['NOTE_G4',0.5],#5#5['NOTE_A4',1.5],#6['NOTE_G4',0.5],#5['NOTE_A4',1],#6['NOTE_G4',0.5],#5['NOTE_E4',0.5],#5#6['NOTE_G4',1],#5['NOTE_D4',3],#2#7['NOTE_C4',1.5],#1['NOTE_A3',0.5],#.6['NOTE_D4',0.5],#2['NOTE_E4',0.5],#3['NOTE_G3',0.5],#.5['NOTE_B3',0.5],#.7#8['NOTE_A3',4],#.6[0,1],#0['NOTE_E4',0.5],#3['NOTE_D4'',0.5],#2['NOTE_C4',1.5],#1['NOTE_B3',0.5],#.7#['NOTE_A3',1.5],#.6['NOTE_E3',0.5],#.3['NOTE_A3',2],#.6#['NOTE_A3',1],#.6['NOTE_A4',0.5],#6['NOTE_G4',0.5],#5['NOTE_E4',1],#3['NOTE_G4',0.5],#5['NOTE_D4',0.5],#2['NOTE_E4',3],#3['NOTE_E4',0.5],#3['NOTE_D4',0.5],#2['NOTE_C4',1.5],#1['NOTE_B3',0.5],#.7['NOTE_A3',1.5],#.6['NOTE_E3',0.5],#.6['NOTE_A3',2],#.6[0,1],#0['NOTE_D4',0.5],#2['NOTE_C4',0.5],#1['NOTE_A3',1],#.6['NOTE_C4',0.5],#1['NOTE_D4',0.5],#1['NOTE_E4',3],#3*/['NOTE_E4',1],#3逐草四方['NOTE_A4',1.5],#6['NOTE_G4',0.5],#5['NOTE_A4',1],#6['NOTE_G4',0.5],#5['NOTE_E4',0.5],#3['NOTE_G4',1],#5['NOTE_D4',3],#2['NOTE_C4',1.5],#1['NOTE_A3',0.5],#.6['NOTE_D4',0.5],#2['NOTE_E4',0.5],#3['NOTE_G4',0.5],#5['NOTE_FS4',0.5],##4['NOTE_E4',3],#3['NOTE_E4',0.5],#3['NOTE_G4',0.5],#5['NOTE_A4',1.5],#6['NOTE_G4',0.5],#5['NOTE_A4',1.0],#6['NOTE_G4',0.5],#5['NOTE_E4',0.5],#3['NOTE_G4',1.0]],#5['NOTE_D4',3],#2['NOTE_C4',1.5],#1['NOTE_A3',0.5],#.6['NOTE_D4',0.5],#2['NOTE_E4',0.5],#3['NOTE_G3',0.5],#.5['NOTE_B3',0.5],#.7['NOTE_A3',3],#.6[0,1],#0['NOTE_E4',0.5],#3应知爱意似['NOTE_D4',0.5],#2['NOTE_C4',1.0],#1['NOTE_C4',0.5],#1['NOTE_B3',0.5],#.7['NOTE_A3',1.5],#.6['NOTE_E3',0.5],#.3['NOTE_A3',2.0],#.6[0,1],#0['NOTE_A3',0.5],#.6['NOTE_G3',0.5],#.5['NOTE_E3',1.0],#.3['NOTE_G3',0.5],#.5['NOTE_D3',0.5],#.2['NOTE_E3',3.0],#.3[0,1],#0['NOTE_E4',0.5],#3身经百劫也['NOTE_D4',0.5],#2['NOTE_C4',1.0],#1['NOTE_C4',0.5],#1['NOTE_B3',0.5],#.7['NOTE_A3',1.5],#.6['NOTE_E4',0.5],#3['NOTE_D4',2.0],#2[0,1],#0['NOTE_D4',0.5],#2['NOTE_C4',0.5],#1['NOTE_A3',1.0],#.6['NOTE_B3',0.5],#.7['NOTE_G3',0.5],#.5['NOTE_A3',3.0],#.6]tone.py文件TONE={'NOTE_B0':31,'NOTE_C1':33,'NOTE_CS1':35,'NOTE_D1':37,'NOTE_DS1':39,'NOTE_E1':41,'NOTE_F1':44,'NOTE_FS1':46,'NOTE_G1':49,'NOTE_GS1':52,“NOTE_A1”:55,“NOTE_AS1”:58,“NOTE_B1”:62,“NOTE_C2”:65,“NOTE_CS2”:69,“NOTE_D2”:73,“NOTE_DS2”:78,“NOTE_E2”:82,'NOTE_F2':87,'NOTE_FS2':93,'NOTE_G2':98,'NOTE_GS2':104,'NOTE_A2':110,'NOTE_AS2':117,'NOTE_B2':123,'NOTE_C3':131,'NOTE_CS3':139,'NOTE_D3':147,'NOTE_DS3':156,'NOTE_E3':165,'NOTE_F3':175,'NOTE_FS3':185,'NOTE_G3':196,'NOTE_GS3':208,'NOTE_A3':220,“NOTE_AS3”:233,“NOTE_B3”:247,“NOTE_C4”:262,“NOTE_CS4”:277,“NOTE_D4”:294,“NOTE_DS4”:311,“NOTE_E4”:330,“NOTE_F4”:349,“NOTE_FS4”:370,“NOTE_G4”:392,“NOTE_GS4”:415,'NOTE_A4':440,'NOTE_AS4':466,'NOTE_B4':494,'NOTE_C5':523,'NOTE_CS5':554,'NOTE_D5':587,'NOTE_DS5':622,'NOTE_E5':659,'NOTE_F5':698,'NOTE_FS5':740,'NOTE_G5':784,'NOTE_GS5':831,'NOTE_A5':880,'NOTE_AS5':932,'NOTE_B5':988,'NOTE_C6':1047,'NOTE_CS6':1109,“NOTE_D6”:1175,“NOTE_DS6”:1245,“NOTE_E6”:1319,“NOTE_F6”:1397,“NOTE_FS6”:1480,“NOTE_G6”:1568,“NOTE_GS6”:1661,“NOTE_A6”:1760,'NOTE_AS6':1865,'NOTE_B6':1976,'NOTE_C7':2093,'NOTE_CS7':2217,'NOTE_D7':2349,'NOTE_DS7':2489,'NOTE_E7':2637,'NOTE_F7':2794,'NOTE_FS7':2960,'NOTE_G7':3136,'NOTE_GS7':3322,'NOTE_A7':3520,'NOTE_AS7':3729,'NOTE_B7':3951,'NOTE_C8':4186,'NOTE_CS8':4435,'NOTE_D8':4699,'NOTE_DS8':4978,}main.pyimporttimeimportRPi.GPIOasGPIOfromtoneimportTONEGPIO.setmode(GPIO.BCM)GPIO。setwarnings(False)defbeep(channel:int,freq:int,duration:float,*,rising_tone:float=1):"""playanote:paramchannel:GPIOnumber,需要和上面一样GPIO.setmode(GPIO.BCM)对应:paramfreq:frequency:paramduration:playingtime:paramrising_tone:升降调0.3~1.0~3.0:return:"""iffreq<=0:time.sleep(持续时间)返回pwm=GPIO。PWM(channel,freq*rising_tone)#输出这个频率的电平try:pwm.start(0)pwm.ChangeDutyCycle(50)ifduration>0:time.sleep(duration)#playdurationfinally:pwm.stop()defplay(channel:int,sheet:list):"""playnumberednotationNotation可以采用以下格式(参考上面的txdx.py):-[notename(string),duration(s)]-[frequency(int),duration(s)]:paramchannel:GPIO编号,需要和上面的GPIO.setmode(GPIO.BCM)对应:paramsheet:简谱:return:"""GPIO.setup(channel,GPIO.OUT)forminsheet:beep(channel,TONE[m[0]]ifm[0]inTONEelseint(m[0]or0),m[1])try:fromtxdximporttxdx_sheetplay(1,txdx_sheet)finally:GPIO.cleanup()
