4.2. 音声ファイルの作成 (handson-cli-polly-stream-ssml.mp3)¶
作業の目的 [why]¶
音声用ドキュメントファイル"handson-cli-polly.xml"を利用して音声ファイル"handson-cli-polly-stream-ssml.mp3"を作成します。
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在する。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
音声用ドキュメントファイル"handson-cli-polly.xml"が存在する。
- 事前条件2
Polly音声ID"Mizuki"が存在する。
- 事前条件3
音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在しない。
作業対象 [what]¶
Pollyサービス
標準時間(合計)¶
8分
パラメータ設定¶
- パラメータ設定の標準時間
2分
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: 音声用ドキュメントファイル
今回は"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly.xml"を音声用ドキュメントファイルとします。
リソース2: 音声ファイル用ディレクトリ
今回は"${HOME}/environment/tmp-handson-cli-polly"を音声ファイル用ディレクトリとします。
ディレクトリが存在することを確認します。
コマンド:
ls -d ${HOME}/environment/tmp-handson-cli-polly
結果(例:存在する場合):
${HOME}/environment/tmp-handson-cli-polly
存在しない場合は作成します。
コマンド:
mkdir -p ${HOME}/environment/tmp-handson-cli-polly
リソース3: エンジン名
利用するエンジンの名称です。
今回は"standard"とします。
リソース4: 言語コード名
利用する言語コードの名称です。
今回は"ja-JP"とします。
リソース5: テキストタイプ名
利用するテキストタイプの名称です。
今回は"ssml"とします。
リソース6: 出力フォーマット名
利用する出力フォーマットの名称です。
今回は"mp3"とします。
リソース7: サンプルレート名
利用するサンプルレートの名称です。
今回は"22050"とします。
リソース8: 音声ID名
利用する音声IDの名称です。
今回は"Mizuki"とします。
リソース9: 音声ファイル名
作成する音声ファイルの名称です。
今回は"handson-cli-polly-stream-ssml.mp3"とします。
パラメータの指定¶
作業に必要なパラメータを変数に格納をします。
0.1. 音声用ドキュメントファイル名の指定¶
音声用ドキュメントファイル名を指定します。
変数の設定:
DIR_POLLY_SPEECH_DOC="${HOME}/environment/tmp-handson-cli-polly"
変数の設定:
SPEECH_DOC_NAME='handson-cli-polly.xml'
変数の設定:
FILE_POLLY_SPEECH_DOC="${DIR_POLLY_SPEECH_DOC}/${SPEECH_DOC_NAME}" \ && echo ${FILE_POLLY_SPEECH_DOC}
結果(例):
${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly.xml
0.9. 出力音声ファイル名の指定¶
出力音声ファイル名を指定します。
変数の設定:
STREAM_OUTPUT_NAME='handson-cli-polly-stream-ssml.mp3'
変数の設定:
FILE_POLLY_STREAM_OUTPUT="${DIR_POLLY_STREAM_OUTPUT}/${STREAM_OUTPUT_NAME}" \ && echo ${FILE_POLLY_STREAM_OUTPUT}
結果(例):
${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3
パラメータの保存¶
設定されている変数の保存先となるファイル名を指定します。
変数の設定:
DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli-polly" FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-polly-speech_stream-create.env" \ && echo ${FILE_PARAMETER}
結果(例):
${HOME}/tmp/parameter-handson-cli-polly/2019-10-07-polly-speech_stream-create.env
各変数に正しいパラメータ値が格納されていることを確認しながら保存します。
変数の確認:
cat << EOF > ${FILE_PARAMETER} # 0.a. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 0.b. AWS_DEFAULT_PROFILE:"handson-cli-polly-speechMaintUser" AWS_DEFAULT_PROFILE="${AWS_DEFAULT_PROFILE}" # 0.1. FILE_POLLY_SPEECH_DOC:"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly.xml" FILE_POLLY_SPEECH_DOC="${FILE_POLLY_SPEECH_DOC}" # 0.2. DIR_POLLY_STREAM_OUTPUT:"${HOME}/environment/tmp-handson-cli-polly" DIR_POLLY_STREAM_OUTPUT="${DIR_POLLY_STREAM_OUTPUT}" # 0.3. POLLY_ENGINE:"standard" POLLY_ENGINE="${POLLY_ENGINE}" # 0.4. POLLY_LANGUAGE_CODE:"ja-JP" POLLY_LANGUAGE_CODE="${POLLY_LANGUAGE_CODE}" # 0.5. POLLY_TEXT_TYPE:"ssml" POLLY_TEXT_TYPE="${POLLY_TEXT_TYPE}" # 0.6. POLLY_OUTPUT_FORMAT:"mp3" POLLY_OUTPUT_FORMAT="${POLLY_OUTPUT_FORMAT}" # 0.7. POLLY_SAMPLE_RATE:"22050" POLLY_SAMPLE_RATE="${POLLY_SAMPLE_RATE}" # 0.8. POLLY_VOICE_ID:"Mizuki" POLLY_VOICE_ID="${POLLY_VOICE_ID}" # 0.9. FILE_POLLY_STREAM_OUTPUT:"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3" FILE_POLLY_STREAM_OUTPUT="${FILE_POLLY_STREAM_OUTPUT}" EOF cat ${FILE_PARAMETER}
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
タスクの実施¶
- タスク標準時間
6分
1. 前処理¶
1.2. 処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: 音声用ドキュメントファイル"handson-cli-polly.xml"が存在する。
「音声用ドキュメントファイル"handson-cli-polly.xml"が存在する。」ことを確認します。
コマンド:
ls ${FILE_POLLY_SPEECH_DOC}
結果(例):
${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly.xml
事前条件2: Polly音声ID"Mizuki"が存在する。
「Polly音声ID"Mizuki"が存在する。」ことを確認します。
コマンド:
aws polly describe-voices \ --query "Voices[?LanguageCode ==\`${POLLY_LANGUAGE_CODE}\` && Id == \`${POLLY_VOICE_ID}\`].Id" \ --output text
結果(例):
Mizuki
事前条件3: 音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在しない。
「音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在しない。」ことを確認します。
コマンド:
! ls ${FILE_POLLY_STREAM_OUTPUT}
結果(例):
ls: ${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3 No such file or directory
2. 主処理¶
音声ファイルの作成¶
パラメータの確認:
cat << ETX # POLLY_ENGINE:"standard" POLLY_ENGINE="${POLLY_ENGINE}" # POLLY_LANGUAGE_CODE:"ja-JP" POLLY_LANGUAGE_CODE="${POLLY_LANGUAGE_CODE}" # POLLY_TEXT_TYPE:"ssml" POLLY_TEXT_TYPE="${POLLY_TEXT_TYPE}" # FILE_POLLY_SPEECH_DOC:"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly.xml" FILE_POLLY_SPEECH_DOC="${FILE_POLLY_SPEECH_DOC}" # POLLY_OUTPUT_FORMAT:"mp3" POLLY_OUTPUT_FORMAT="${POLLY_OUTPUT_FORMAT}" # POLLY_SAMPLE_RATE:"22050" POLLY_SAMPLE_RATE="${POLLY_SAMPLE_RATE}" # POLLY_VOICE_ID:"Mizuki" POLLY_VOICE_ID="${POLLY_VOICE_ID}" # FILE_POLLY_STREAM_OUTPUT:"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3" FILE_POLLY_STREAM_OUTPUT="${FILE_POLLY_STREAM_OUTPUT}" ETX
コマンド:
aws polly synthesize-speech \ --engine ${POLLY_ENGINE} \ --language-code ${POLLY_LANGUAGE_CODE} \ --text-type ${POLLY_TEXT_TYPE} \ --text file://${FILE_POLLY_SPEECH_DOC} \ --output-format ${POLLY_OUTPUT_FORMAT} \ --sample-rate ${POLLY_SAMPLE_RATE} \ --voice-id ${POLLY_VOICE_ID} \ ${FILE_POLLY_STREAM_OUTPUT}
結果(例):
{ "ContentType": "audio/mpeg", "RequestCharacters": "221" }
3. 後処理¶
3.1. 完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: 音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在する。
「音声ファイル"${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3"が存在する。」ことを確認します。
コマンド:
ls ${FILE_POLLY_STREAM_OUTPUT}
結果(例):
${HOME}/environment/tmp-handson-cli-polly/handson-cli-polly-stream-ssml.mp3