Skip to content

Commit

Permalink
add note taking with speech recognition project
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickloeber committed Nov 2, 2021
1 parent a97f965 commit 74f26fd
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 0 deletions.
27 changes: 27 additions & 0 deletions notetaking-speech-rec/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Create a Notetaking App with Speech Recognition

## Installation

On Mac you also need:
```
$ brew install portaudio
$ pip install pyobjc
```

Then use:
```
# pip install pyaudio
# pip install speechrecognition
# pip install requests gtts playsound
```

Note: On a M1 Mac you may need to use this command to install pyaudio
```
# python -m pip install --global-option='build_ext' --global-option='-I/opt/homebrew/Cellar/portaudio/19.7.0/include' --global-option='-L/opt/homebrew/Cellar/portaudio/19.7.0/lib' pyaudio
```

For more setup instructions also have a look here:
- [Pyaudio Installation](http://people.csail.mit.edu/hubert/pyaudio/)
- [Speech Recognition](https://github.com/Uberi/speech_recognition)
- [Notion API setup](https://developers.notion.com/docs/getting-started)
65 changes: 65 additions & 0 deletions notetaking-speech-rec/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import speech_recognition as sr
import gtts
from playsound import playsound
import os
from datetime import datetime
from notion import NotionClient

r = sr.Recognizer()

token = "YOUR NOTION TOKEN HERE"
database_id = "YOUR NOTION DATABASE_ID HERE"

client = NotionClient(token, database_id)

ACTIVATION_COMMAND = "hey sam"

def get_audio():
with sr.Microphone() as source:
print("Say something")
audio = r.listen(source)
return audio

def audio_to_text(audio):
text = ""
try:
text = r.recognize_google(audio)
except sr.UnknownValueError:
print("Speech recognition could not understand audio")
except sr.RequestError:
print("could not request results from API")
return text

def play_sound(text):
try:
tts = gtts.gTTS(text)
tempfile = "./temp.mp3"
tts.save(tempfile)
playsound(tempfile)
os.remove(tempfile)
except AssertionError:
print("could not play sound")



if __name__ == "__main__":

while True:
a = get_audio()
command = audio_to_text(a)

if ACTIVATION_COMMAND in command.lower():
print("activate")
play_sound("What can I do for you?")

note = get_audio()
note = audio_to_text(note)

if note:
play_sound(note)

now = datetime.now().astimezone().isoformat()
res = client.create_page(note, now, status="Active")
if res.status_code == 200:
play_sound("Stored new item")

52 changes: 52 additions & 0 deletions notetaking-speech-rec/notion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import json
import requests


class NotionClient:

def __init__(self, token, database_id) -> None:
self.database_id = database_id

self.headers = {
"Authorization": "Bearer " + token,
"Content-Type": "application/json",
"Notion-Version": "2021-08-16"
}

# read, update
def create_page(self, description, date, status):
create_url = 'https://api.notion.com/v1/pages'

data = {
"parent": { "database_id": self.database_id },
"properties": {
"Description": {
"title": [
{
"text": {
"content": description
}
}
]
},
"Date": {
"date": {
"start": date,
"end": None
}
},
"Status": {
"rich_text": [
{
"text": {
"content": status
}
}
]
}
}}

data = json.dumps(data)
res = requests.post(create_url, headers=self.headers, data=data)
print(res.status_code)
return res

0 comments on commit 74f26fd

Please sign in to comment.