Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Python Houndify SDK

The Houndify Python SDK allows you to make streaming voice and text queries to the Houndify API from your Python project. The SDK provides two classes TextHoundClient and StreamingHoundClient for making text and voice queries to the Houndify API. See the Usage section below for more information.

Changes in v2.0.0

  • Both TextHoundClient and StreamingHoundClient raise a HoundifySDKError exception when authenticaion fails or connection to the server cannot be established.
  • enableVAD argument of StreamingHoundClient is False by default.

Installation

pip install houndify

Usage

The houndify package contains three classes:

  • TextHoundClient
  • StreamingHoundClient
  • HoundListener

Text Queries: TextHoundClient

This class is used for making text queries to the Houndify API. The constructor expects:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • proxyHost: (optional) Pass the host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"requestInfo= {
"Latitude": 37.388309,
"Longitude": -121.973968
}
client=houndify.TextHoundClient(clientId, clientKey, userId, requestInfo)

The method that is used for sending a text query is TextHoundClient.query(query_string) and it returns a dictionary with response JSON in it.

response=client.query("What is the weather like today?")

You can reset RequestInfo fields via the TextHoundClient.setHoundRequestInfo(key, value) and TextHoundClient.removeHoundRequestInfo(key) methods.

client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Audio Queries: StreamingHoundClient

In order to send an audio query to the Houndify API you need to initialize a StreamingHoundClient. The constructor expects the following arguments:

  • clientID: This is the Client ID of your Houndify app.
  • clientKey: This is the Client Key of your Houndify app.
  • userID: This parameter should be unique for every user that uses your app.
  • requestInfo: (optional) This should be a dictionary that will make the JSON response more accurate. See RequestInfo for supported keys.
  • sampleRate: (optional) The sample rate of the audio, either 8000 or 16000 Hz. It will default to 16000 if not supplied.
  • enableVAD: (optional) Boolean specifying whether you want to support Voice Activity Detection. If True fill() method will return True and ignore any more audio bytes after server detects silence. The default value is False.
  • useSpeex: (optional) This flag enables Speex conversion of audio. The default value is False. See Speex Compression section below for instruction on setting Speex up.
  • proxyHost: (optional) Pass host for HTTP Connect Tunnelling to make queries through proxy.
  • proxyPort: (optional) Port for HTTP Connect Tunnelling.
  • proxyHeaders: (optional) Extra headers for HTTP Connect Tunnelling.
importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, sampleRate=8000)

Additionally you'll need to extend and create HoundListener:

classMyListener(houndify.HoundListener):
# HoundListener is an abstract base class that defines the callbacks# that can be received while streaming speech to the serverdefonPartialTranscript(self, transcript):
# onPartialTranscript() is fired when the server has sent a partial transcript# in live transcription mode. 'transcript' is a string with the partial transcriptprint("Partial transcript: "+transcript)
defonFinalResponse(self, response):
# onFinalResponse() is fired when the server has completed processing the query and has a response.# 'response' is the JSON object (as a Python dict) which the server sends back.print("Final response: "+str(response))
defonError(self, err):
# onError() is fired if there is an error interacting with the server. It contains# the parsed JSON from the server.print("Error "+str(err))

Audio Queries: Code Example

Finally, you should start a request with passing an instance of your Listener to StreamingHoundClient.start(listener), pipe the audio through StreamingHoundClient.fill(samples) and call StreamingHoundClient.finish() when the request is done.

Note: StreamingHoundClient supports 8/16 kHz mono 16-bit little-endian PCM samples.

classMyListener(houndify.HoundListener):
defonPartialTranscript(self, transcript):
print("Partial transcript: "+transcript)
defonFinalResponse(self, response):
print("Final response: "+str(response))
defonError(self, err):
print("Error "+str(err))
client.start(MyListener())
# 'samples' is the list of mono 16-bit little-endian PCM samplesclient.fill(samples)
result=client.finish() # result is either final response or error

There are four more useful methods in StreamingHoundClient for resetting sample rate, location and request info fields.

client.setSampleRate(8000) #or 16000client.setLocation(37.388309, -121.973968)
client.setHoundRequestInfo("City", "Santa Clara")
client.removeHoundRequestInfo("City")

Conversation State

Houndify domains can use context to enable a conversational user interaction. For example, users can say "show me coffee shops near me", "which ones have wifi?", "sort by rating", "navigate to the first one". Both TextHoundClient and StreamingHoundClient have setConversationState(state) method that you can use to set Conversation State extracted from a previous response.

client=houndify.TextHoundClient(clientId, clientKey, userId)
response=client.query("What is the weather like in Toronto?")
conversationState=response["AllResults"][0]["ConversationState"]
client.setConversationState(conversationState)
response=client.query("What about Santa Clara?")

Speex Compression

You can use pySHSpeex module included in the SDK for sending compressed audio.

You have to pass the additional useSpeex=True flag to the StreamingHoundClient in order to enable compression.

importhoundifyclientId="YOUR_CLIENT_ID"clientKey="YOUR_CLIENT_KEY"userId="test_user"client=houndify.StreamingHoundClient(clientId, clientKey, userId, useSpeex=True)

About

Soundhound's python SDK @ https://www.houndify.com/sdks#python

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages