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.
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.
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