This example will showcase how to save the interpreted speech from Stretch's [ReSpeaker Mic Array v2.0](https://wiki.seeedstudio.com/ReSpeaker_Mic_Array_v2.0/) to a text file.
<palign="center">
<imgsrc="images/respeaker.jpg"/>
</p>
Begin by running the `sample_respeaker.launch` file in a terminal.
Begin by running the `respeaker.launch` file in a terminal.
```bash
# Terminal 1
roslaunch respeaker_ros sample_respeaker.launch
```
Then run the speech_text node.
```bash
@ -22,7 +18,6 @@ Then run the speech_text node.
cd catkin_ws/src/stretch_tutorials/src/
python3 speech_text.py
```
The ReSpeaker will be listening and will start to interpret speech and save the transcript to a text file. To stop shutdown the node, type **Ctrl** + **c** in the terminal.
### The Code
@ -66,7 +61,6 @@ if __name__ == '__main__':
rospy.spin()
```
### The Code Explained
Now let's break the code down.
@ -75,18 +69,15 @@ Now let's break the code down.
```
Every Python ROS [Node](http://wiki.ros.org/Nodes) will have this declaration at the top. The first line makes sure your script is executed as a Python3 script.
```python
import rospy
import os
```
You need to import rospy if you are writing a ROS Node.
You need to import `rospy` if you are writing a ROS [Node](http://wiki.ros.org/Nodes).
```python
from speech_recognition_msgs.msg import SpeechRecognitionCandidates
```
Import `SpeechRecognitionCandidates` from the `speech_recgonition_msgs.msg` so that we can receive the interpreted speech.
Set up a subscriber. We're going to subscribe to the topic "*speech_to_text*", looking for `SpeechRecognitionCandidates` messages. When a message comes in, ROS is going to pass it to the function "callback" automatically.
Define the file name and create a complete path directory.
```python
with open(completeName, "a+") as file_object:
file_object.write("\n")
file_object.write(transcript)
```
Append the transcript to the text file.
```python
@ -132,9 +117,9 @@ rospy.init_node('speech_text')
SpeechText()
```
The next line, `rospy.init_node(NAME, ...)`, is very important as it tells rospy the name of your node -- until rospy has this information, it cannot start communicating with the ROS Master. In this case, your node will take on the name talker. NOTE: the name must be a base name, i.e. it cannot contain any slashes "/".
The next line, `rospy.init_node(NAME, ...)`, is very important as it tells rospy the name of your node -- until rospy has this information, it cannot start communicating with the ROS Master. **NOTE:** the name must be a base name, i.e. it cannot contain any slashes "/".