Skip to main content

Python Client for Alexa Voice Service (AVS)

Project description

Python Client for Alexa Voice Service (AVS)

Installation

pip install git+https://github.com/richtier/alexa-browser-client.git@0.4.0#egg=alexa_browser_client

Usage

File audio

from avs_client import AlexaVoiceServiceClient


alexa_client = AlexaVoiceServiceClient(
    client_id='my-client-id',
    secret='my-secret',
    refresh_token='my-refresh-token',
)
alexa_client.connect()  # authenticate and other handshaking steps
with open('./tests/resources/alexa_what_time_is_it.wav', 'rb') as f:
    alexa_response_audio = alexa_client.send_audio_file(f)
with open('./output.wav', 'wb') as f:
    f.write(alexa_response_audio)

Now listen to output.wave and Alexa should tell you the time.

Microphone audio

from io import BytesIO

import pyaudio

from avs_client import AlexaVoiceServiceClient


buffer = BytesIO()

def callback(in_data, frame_count, time_info, status):
    buffer.write(in_data)
    return (in_data, pyaudio.paContinue)
p = pyaudio.PyAudio()
stream = p.open(
    format=pyaudio.paInt16,
    channels=1,
    rate=16000,
    input=True,
    stream_callback=callback,
)


alexa_client = AlexaVoiceServiceClient(
    client_id='my-client-id',
    secret='my-secret',
    refresh_token='my-refresh-token',
)


try:
    stream.start_stream()
    print('listening. Press CTRL + C to exit.')
    alexa_client.connect()
    alexa_response_audio = alexa_client.send_audio_file(buffer)
    if alexa_response_audio:
        with open('./output.wav', 'wb') as f:
            f.write(alexa_response_audio)
finally:
    stream.stop_stream()
    stream.close()
    p.terminate()

Authentication

To use AVS you must first have a developer account. Then register your product here. Choose “Application” under “Is your product an app or a device”?

The client requires your client_id, secret and refresh_token:

client kwarg

Notes

client_id

Retrieve by clicking on the your product listed here

secret

Retrieve by clicking on the your product listed here

refresh_token

You must generate this. See here

Refresh token

You will need to login to Amazon via a web browser to get your refresh token.

To enable this first go here and click on your product to set some security settings under Security Profile:

setting

value

Allowed Origins

https://localhost:9000

Allowed Return URLs

https://localhost:9000/callback/

Then run:

python ./avs_client/refreshtoken/serve.py \
    --device-type-id=enter-device-type-id-here \
    --client-id=enter-client-id-here \
    --client-secret=enter-client-secret-here

Follow the on-screen instructions shown at http://localhost:9000 in your web browser. On completion Amazon will return your refresh_token.

Steaming audio to AVS

alexa_client.send_audio_file streaming uploads a file-like object to AVS for great latency. The file-like object can be an actual file on your filesystem, an in-memory BytesIo buffer containing audio from your microphone, or even audio streaming from your browser over a websocket in real-time.

AVS requires the audio data to be 16bit Linear PCM (LPCM16), 16kHz sample rate, single-channel, and little endian.

Persistent AVS connection

Calling alexa_client.connect() creates a persistent connection to AVS. The connection may get forcefully closed due to inactivity. Keep open by calling alexa_client.alexa_client.conditional_ping():

import threading


def ping_avs():
    while True:
        alexa_client.conditional_ping()

ping_thread = threading.Thread(target=ping_avs)
ping_thread.start()

You will only need this if you intend to run the process for more than five minutes. More information.

Other projects

This library is used by alexa-browser-client, which allows you to talk to Alexa from your browser.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

avs_client-0.4.2-py3-none-any.whl (13.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page