drill_devのブログ

にんともかんとも

rebuild.fm的アニメを見るための動画配信サービス比較

こないだのnaoyaさんの aftershow で、定番アニメの話をしていた。 naoyaさんは、Blueray買って高品質で見てるって言ってたけど、普通ネットだよねーってことで。

動画配信サービス別で あにこれのおすすめアニメランキング の上位+αを配信してるかどうかを調べてみた。

タイトル 放映時期 話数 製作 BANDAI dアニメストア dTV U-NEXT NetFlix Hulu Amazonプライム
STEINS;GATE シュタインズ・ゲート 2011年春 24話 WHITE FOX ^1
化物語 2009年夏 15話 シャフト ^1
コードギアス 反逆のルルーシュ 2006年秋 25話 サンライズ ^1
攻殻機動隊 STAND ALONE COMPLEX 2002年秋 26話 Production I.G ^1
CLANNAD AFTER STORY-クラナド アフターストーリー 2008年秋 23話 Key / ビジュアルアーツ ^1
涼宮ハルヒの憂鬱 2006年春 14話(28話) 京都アニメーション
あの日見た花の名前を僕達はまだ知らない。 2011年春 11話 A-1 Pictures ^1
COWBOY BEBOP-カウボーイビバップ 1998年春 26話 サンライズ
けいおん!! 2期 2010年春 26話 京都アニメーション ^1
Fate/Zero - フェイトゼロ 2011年秋 25話 ufotable ^1 ◯(13話まで)[^2]
ちはやふる 2011年秋 25話 マッドハウス ^1
魔法少女まどか☆マギカ 2011年冬 12話 シャフト ^1
電脳コイル 2007年春 26話 マッドハウス ^1
四畳半神話大系 2010年春 11話 マッドハウス ^1
天元突破グレンラガン 2007年春 27話 GAINAX
荒川アンダー ザ ブリッジ 2010年春 13話 シャフト
SHIROBAKO 2014年秋 24話 P.A.WORKS ^1 ^1

配信サービス自体の情報は、動画配信サービス比較ランキング! が詳しかった。アニメについては、ここ を見ればいいと思う。

このリストでの配信数は BANDAI(バンダイチャンネル)が一番だけど無料枠で見れるのが少ないとか、dTVアニメ月額考えるとコスパ高いなーとか、いろいろ勉強になった。どのサービスもお試し期間はだいたい半年だし、バンダイチャンネルは無料会員でも1話目は見れるみたいだから、画像チェックも出来るね。 そうそう、dTV系は doccomoユーザーでなくても大丈夫です。携帯キャリアのau,softbankは調べてないけどユーザーの人にはいいかも知れないよ。

それにしても、Netflixが、配信リストを公開してないっておかしいよな。日本だけじゃないよね?

100巻が読み放題のこち亀でオリンピック男を読む

少年ジャンプ+

18日までの期間限定。もっとも100巻あっても時間かかるし飽きそうだよね。

という訳で、名物キャラの日暮の登場回だけを読む。

  • 21巻6話(1980年 モスクワ)
  • 41巻6話(1984年 ロサンゼルス)
  • 49巻7話(1986年)
  • 62巻4話(1988年 ソウル)
  • 81巻1話(1992年 バロセロナ)
  • 100巻9話(1996年 アトランタ

1986年のエピソードを除いて、きちんとオリンピックイヤーに登場。しかし見事に20巻毎の登場だ。

100巻無料配信のページはコミックスの表示画像がそのままリンクになってブラウザで読めるので、画像見るだけでも両さんの変遷が判って楽しい。

ちなみに私が一番好きな表示の22巻。初めて見た時はショックでした。是非セリフの確認を。

Powershellのパラメータの機能

VoiceText Web API ではパラメータ指定が多いのだが、Powershellはパラメータの扱いが結構便利・独特である。

他の言語同様に ARGS変数の配列で受けるだけでなく、

Function Hoge {
  Param($text)
   :

と書くと、関数呼び出しの時に

Hoge -text "ホンダラだ~"

と書くと、関数内で変数textに値 "ホンダラだ~" がセットされる。

これが基本なのだけど、初期値とか型指定とか、値の限定や入力補完とかいろいろと用意されている。


Windows PowerShell 入門(6)-関数編1 (1/3):CodeZine

この辺は基礎編。今回は以下のサイトを参考にいろいろと組んでみた。

後、PowerShellの-PassThruパラメータについて - tech.guitarrapc.cóm は、-PassThru という Powershellの独特のパイプラインの考え方が判って興味深い。

VoiceText Web API の新話者の追加

VoiceText Web API えーっと。何故「クマ」?

それとサンタって・・・

という訳で、フォローしました。このPowershell版は、パラメータで話者の補完をするので。

ついでに、

  • パラメータに CmdletBinding() 追加
  • テキストを標準入力からでも指定可能に
  • 話者の初期値を show にしておきながら、必須入力という矛盾点を解消
  • -PassThru パラメータを追加。単純に指定されたテキストを返す

という bugfixと仕様追加もしておきました。
環境を用意せずに、一番簡単に VoiceText Web APIを試せるので、どーぞ。

Powershellから VoiceText Web APIをたたいて、しゃべらせるスクリプト

らいせんす

「VoiceText Web API(β)」の公開元のHOYAサービスにメールしたら、
『ライセンス表示してちょんだい』(意訳)と言われたので、MITライセンスとした。

# License : MIT
# http://mollifier.mit-license.org/

の2行を追加しただけ。

VoiceText Web API on Windows(3)

機能追加とかして、gist に上げた。

  • APIのパラメータ全部をサポートし、引数チェックを実装
  • OutFile パラメータがあれば、指定音声ファイルに出力。そうでなければ一時ファイルで終了時削除
  • NoPlay パラメータを指定すると再生しない。音声ファイルが欲しいだけのときに
  • パラメータはタブ補完出来ます。-emotion なら、hapiness→anger→sadnessが順に切り替わります。

全部で丁度100行になった。そのうち説明コメントとパラメータ指定部で 48行とは・・・

VoiceText Web API on Windows(2)

続き。参った。
Invoke-RestMethod だけど、VoiceText のユーザーだけの標準認証が通らなかった。-Credential に secure-stringを渡して・・・ってパスワード空文字を受け付けない。
仕方ないので、Headerに突っ込むことにした。実際の渡し方は前回のサーバへの送信文字列でも判るし。

param(
  [String]$text
 , [String]$speaker="takeru"
 , [String]$emotion=""
 , [String]$emotion_level="1"
 , [String]$pitch="100"
 , [String]$speed="100"
 , [String]$volume="100" )
# , [switch]$play )

Function base64_encode {
  param($str)
  $byte = [Text.Encoding]::UTF8.GetBytes( $str )
  return  [Convert]::ToBase64String( $byte )
}
Function msPlayerSync {
  param($wavfile)
  $ms = New-Object Media.SoundPlayer( (Resolve-Path $wavfile) )
  $ms.PlaySync()
}
# main
if($Env:VOICETEXT_API_KEY -eq $NULL){ # APIキーがセットされてない
  $apikey = Read-Host "YOUR_API_KEY"
  $Env:VOICETEXT_API_KEY = $apikey
}

$endpoint = "https://api.voicetext.jp/v1/tts"
$hdr = @{}
$hdr["Authorization"] = "Basic " + (base64_encode ( $Env:VOICETEXT_API_KEY + ":" ))

# check => text
if($text -eq ""){
  throw 'Please set Text!'
}
if($text.Length -gt 200 ){ # 200文字以内
  throw 'Text is in 200 characters!'
}
$rest_body = @{}
$rest_body["text"] = $text

$rest_body["speaker"] = $speaker 
$rest_body["emotion"] = $emotion 
$rest_body["emotion_level"] = $emotion_level 
$rest_body["pitch"] = $pitch 
$rest_body["speed"] = $speed 
$rest_body["volume"] = $volume 

$wavfile = [IO.Path]::GetTempFileName() + ".wav"
Invoke-RestMethod -Uri $endpoint -Method POST -Headers $hdr `
   -BODY $rest_body -OutFile $wavfile
msPlayerSync $wavfile
del $wavfile

このスクリプトを posh-VoiceText.ps1 てな名前で適当に保存する。
スクリプトを実行したことがない場合は、

Set-ExecutionPolicy RemoteSigned

を実行する必要がある。詳しくは、
Windows PowerShell 入門(3)-スクリプト編 (2/4):CodeZine を参照あれ。

このスクリプトの特徴は

  • Powershellで書いたので、Windows7 SP2以降でインストールの必要なく動く
  • 最初に APIキーを入れてね。以降は環境変数に保持してる
  • .NETのメソッドで再生するので、その場で聞ける
  • 拡張しやすいよ

って、とこかな。-text "ほげほげ" のオプション指定とかは「-」以降をTAB補完してくれます。
「-emotion sadness -emotion_level 2 -speaker takeru -speed 80」が疲れた感じがしてオススメ。

.\posh-VoiceText.ps1 -emotion sadness -emotion_level 2 `
 -speaker takeru -speed 80 -text 'だが断る。
この岸部露伴が最も好きな事のひとつは、
自分で強いと思ってるやつに「ノー!」と断ってやる事だ…'

これを全部コピーして、PowerShellコンソールに貼り付けて実行するとしゃべるよー

VoiceText Web API on Windows(1)

さて、VoiceText Web APIである。
WindowsPCでやってみる。Windows xp はダメだよ、もう。Windows 7 Home Edition.

> curl "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=おはようございます" -d "speaker=hikari"

公式ページで利用登録して、APIキーを取得すること。abc がキーとすると、-u "abc:" だ。
curl は適当にバイナリを取得してくること。Chocolatey が楽ちん。

で、上を実行して作成された vt00.wav を再生すると・・・再生出来ない。
実はエラーが発生してて、vt00.wav の中身は json形式のテキストだ。

{"error":{"message":"internal server error"}}

"-v" を追加してもう一度実行してみる。

> curl -v "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=おはようございます" -d "speaker=hikari"
* About to connect() to api.voicetext.jp port 443 (#0)
*   Trying 106.187.40.121...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* connected
* Connected to api.voicetext.jp (106.187.40.121) port 443 (#0)
 :
 :

サーバからのレスポンスは以下の通り

< HTTP/1.1 500 Internal Server Error
< Content-Type: application/json
< X-Revision: ac54b5cec38bd458aba7c100defc369220dd06a6
< Date: Sun, 13 Jul 2014 13:49:21 GMT
< Content-Length: 45
<
{ [data not shown]
100    83  100    45  100    38     38     32  0:00:01  0:00:01 --:--:--    40
* Connection #0 to host api.voicetext.jp left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
} [data not shown]

何で InternalErrorかというと文字コードUTF-8 じゃないから。
Linuxとか OSXだとこうはならないのは、ターミナルの文字コードがデフォルトUTF-8だからあいつらエラーにならない。Windows は cmd.exe も powershellシフトJISなんだよね。

という訳でとりあえず、再生優先でアルファベットを渡すことにする。

> curl -v "https://api.voicetext.jp/v1/tts" -o "vt00.wav" -u "YOUR_API_KEY:" -d "text=Good Morning." -d "speaker=hikari"

毎回、メディアプレイヤーで再生するのも面倒なので、コマンドラインから再生させることにする。
Powershell だと .NETが使えるので楽だ。

コマンドラインで .wav ファイルを再生する を参考に関数を書く。.NETのメソッドのパス引数はFullPathでないとエラーになるので、Resolve-Path を使う。

Function msPlayerSync {
  param($wavfile)
  $ms = New-Object Media.SoundPlayer( (Resolve-Path $wavfile) )
  $ms.PlaySync()
}
> msPlayerSync .\vt00.wav

おー、しゃべるしゃべる。
次回は、curl.exe を使わずに PowershellAPIのやりとりするよ。