[PYTHON] Hören Sie sich einen Roman an, der auf Amazon Polly erscheinen wird

Dieser Artikel ist der 18. Tagesartikel von CPS Lab Adventskalender 2016.


Wenn Sie einen Roman lesen, sind Sie möglicherweise besorgt über die Fortsetzung und möchten die Fortsetzung lesen, während Sie fahren oder essen. Ich denke auch, dass es Zeiten gibt, in denen Sie in einem morgendlichen Pendelverkehr oder Schulzug lesen möchten, aber in einem überfüllten Zug kein Buch, Kindle oder Smartphone halten können.

Wenn Sie Amazon Polly verwenden, können Sie jetzt einen Roman anhören, der sich sehr einfach in Sprache umwandeln lässt.

Polly hat jedoch die folgenden Limits.

Die Größe des Eingabetextes beträgt bis zu 1500 abrechnungsfähige Zeichen (insgesamt 3000 Zeichen). SSML-Tags werden nicht als abrechnungsfähige Zeichen gezählt. Sie können bis zu 5 Lexika angeben, die auf den Eingabetext angewendet werden sollen. Der ausgegebene Audiostream (Composite) ist auf 5 Minuten begrenzt. Nach dieser Zeit wird der Rest des Audios abgeschnitten

Also dachte ich, ich würde jede Episode des Romans in eine Stimme umwandeln, aber vielleicht war ich in der Grenze gefangen und wusste nicht, welche Zeichen für 1500 berechnet werden müssen, also teilte ich sie in 1000 Zeichen und konvertierte sie und schließlich eine Ich habe ein Programm zum Synthetisieren und Speichern in MP3 erstellt.

AWS CLI Machen wir uns vorerst bereit für Polly. Dieses Mal werde ich es mit Python machen, aber ich werde es machen, weil es notwendig ist, die AWS CLI vorzubereiten. Es ist leicht zu sagen, und wenn Sie hier schauen, werden Sie es verstehen, aber lassen Sie es uns grob erklären.

Installieren Sie es zuerst. Ich mache es in Python, damit ich pip verwenden kann.

pip install awscli

MaxOS El Capitan Leute

pip install awscli --ignore-installed six

Nur das. Dann glaube ich, dass ich es installieren konnte, also werde ich den Zugangsschlüssel setzen und so weiter.

$ aws configure
AWS Access Key ID []: your access key
AWS Secret Access Key []: your secret key
Default region name [us-east-1]: us-east-1
Default output format [None]:

Das ist in Ordnung. Die Region kann jede Region sein, in der Polly verwendet werden kann. Wenn Sie dies jedoch nicht wissen, können Sie "us-east-1" verwenden.

AWS SDK for Python (Boto3) Für die Verwendung mit Python steht ein SDK mit dem Namen Boto3 zur Verfügung. Verwenden Sie dieses.

pip install boto3

das ist alles.

Das Beispiel in hier ist dasselbe, wird jedoch durch Ausführen des folgenden Codes konvertiert. Dann startet der Standard-MP3-Player und beginnt zu sprechen.

"""Getting Started Example for Python 2.7+/3.3+"""
from boto3 import Session
from botocore.exceptions import BotoCoreError, ClientError
from contextlib import closing
import os
import sys
import subprocess
from tempfile import gettempdir

# Create a client using the credentials and region defined in the [adminuser]
# section of the AWS credentials file (~/.aws/credentials).
session = Session(profile_name="adminuser")
polly = session.client("polly")

try:
    # Request speech synthesis
    response = polly.synthesize_speech(Text="Hello world!", OutputFormat="mp3",
                                        VoiceId="Joanna")
except (BotoCoreError, ClientError) as error:
    # The service returned an error, exit gracefully
    print(error)
    sys.exit(-1)

# Access the audio stream from the response
if "AudioStream" in response:
    # Note: Closing the stream is important as the service throttles on the
    # number of parallel connections. Here we are using contextlib.closing to
    # ensure the close method of the stream object will be called automatically
    # at the end of the with statement's scope.
    with closing(response["AudioStream"]) as stream:
        output = os.path.join(gettempdir(), "speech.mp3")

        try:
            # Open a file for writing the output as a binary stream
            with open(output, "wb") as file:
                file.write(stream.read())
        except IOError as error:
            # Could not write to file, exit gracefully
            print(error)
            sys.exit(-1)

else:
    # The response didn't contain audio data, exit gracefully
    print("Could not stream audio")
    sys.exit(-1)

# Play the audio using the platform's default player
if sys.platform == "win32":
    os.startfile(output)
else:
    # the following works on Mac and Linux. (Darwin = mac, xdg-open = linux).
    opener = "open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, output])

VoiceId Es gibt einige Arten von Stimmen, aber da es auf Japanisch nur einen Mizuki gibt, werde ich diesen verwenden.

Teilen und konvertieren

Sobald Sie hier sind, ist der Rest einfach. Speichern Sie zunächst den Naruro-Roman vor Ort. Lesen Sie dann die gespeicherte Textdatei und teilen Sie sie in jeweils 1000 Zeichen.

def split_str(s, n):
    length = len(s)
    return [s[i:i + n] for i in range(0, length, n)]

f = open(filename)
text = f.read()
f.close()
texts = split_str(text, 1000)

Nehmen wir außerdem an, dass der Prozess des Werfens an Polly schließlich zu einer Funktion gemacht wird und "stream.read ()" als Rückgabewert zurückgegeben wird. Dann müssen Sie es nur noch in MP3 schreiben

out = open('output.mp3', 'wb')
for item in texts:
    stream = request_speech(item)
    out.write(stream)
out.close()    

Dies ist abgeschlossen. Weitere Informationen finden Sie unter Offizielle Referenz. Es ist auf Japanisch.

Zusammenfassung

Es fühlt sich an, als hätte ich es tatsächlich gefragt, aber es kommt mir in den Sinn. Wenn Sie es jedoch nicht sehr intensiv hören, können Sie den Fluss überhaupt nicht erfassen. Ich denke, es ist wahrscheinlich unmöglich, es während der Arbeit zu hören. Da alle mit derselben Stimme und demselben Ton sprechen, ist das Gespräch unangenehm. Nun, wie erwartet. Ich denke, es wäre ganz anders, wenn Sie vor dem Gespräch zwischen männlichen und weiblichen Stimmen wählen könnten. Ich kann Wörter auch mit Lexikon anpassen, aber es scheint kein Japanisch zu unterstützen. Auflösung!

Wie oben erwähnt, wird der Quellcode auf Github veröffentlicht. nshiba/TextToSpeechFromPolly

Recommended Posts

Hören Sie sich einen Roman an, der auf Amazon Polly erscheinen wird
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Wie man einen Janken-Bot macht, der leicht bewegt werden kann (Kommentar)
Eine Geschichte, die mich süchtig nach dem Versuch machte, LightFM unter Amazon Linux zu installieren
Erzeugt halbautomatisch eine Beschreibung des Pakets, das in PyPI registriert werden soll
Ich wollte schnell einen Mailserver erstellen, der mit postfix + dovecot auf EC2 frei verwendet werden kann
So aktualisieren Sie PHP unter Amazon Linux 2
So testen Sie auf einer von Django authentifizierten Seite
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
Atcoder-Anfängerwettbewerb A, B Zusammenfassung der Eingabe, die tendenziell ein Problem für Python darstellt
So veröffentlichen Sie ein Blog auf Amazon S3 mit der statischen Blog-Engine "Pelican" für Pythonista
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Ich habe ein Skript geschrieben, um die Schluckuhr wiederzubeleben, die bald sterben wird
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
[Hackason] Über das Erstellen eines Werkzeugs, das auf Raspberry Pi gedruckt werden kann [Praktisches Werkzeug]