MCPcopy Create free account
hub / github.com/RetiredWizard/PyDOS / __soundstmt

Method __soundstmt

PyBasic/basicparser.py:896–941  ·  view source on GitHub ↗

Parses a SOUND statement

(self)

Source from the content-addressed store, hash-verified

894 'in line ' + str(self.__line_number))
895
896 def __soundstmt(self):
897 """Parses a SOUND statement"""
898
899 self.__advance() # Advance past SOUND token
900
901 # Acquire the comma separated values
902 self.__expr()
903 freq = self.__operand_stack.pop()
904
905 self.__consume(Token.COMMA)
906 self.__expr()
907 duration = self.__operand_stack.pop()
908
909 if self.__token.category == Token.COMMA:
910 self.__advance()
911 self.__expr()
912 volume = self.__operand_stack.pop()
913 else:
914 volume = 800
915
916 if implementation.name.upper() == 'MICROPYTHON':
917 if sndPin and self.__pwm:
918 self.__pwm.freq(freq)
919 if "duty_u16" in dir(self.__pwm):
920 self.__pwm.duty_u16(volume)
921 sleep(duration/18.2)
922 self.__pwm.duty_u16(0)
923 else:
924 self.__pwm.duty(int((volume/65535)*1023))
925 sleep(duration/18.2)
926 self.__pwm.duty(0)
927 elif implementation.name.upper() == 'CIRCUITPYTHON':
928 if sndPin:
929 try:
930 Pydos_hw.sndGPIO.deinit() # Workaround for ESP32-S2 GPIO issue
931 audioPin = PWMOut(sndPin, duty_cycle=volume, frequency=freq)
932 sleep(duration/18.2)
933 audioPin.deinit()
934 quietSnd() # Workaround for ESP32-S2 GPIO issue
935 except:
936 pass
937 else:
938 try:
939 winsound.Beep(freq,int(self.__operand_stack.pop()*1000/18.2))
940 except:
941 pass
942
943
944 def __expr(self):

Callers 1

__simplestmtMethod · 0.95

Calls 5

__advanceMethod · 0.95
__exprMethod · 0.95
__consumeMethod · 0.95
quietSndFunction · 0.90
deinitMethod · 0.80

Tested by

no test coverage detected