💨

語学学習に最適! Mac の say コマンドを Emacs に英語で喋らせてみよう!

に公開

はじめに

Emacsのバッファ中に、知らない英単語を見かけたとき、
「どのように発音するのだろう?」と思ったことはありませんか?

macOS には標準で say コマンドがあります。
このコマンドを使うと、テキストを音声として読み上げることができます。

コマンドラインで
say [-v voice] [-r rate] [-o outfile [audio format options] | -n name:port | -a device] [-f file | string ...]
のように使います。

例えば、Emacsバッファ中に coincide と出てきたら
ターミナルで、次のように入力すれば、
say -v "Samantha" coincide
発音を確認できます。

でも、いちいちターミナルで入力するのは面倒ですよね。

この記事では、Emacs から直接 say コマンドを呼び出し、
カーソル下の単語や選択範囲を即座に発音させる方法を紹介します。

目的

Emacsの操作を中断せずに、
バッファ中の単語や行、選択した範囲、バッファ全体を
英語で発音させることを目指します。

対象者

  • 語学学習において、英語の発音が気になる
  • Emacsエディタ内で英語の発音を確認したい方

実現方法

はじめに で少し触れたように、
macOS では、say というテキストを読み上げコマンドが標準で利用できます。

複数の音声・言語に対応しており、say -v ? を実行する事で一覧を確認できます。

出力結果中の
en_USit_IT などのロケールから
対応した voice 名
AlbertAlice などを
-v "Albert"-v "Alice"
と指定し、読み上げる言語と音声を選択できます。

~> man say
SAY(1)                                   Speech Synthesis Manager                                   SAY(1)

NAME
       say - Convert text to audible speech

SYNOPSIS
           say [-v voice] [-r rate] [-o outfile [audio format options] | -n name:port | -a device] [-f file | string ...]

DESCRIPTION
       This tool uses the Speech Synthesis manager to convert input text to audible speech and either play
       it through the sound output device chosen in System Preferences or save it to an AIFF file.
...

> say -v ?
Albert              en_US    # Hello! My name is Albert.
Alice               it_IT    # Ciao! Mi chiamo Alice.
Soumya              kn_IN    # Hello! My name is Soumya.
Alva                sv_SE    # Hej! Jag heter Alva.
Aman                en_IN    # Hello! My name is Aman.
....

Samantha (英語(アメリカ)) en_US    # Hello! My name is Samantha.

今回は、
say -v "Samantha" で、
音声に、Samantha (英語 (アメリカ)) en_US を選択し、
英語で読み上げるようにします。

環境

  • Mac

    • say コマンド
  • Emacs

準備

以下の Emacs Lisp ファイルを作成しました。

my-say.el をダウンロード後、
init.el に (require 'my-say) を追加し、
Emacs を再起動すれば準備完了です。

実行

my-say.el の interactive 関数が使えるようになっているはずです。

M-x my-say-word カーソル位置の単語を読み上げます。
M-x my-say-line カーソル位置の行を読み上げます。
M-x my-say-region 選択しているリージョンを読み上げます。
M-x my-say-buffer バッファ全体を読み上げます。
M-x my-say-stop 読み上げを停止します。

他初期設定値からの変更

my-say-voice
読み上げ音声(言語)

  • "Samantha" (初期設定、en_USの音声)
  • say -v ? で好みの言語の音声を確認の上、customize-set-variable で設定して下さい。
    • e.g. (customize-set-variable 'my-say-voice "Alexa")

my-say-rate
読み上げスピード (word per minute)

  • 160 (初期設定)
  • e.g. (customize-set-variable 'my-say-rate 120)

my-say-asynchronous
読み上げ say コマンド実行の非同期/同期実行設定

  • t 非同期実行 (初期設定)
  • nil 同期実行 読み上げ停止には C-g を実行。

まとめ

Emacs上から直接 say コマンドを利用することで、
単語や行、選択リージョン、バッファ全体を発音を即座に確認できます。
Emacsとターミナルと行き来する必要がなくなり、
語学学習の環境を向上できます。
ぜひ、ご自身のEmacs環境に導入して試してみて下さい。

Discussion