読字障害の開発者でも問題なし!

ディスレクシアの開発者のためのカバー画像

与えられた状況


私は読字障害があり、さらにアファンタジアという面白い脳の特性も持っているので、読書に対して愛憎入り混じった感情があります。

一方で、ソフトウェアエンジニアリング業界のニュースやトレンドに追いつかなければなりませんが、必要な真面目で役立つ情報は書かれた形であり、上記の平均以上の集中力を要して読書バッテリーを消耗します。

いつ


サマータイムの週末が来た時、私は「追加」された1時間を有効に使いたいと考え、同じような人のためにこの状況を改善することを決めました。

任意の記事のテキストを任意の言語(私の場合は英語、ドイツ語、ルーマニア語)からmp3ファイルに変換し、「記事を聞く」という方法で、読書バッテリーを消耗させずに済むようなものを作ることにしました。

そして


私はUNIXの原則で最も重要なものを思い出しました:

「ひとつのことをして、それをうまくやれ」

なので自分に挑戦しました:

  • すでによくできている既存のものを使う
  • シェルスクリプトのみを書く
  • 31行以下に収める(今日はハロウィン🎃)
  • コマンドラインツールパイプシェルコマンドのみを使用
  • 1時間の時間制限。

🤪


やり遂げました!たくさんの素晴らしい人たちが素敵なプロジェクトを開発し、私たちと共有してくれたからこそ可能でした。多くのソフトウェアが存在し、UNIXベースのOSはシームレスにそうしたソフトウェアをつなげることを可能にしています。本当に驚くべきことです🤩

結果


スクリプト

#!/bin/sh
# このスクリプトはテキストを編集して:
#   $1 - 入力ファイル
# そしてそれを保存します:
#   out-$1 - 出力ファイル
# そして後でそれを利用してhttp://localhost:5002/api/ttsをCURLで:
#   docker run -it -p 5002:5002 synesthesiam/mozillatts:en
# TTSがサポートする任意の言語でタグの最後を置き換えることができます
# それは:
#  - 出力ファイルの各文に対して.wavファイルを生成する
#  - wavファイルを1つに結合する
#  - audio-$1.mp3という名前の.mp3ファイルに変換する

cat "$1" | awk -F'\.' '{ for (i=1; i<NF; i++) print $i ".\n" }' | tr "'" "´" |tr "\"" "´" > out-"$1"

input="out-$1"
while IFS= read -r line
do
  curl --location --request POST 'http://localhost:5002/api/tts' --header 'Content-Type: text/plain' --data-raw "$line" -o "audio_$(date +%s).wav"
done < "$input"

ls audio*wav |awk '{print "file " $0}' > wav-list.txt

ffmpeg -f concat -safe 0 -i wav-list.txt -vn -ar 44100 -ac 2 -b:a 128k audio-$1.mp3

rm out-$1
rm *wav
rm wav-list.txt

open "audio-$1.mp3"

全画面モードにする / 全画面モードを終了する

材料リスト

  1. Mozilla/TTS
  2. FFMPEGコマンドライン このソフトウェアは火星に行きました🔴
  3. UNIXベースのOS
  4. docker コマンドライン
  5. 上記のスクリプト

「レシピ」

# ターミナルで次のコマンドを実行: 
docker run -it -p 5002:5002 synesthesiam/mozillatts:en
# 'en'タグを'de', 'fr', 'ro'等に置き換える
# 聞きたいテキストを選んでコピー
# それを`article.txt`というファイルに貼り付ける
# スクリプトを`audiofy.sh`としてテキストファイルの隣に保存する
# ターミナルで次のコマンドを実行:
sh audiofy.sh article.txt

全画面モードにする / 全画面モードを終了する

デモ

優れたMozilla/TTSのREADMEファイルから抜粋を使用してデモを行いました。例えば:

Mozilla TTS READMEのスニペット

soundcloudで出力を聴いてみてください(「新しいタブで開く」機能を使ってテキストを見ながら自然に聞こえる合成音声に驚いてください)。

結論


プロジェクトに1時間しか設定していませんでしたが、結果には本当に満足していますし、改善のためにまた戻ってくるでしょう。これを実装することは本当に楽しかったです。

また、この投稿を書いている間に、Google Newsフィードに出現したほとんどのニュース記事を聞きました。なぜなら私のスクリプトをテストとして変換していたからです。

シナジー:達成
生産性:向上
読書バッテリー:保護

✌️
-------

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/realvorl/dyslexic-dev-no-problem-1nfc