Initial commit of script to git repo
This commit is contained in:
commit
af566e3bfe
126
Pilot2AWS.py
Normal file
126
Pilot2AWS.py
Normal file
@ -0,0 +1,126 @@
|
||||
|
||||
import boto3 # pip install boto3
|
||||
import pygame # pip install pygame
|
||||
import time
|
||||
import io
|
||||
import random
|
||||
import os
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Enter your access data and your AWS region
|
||||
# -------------------------------------------------------------------
|
||||
atc_aws_key = "YOUR_AWS_KEY"
|
||||
atc_aws_secret = "YOUR_AWS_SECRET"
|
||||
atc_aws_region = "YOUR_REGION"
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Do you want to see ATC messages in the console also?
|
||||
# -------------------------------------------------------------------
|
||||
atc_show_responses = True
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# The voice model you want to use.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# Depending on the model you want, the prices are per 1m characters
|
||||
# generated vary *drastically*.
|
||||
# 'standard' is the cheapest, 'neural' the most expensive one.
|
||||
# Depending on the model you pick, the list of voices vary also.
|
||||
#
|
||||
# Pricing: https://aws.amazon.com/polly/pricing/
|
||||
# -------------------------------------------------------------------
|
||||
atc_aws_voicemodel = 'standard'
|
||||
# atc_aws_voicemodel = 'neural'
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Define where your Pilot2ATC conversation file is located
|
||||
# This file can be anywhere and have any name - just make sure you
|
||||
# put in the correct absolute path into this variable.
|
||||
# -------------------------------------------------------------------
|
||||
atc_pilot2atc_log = "C:\\Users\\Marcus\\Desktop\\ConversationText.txt"
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# NO TRESPASSING BEYOND THIS POINT
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
os.system("cls")
|
||||
print(" ")
|
||||
print(" ---------------------------------------------- ")
|
||||
print(" Pilot2AWS")
|
||||
print(" Making Pilot2ATC sound more natural")
|
||||
print(" ---------------------------------------------- ")
|
||||
print(" Developed by MarStrMind")
|
||||
print(" License: MIT")
|
||||
print(" ---------------------------------------------- ")
|
||||
print(" Using file: " + atc_pilot2atc_log)
|
||||
print(" ---------------------------------------------- ")
|
||||
print(" ")
|
||||
|
||||
# The voice names available for playback, depending on the model
|
||||
# Of course, you can remove any that you do not like
|
||||
# Sources for voice names:
|
||||
# - https://docs.aws.amazon.com/polly/latest/dg/neural-voices.html
|
||||
# - https://docs.aws.amazon.com/polly/latest/dg/standard-voices.html
|
||||
atc_voices = None
|
||||
if atc_aws_voicemodel == "standard":
|
||||
atc_voices = ["Nicole", "Russell", "Amy", "Emma", "Brian", "Aditi", "Raveena", "Joanna", "Kendra", "Kimberly", "Salli", "Joey", "Geraint"]
|
||||
# After testing, I removed Ivy from this list. It sounded too child-like.
|
||||
if atc_aws_voicemodel == "neural":
|
||||
atc_voices = ["Olivia", "Amy", "Emma", "Brian", "Arthur", "Kajal", "Niamh", "Aria", "Ayanda", "Danielle", "Gregory", "Ivy", "Joanna", "Kendra", "Kimberly", "Salli", "Joey", "Matthew", "Ruth", "Stephen"]
|
||||
# Missing in this list are Justin and Kevin -
|
||||
# they are declared as being young child voices - you normally do not hear children on an ATC transmission.
|
||||
|
||||
|
||||
# Setup our Polly session to AWS
|
||||
atc_polly_client = boto3.Session(
|
||||
aws_access_key_id=atc_aws_key,
|
||||
aws_secret_access_key=atc_aws_secret,
|
||||
region_name=atc_aws_region).client('polly')
|
||||
|
||||
# Last read line
|
||||
atc_last_line = -1
|
||||
|
||||
# Init pygame and its mixer
|
||||
pygame.init()
|
||||
pygame.mixer.init()
|
||||
|
||||
# Open file before main loop
|
||||
atc_log = open(atc_pilot2atc_log)
|
||||
|
||||
# Main run loop
|
||||
while True:
|
||||
atc_lines = atc_log.readlines()
|
||||
idx = 0
|
||||
for line in atc_lines:
|
||||
if " ATC: " in line:
|
||||
line = line.replace(" ATC: ", "")
|
||||
if idx > atc_last_line:
|
||||
# Update last read line
|
||||
atc_last_line = idx
|
||||
|
||||
# Pick a voice
|
||||
voice_to_use = random.randrange(len(atc_voices))
|
||||
|
||||
# Show what has been said so that it can be verified outside of Pilot2ATC - if the user wants it
|
||||
if atc_show_responses == True:
|
||||
print(" > ATC - [" + atc_voices[voice_to_use] + "]: " + line)
|
||||
|
||||
# Generate voice!
|
||||
# Let's keep it at OGG - best compromize between data transfer size and quality
|
||||
response = atc_polly_client.synthesize_speech(VoiceId=atc_voices[voice_to_use], OutputFormat='ogg_vorbis', Text = line, Engine = atc_aws_voicemodel)
|
||||
# And place that into a binary block
|
||||
data = io.BytesIO(response['AudioStream'].read())
|
||||
|
||||
# Place the data into pygame and play it
|
||||
pygame.mixer.music.load(data)
|
||||
pygame.mixer.music.play()
|
||||
pygame.event.wait()
|
||||
|
||||
# Increase loop count
|
||||
idx = idx + 1
|
||||
|
||||
atc_log.seek(0)
|
||||
time.sleep(3)
|
Loading…
x
Reference in New Issue
Block a user