Files
mixly3/boards/default_src/micropython/origin/build/lib/syn6288.py
2024-07-19 10:16:00 +08:00

84 lines
2.5 KiB
Python

"""
SYN6288
Micropython library for the SYN6288(speech synthesis)
=======================================================
#Preliminary composition 20220805
dahanzimin From the Mixly Team
"""
import time
from micropython import const
REG_PLAY_SST = const(0x01)
#REG_BAUD_SST = const(0x31)
#REG_STOP_SST = const(0x02)
#REG_PAUSE_SST = const(0x03)
#REG_RESUME_SST = const(0x04)
#EG_QUERY_SST = const(0x21)
#EG_DOWN_SST = const(0x88)
class SYN6288:
def __init__(self, uart):
self._uart=uart
self._uart.init(baudrate=9600)
self._state=False
self._volume="[v10]"
def _wreg(self, reg, val5=0,val3=None, data=None):
'''Write memory address'''
buffer=[0xFD,0x00,0x00,reg]
eec=0
if not val5 is None and not val3 is None :
buffer.append((val3 & 0x07) | (val5 << 3))
if not data is None:
for char in data:
buffer.append(ord(char) >> 8)
buffer.append(ord(char) & 0xFF)
buffer[2]= len(buffer)-2
for i in range(len(buffer)):
eec^=int(buffer[i])
buffer.append(eec)
self._uart.write(bytes(buffer))
def volume(self,vol=None):
if vol is None:
return int(self._volume[2:-1])
if not 0 <= vol <= 16:
raise ValueError("The effective range of volume value is 0~16")
else:
self._volume="[v{}]".format(vol)
def synthesis(self, data, music=0, blocking=True):
"""Support uincode coded speech synthesis"""
self._wreg(REG_PLAY_SST,music,3,self._volume+str(data))
time.sleep(0.1)
while blocking :
if not self.status():
break
def status(self):
"""Playback status (true is playing)"""
if self._uart.any():
state= self._uart.read()
if state==b'A':
self._state = True
if state==b'O':
self._state = False
return self._state
def hint_tones(self,number, blocking=True):
"""Play built-in prompt tone"""
if number <25:
tones="sound"+chr(ord("a")+number)
elif number <33:
tones="msg"+chr(ord("a")+number-25)
elif number <48:
tones="ring"+chr(ord("a")+number-33)
else:
raise ValueError("Input out of range")
self.synthesis(tones,blocking=blocking)