We all know that a Smart Speaker to excel above its competitors has to excel in first being a good “Speaker” and a speaker has a basic and essential feature which is “volume control”. But things get better if you can control your volume with your voice.
So, we have implemented a feature that allows the user to control the volume of the audio with his/her voice.
Below are the steps we had to follow to implement this feature
Step 1: Creating the Skills
The skills required to implement the ‘volume-action’ is implemented in the SUSI Server repo itself.
The skill is located in
susi_server/conf/system_skills/general/en/en_0001_foundation.txt |
And below are the skills required
set audio volume to *|set audio volume to * percent|set audio volume to * points|set volume to *|set volume to * percent|set volume to * points !console:Audio volume is now $1$ percent. {“actions”:[ {“type”:“audio_volume”, “volume”:$1$} ]} eol |
We get the following response from the server
“actions”: [ { “volume”: “80”, “type”: “audio_volume” }, { “type”: “answer”, “expression”: “Audio volume is now 80 percent.” } |
Step 2: Finding Volume Action in the server response
Now that our Server responds to our queries regarding the voice change action , we must implement it in our Smart Speaker Client.
We first create a custom class in our in the SUSI API Wrapper repo which has only one member
class VolumeAction(BaseAction): def __init__(self , volume): super().__init__() self.volume = volume |
We check through the actions in the server’s response
elif isinstance(action, VolumeAction): result[‘volume’] = action.volume |
Step 3: Implementing it in the client
Now to implement the action in our client we use a library called ‘alsaaudio’ to control the master volume of our RaspberryPi
m = alsaaudio.Mixer() m.setvolume(int(reply[‘volume’])) os.system(‘play {0} &’.format(self.components.config[‘detection_bell_sound’])) # nosec #pylint-disable type: ignore m = alsaaudio.Mixer() m.setvolume(int(reply[‘volume’])) os.system(‘play {0} &’.format(self.components.config[‘detection_bell_sound’])) # nosec #pylint-disable type: ignore |
Now the user can easily change the speaker using the voice commands
References
- https://pypi.org/project/pyalsaaudio/
- https://github.com/fossasia/susi_server
- https://github.com/fossasia/susi_api_wrapper
- https://github.com/fossasia/susi_linux
Tags
GSoC, GSoC’18, SUSI.AI, SUSI Linux, Smart Speaker , SUSI API Wrapper, SUSI Server, FOSSASIA, Volume Action