@@ -611,7 +611,7 @@ def volume(self):
611611 @volume .setter
612612 def volume (self , value ):
613613 self ._volume = value
614- self .value = (self .freq , self ._volume )
614+ self .value = (self .freq , self .volume )
615615
616616 @property
617617 def freq (self ):
@@ -622,14 +622,16 @@ def freq(self):
622622
623623 @freq .setter
624624 def freq (self , freq ):
625- self ._pwm_buzzer . freq (freq )
626-
625+ self .value = (freq , self . volume )
626+
627627 def _write (self , value ):
628628 # set the frequency
629- self ._pwm_buzzer .freq = value [0 ]
629+ if value [0 ] is not None :
630+ self ._pwm_buzzer .freq = value [0 ]
630631
631632 # write the volume value
632- self ._pwm_buzzer .volume = value [1 ]
633+ if value [1 ] is not None :
634+ self ._pwm_buzzer .volume = value [1 ]
633635
634636 def _to_freq (self , freq ):
635637 if freq is not None and freq != '' and freq != 0 :
@@ -688,7 +690,7 @@ def play(self, tune=440, duration=1, volume=1, n=1, wait=True):
688690 + a frequency in Hz e.g. `440`
689691 + a midi note e.g. `60`
690692 + a note name as a string e.g `"E4"`
691- + a list of single notes e.g. `[440, 60, "E4"]`
693+ + a list of note and duration e.g. `[440, 1]` or `[ "E4", 2 ]`
692694 + a list of 2 value tuples of (note, duration) e.g. `[(440,1), (60, 2), ("e4", 3)]`
693695
694696 Defaults to `440`.
@@ -712,10 +714,13 @@ def play(self, tune=440, duration=1, volume=1, n=1, wait=True):
712714 # tune isnt a list, so it must be a single frequency or note
713715 if not isinstance (tune , (list , tuple )):
714716 tune = [(tune , duration )]
717+ # if the first element isnt a list, then it must be list of a single note and duration
718+ elif not isinstance (tune [0 ], (list , tuple )):
719+ tune = [tune ]
715720
716721 def tune_generator ():
717722 for note in tune :
718-
723+
719724 # note isnt a list or tuple, it must be a single frequency or note
720725 if not isinstance (note , (list , tuple )):
721726 # make it into a tuple
@@ -724,12 +729,13 @@ def tune_generator():
724729 # turn the notes in frequencies
725730 freq = self ._to_freq (note [0 ])
726731 freq_duration = note [1 ]
732+ freq_volume = volume if freq is not None else 0
727733
728734 # if this is a tune of greater than 1 note, add gaps between notes
729735 if len (tune ) == 1 :
730- yield ((freq , volume ), freq_duration )
736+ yield ((freq , freq_volume ), freq_duration )
731737 else :
732- yield ((freq , volume ), freq_duration * 0.9 )
738+ yield ((freq , freq_volume ), freq_duration * 0.9 )
733739 yield ((freq , 0 ), freq_duration * 0.1 )
734740
735741 self ._start_change (tune_generator , n , wait )
0 commit comments