Mac Sierraでも動作するAquesTalkの音声再生アプリMYukkuriVoiceを作った
アプリの説明は動画の中で説明しているので、この記事では、このアプリを作った時に得られた
(役に立たない部分が多そうな)知見について話そうと思う。
https://github.com/taku-o/myukkurivoice
Macのゆっくり事情
いわゆるゆっくりの声はAquesTalkというライブラリで作るのだけど、この声を出すアプリは、
- SofTalk (Windows) http://www35.atwiki.jp/softalk/
- 棒読みちゃん (Windows) http://chi.usamimi.info/Program/Application/BouyomiChan/
- ゆっくろいど (Mac) http://www.yukkuroid.com
- ゆくも (Webブラウザ版) http://www.yukumo.net
などがある。
AquesTalk
この系統のアプリの仕組み
AquesTalk(http://www.a-quest.com)のライブラリには、
- AqKanji2Koeという音声記号列に変換するライブラリと、
- AquesTalk(1と2とpicoがある)という、↑で作成した音声記号列をWAVに変換するライブラリ
があり、
この2つの機能を利用して声を再生および保存するのが、この手のアプリの基本的な仕組みです。
日本語のメッセージ ↓ ↓ AqKanji2Koe ↓ 音声記号列 ↓ ↓ AquesTalk ↓ WAVバイナリ
AquesTalkのライセンス
AquesTalkのライブラリには
- 開発するためのライセンスと、
- 使用するためのライセンスと、
- 頒布するためのライセンス
がある。
これらのライセンスは AQUEST Online Store(http://shop.a-quest.com/?mode=cate&cbid=1377248&csid=0)で購入する。
よって、商売などで作成したアプリを配布するには頒布ライセンスが必要なのだが、
広く公開するアプリで個人利用における無償配布規定に従える場合は、
個人利用ライセンスを利用できる(審査あり)。
Node.js + Native
- 今回作成したアプリはElectronで作られている。
- AquesTalkのライブラリはダイナミックライブラリで出来ている。
ということで、
アプリの機能を実現するには、Node.jsからダイナミックライブラリを呼び出す方法が必要になった。
Node.jsからNativeの機能を呼び出す方法は、調べると、
- Node.jsのネイティブ拡張
- Node ffi https://github.com/node-ffi/node-ffi
- SWIG http://swig.org
- emscripten https://github.com/kripken/emscripten
などがあった。
3番目のSWIGは色々な言語からの呼び出しに対応していて、一見凄そうだが、
冷静に考えると使う側からすると、必要な言語から呼び出せれば、それで良いかな、という気がしないでもない。
一番下のemscriptenはよく調べていないけれど、
Node ffiとSWIGは、最終的にはNode.jsのネイティブ拡張と同じことをしているっぽい?
(深く追いませんけど)
今回はNode ffiを利用しましたが、結構安定している印象。
Node ffiの使い方の例は、大体このような感じ
var ffi = require('ffi'); var ref = require('ref'); var ptr_uchar = ref.refType(ref.types.uchar); var ptr_int = ref.refType(ref.types.int); var ptr_void = ref.refType(ref.types.void); // unsigned char * AquesTalk2_Synthe_Utf8(const char *koe, int iSpeed, int * size, void *phontDat) var framework_path = 'AquesTalk2.framework/Versions/A/AquesTalk2'; var ptr_AquesTalk2_Synthe_Utf8 = ffi.DynamicLibrary(framework_path).get('AquesTalk2_Synthe_Utf8'); var fn_AquesTalk2_Synthe_Utf8 = ffi.ForeignFunction(ptr_AquesTalk2_Synthe_Utf8, ptr_uchar, [ 'string', 'int', ptr_int, ptr_void ]); var alloc_int = ref.alloc('int'); var encoded = ''; var speed = 100; var phont_data = ....; var r = fn_AquesTalk2_Synthe_Utf8(encoded, speed, alloc_int, phont_data); var buf_wav = ref.reinterpret(r, alloc_int.deref(), 0);
動画
動画作成者向けのアプリなので、その層の人に情報を伝えるには、動画を作る必要がある。たぶん。
ボイスロイド
この動画はボイスロイドを解説者として採用している。
(おっさんの声より良いという判断。だが、実際、ミス無く喋るのは難しい、ので手間はあまり変わらないのだ)
ボイスロイドの会話は、ゆっくり系の声より会話の速度が速い。同じ会話を話させても短い時間で終わる。
ゆっくりに同じ早さで話させると、早口に聞こえがちなようだ。
解説者として使いやすいボイスロイドは、自分の主観では、
結月ゆかりの方が使いやすい。
たまに苦手な台詞、言い回しがあり、その場合は、台詞を変えて回避すると良い。
逆に使いにくそうなのは、
調音が少し難しいのと、関西弁の発音にされちゃうのが理由。
会話のリズム
動画の会話の間をうまく制御できない人は、セリフの合間を作らずにひたすら喋らせまくれば、
センスが無い人でもそれなりに誤魔化せる、という動画作成者的ノウハウがあるらしい。
(1秒以上、会話していない時間を作らないようにする)
実際、このノウハウは効果的だと思う。
2人以上話す人が居ると、切れ間のない会話を作りやすい。
おわり
未知の作業が多かったので、いろいろ勉強になった
vagrant + debian + plone
install vagrant
- 省略
install Debian
cd /usr/local/src/vagrant vagrant box add debsqueeze64 http://www.emken.biz/vagrant-boxes/debsqueeze64.box vagrant box list vagrant init
edit Vagrantfile
- 運用スタイルに合わせて適当に
- config.vm.box = "base" + #config.vm.box = "base" + config.vm.box = "debsqueeze64" - #config.vm.network :public_network + config.vm.network :public_network
- 動作確認
# 起動/停止/ssh
vagrant up
vagrant halt
vagrant ssh
install plone
vagrant up vagrant ssh
- ploneのインストール。
- 使いたいバージョンを入れる。この例では古いバージョン
sudo apt-get update sudo apt-get install python-setuptools python-dev build-essential libssl-dev libxml2-dev libxslt1-dev libbz2-dev libjpeg62-dev sudo apt-get install libreadline-dev wv poppler-utils sudo apt-get install git wget --no-check-certificate https://launchpad.net/plone/3.3/3.3.6/+download/Plone-3.3.6-UnifiedInstaller.tgz tar xf Plone-3.3.6-UnifiedInstaller.tgz cd Plone-3.3.6-UnifiedInstaller.tgz ./install.sh standalone
- 動作確認
cd ~/Plone/zinstance # foreground/start/stop bin/plonectl fg bin/plonectl start bin/plonectl stop
/sbin/ifconfig
追加の設定
- sitecustomize.pyを入れる
vi /home/vagrant/Plone/Zope-2.10.13-final-py2.4/lib/python/sitecustomize.py
+ import sys + sys.setdefaultencoding("utf-8")
- ploneのポートを適当に設定
vi /home/vagrant/Plone/zinstance/parts/instance/etc/zope.conf
+ <http-server> + address 12200 + </http-server> + <ftp-server> + address 12221 + </ftp-server>
Emacs Lispテクニックバイブル 感想
Emacs Lisp テクニックバイブルを入手して読了。
読み終わるのに結構時間かかった。
http://www.amazon.co.jp/dp/4774148970
- 一般的な言語の教科書っぽい感じ
- 練習問題って項目だけど、かならず問題って訳ではなくて、操作の例とかの場合も
- まとめがいい感じ
Emacs Lispをバリバリ書かない人には、間違いなく良い本。
書いている人にとっても、本の後半、テストデバッグ、モード作成、外部プログラムとの協調、非同期処理あたりは面白い感じ。
前作のEmacsテクニックバイブルと違って、即使える系の本じゃないけど、エディタマニアー↑な自分には面白かった。
Emacs本、あんまり頻繁に出る訳じゃないから、
たまに出る本ががっかりだと、残念感が半端無いから、良い本で本当によかった。
ujihisa.vim#2
- 2011/11/19 13:00 - 20:00
- mixi
- #ujihisa
http://partake.in/events/b886679b-e8c0-44af-9df2-62a6e5cfd6ed
menu
- Keynotes
- Tech talks
- Lightening talks
- "Start Vim script" with choplin
- "My Unite plugins" with basyura
"Illustrate Vim core source code, dissing" with KoRoN
- too many ifdef
ifdefは本当に多い!!
- many static variables
- big big switch
insert、normalなどの処理がswitchに集中。そこで全て処理。
"My Unite plugins" with basyura
- unite-yarm
- yet another redmine
- チケットの一覧
- チケットの編集保存
- ブラウザの起動
- yet another redmine
- unite-uiki
- おれおれwiki
- キーワードjump
- unite-rails
- コントローラー、モデル、ビューの制御
"Vim script getting started" with m-kanno
- :help
- :help use-cpo-save
"Vim-pep8" jbking
- pep8
"LiveCoding: implementing quickrun hook" with thinca
- create editvar plugin.
- livecoding
"The truth of Vim by unprecedented point of view" with ShougoMatsu
- いつもの
"世界に一つだけのエディタ" with ShougoMatsu
- いつもの
"Simplenoting with Vim" with sora_h
"Start Vim script" with choplin
- URL捜索中
"To be a good programmer" with ujihisa
- バンクーバーから、このために来た
- 結婚
"(untitled)" with Kana Natsuno
- いない
感想
- いろいろなイベントと日付が重なりすぎて、さすがにもったいなかった気もする。
- ところで、あんまり関係ないけど、家に帰ったら、Vimテクニックバイブル第2刷が家に届いていた!!!
[perl] YAPC::Asia Tokyo 2011
YAPC::Asia Tokyo 2011
2011/10/15 大岡山キャンパス
http://yapcasia.org/2011/
スポンサー枠で遊びに行ってきました。
仕方ない話だけど、遅くにしかいけなくて、LTしか見られなかった。
Common Lispってどんな言語か
- いろいろ - CPAN = Common Lisp
- Perlって小さい言語だな、と。
福岡のいいところ
- 交通便利
- 物価安い
- 食べ物うまい
- ガイアックスは福岡に拠点をつくる予定
プログラムの静的解析で悪いモジュールを探す
- 多くの人が関わる大きなモジュール
- 多くのライブラリを使い、多くのライブラリから使われるモジュール
- 計測して見つけ出す
ぼくのかんがえたさいきょうのえろさいとの舞台裏
Managing A Band of Hackers
- ハッカーの特徴
- 一人では生きられない
- 物事に飽きやすい
- 興味を優先する
- 朝遅い
- 空気読めない
- ほかにもマネージメントの進め方みたいな話。一番参考になったかも
Yokohama.vim #2
座談形式Vim勉強会
2011/09/25 13:00 〜
http://atnd.org/events/19649
キーマッピングを考える by tsukkee
- https://gist.github.com/1240267
- jjに
マッピングすると良いのではないか、という提案 - ,に機能をマッピングする人が多いけれど、ftFTの移動で使うから、良ろしくない。
:help ,
submode.vim
https://github.com/kana/vim-submode
状況によってマッピングを変更したり
arpeggio.vim
https://github.com/kana/vim-arpeggio
同時押しをサポートしている。
実装がおもしろいよ
Shougoさん発表
いろいろ
Vimテクニックバイブルの中から良いと思うネタはどれ
ぼくがさいきょうとかんがえているちっぷすはとりあげられませんでした。
開発環境勉強会 2011/08/07
地震で延期して、なんとなく行けることになってしまった開発環境勉強会いってきました。
何故か、難度高め。
グリー株式会社 2011/08/07 12:00-
http://partake.in/events/afe6657b-b54c-44d2-8af5-d39e98e6f2bd
XMonadv by @pi8027
- 設定の進め方とか
Vim愛について by @ShougoMatsu
- 途中で意識が飛んだ
- Vimテクニックバイブル
http://nanasi.jp/articles/howto/note/vimtech-150tips-book.html
スーツとEmacsと開発環境 by @kiwanami
- 交通費が会社から出ているんだって
仕事
- 謝罪、消火
- 技術、人員調整
- 受注前活動
開発環境どっち使うみたいな
- レガシー vs モダン
- 開発環境に時間がかかるなら、
Cacoo
- https://cacoo.com/
- このサービスいいね!!
- 今回のヒット
ベンチマークドリブン開発の話 by @nyaxt
- 無駄なツールを入れないで、作業に集中できるように
- 現実逃避しづらくする
ベンチマークドリブン開発
- テストドリブンとの違い。性能を重視のすすめかた
- 性能の変化をみて、何か問題が起きていないかを調べる方法の提唱。
- モチベーションを維持しやすくなる
- Loboというツールが良いらしい。
(途中抜け)
貧者の入力デバイス by @todesking
- 「キーボードを切りました」