Google Text to Speech(Windows)

問題

  • Google Text to Speechで遊びたい
  • Quick StartだとGoogleCloudSDKインストールが必要で、Proxy超える必要がある。

実際のコードはこちら

この記事を読んでできること

  • Proxy環境でのGoogleTextToSpeech
  • Pythonでテキストを音声にする
  • 付録
    • VIMを使っている最中に:GetZihouって入力すると、音声で時報が流れる
    • VIMで編集中の内容を音声で流す

設定

  • サービスアカウントキーを手に入れておく

    • API
    • ナビゲーションメニュー->APIとサービス->APIとサービスの有効化->Google Text to Speech 有効
    • サービスアカウントキーの作成→プロジェクト/オーナー->JSON->DL
      • もっと詳しく知りたい場合は検索したほうが早い
  • Pythonでpip

    # Python3.6環境 
    pip install --upgrade google-cloud-texttospeech
    # googleapiclient使いたい
    pip install --upgrade google-api-python-client
    conda upgrade pip
    pip install --upgrade oauth2client
    
  • Windows

    • APIPythonから叩きたいので、環境変数を使ってやります
    • set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
    • ↑プログラミング側から実行する処理を入れているので、無視してもいい
  • ソースの参考資料

  • basy64でエラーが起きた場合

    TypeError: a bytes-like object is required, not 'str'
    
    • base64encodeにわたす文字列はutf-8エンコードしないとエラーになる
    • python/socks.pyのVersionによって、上手くいかないことがある。
      • username/passwdをencodeせずにstrのままbase64 Encodeを処理しようとする。
      • socks.pyのversion = 1.6.7でなければ要注意
            conda install pysocks
        
  • audio再生部分

    • Pythonから音声再生まで実行する場合は、ライブラリ入れておきます
    • MP3
    • WAV
      • Pyaudio
        pip install pyaudio 
        pip install pygame
        
  • VIMからキック

"google text to speech"{{{
function! s:get_google_zihou()"
    let s:py_script = "c:/pg/google_text2speech/post_text.py"
    silent execute '!D:/Anaconda3/envs/dev/python.exe ' . ' ' . s:py_script . ' -c time'
    unlet! s:py_script
endfunction augroup END"
command! -nargs=0 GetZihou call s:get_google_zihou()

function! s:get_google_text()"
    let s:file = tempname()
    silent execute ":write " . s:file

    let s:py_script = "c:/pg/google_text2speech/post_text.py"
    execute '!D:/Anaconda3/envs/dev/python.exe ' . ' ' . s:py_script . ' -f ' . s:file

    call delete(s:file)
    unlet! s:file
    unlet! s:py_script
endfunction augroup END"
command! -nargs=0 ChangeTex call s:get_google_text()
"}}}