スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Microsoft Speech Platform の音質

2011年09月27日(火)19時48分

※以下、Microsoft Speech Platform は MSSP と略し、バージョンの区別が必要な場合はその後にカッコ書きします。

8kHz から 16kHz へ

以前に「Microsoft Speech Platform の日本語音声合成エンジン」という記事を書いた際、Microsoft Haruka の録音レベルは、おそらく「8000Hz 16Bit」ではないか、ということを書きました。
そして実際、今回これから書く方法で確認した結果、MSSP(10.1)と MSSP(10.2)においては、その通り8kHzでした。
しかし、バージョンアップした MSSP(11.0)においてこれが変更され、「16kHz 16Bit」となったようです。
その割にはインストーラのサイズが変わらない(むしろ若干減っている)のが良くわからないところですが、確認は取れましたので、今回はこれ以降、どう確認したのか?について書いていこうと思います。

発見の経緯

発見の経緯ですが、MSSP がバージョンアップ(「Microsoft Speech Platform 11」参照)した際、新たに「"AudioFormats"="18"」という値をレジストリに書き込むようになったことに気付いたことが発端です。
この「AudioFormats」というのは、MSSP のプログラムを書くときに内部で使用する項目で、これが「18」の場合は「16kHz16BitMono」を意味することになります。
ただし、これだけですと単に新しくレジストリ値を規定したので、とりあえず共通のデフォルト値を設定しておいた、という可能性も否定できません。
そこで、今回はある仮説に基づき、別方面からこの設定値の信頼性を検証してみました。

SAPI5 に対する仮説

実は以前から Windows 標準の音声合成システム(SAPI5)に対して、ある仮説を持っていました。
それは「SAPI5 のサンプリング周波数の変更(リサンプリング)は単純なコピーや削除で行われているのではないか?」というものです。
なぜなら SAPI5 のリサンプリングはどうにも性能が悪く、例えば元々「16kHz 16Bit」で提供されているエンジンの音声を、「48kHz 16Bit」等に変換指定して録音すると、非常に低音質なWAVEファイルが出来上がるからです。
そして、この仮説が正しければ、生成された WAVE ファイルをバイナリエディタで開き、一サンプルずつ数値を確認していけば、本来のサンプリング周波数の確認ができることになります。

サンプリング周波数とは

この先へ進む前に必要な事前知識として、WAVE データにおけるサンプリング周波数とは何なのか?ということについてですが、これは「1秒を何分割して数値化するのか」という値です。
つまり「8000Hz」だと1秒を8000分割しており、「16kHz」だと1秒を16000分割していることになります。
これを言い換えますと、例えば8000分の1秒を1単位とした場合、「8kHz」なら1単位当たり1個、「16kHz」なら1単位当たり2個、「24kHz」なら1単位当たり3個、「32kHz」なら1単位当たり4個の数値で表現されていることになります。
これを踏まえたうえでバイナリエディタでの確認作業に入ります。

SAPI5 で音声合成エンジン本来のサンプリング周波数を確認する方法

まず、同じ文章を、「8kHz」「16kHz」「24kHz」「32kHz」の4種類の音質で SAPI5 を通して読み上げさせて録音します。
今回は Microsoft Haruka(11.0)を「Microsoft Speech Platform を SAPI5 として使う」で SAPI5 として登録し、「テキストを読み上げ・録音するスクリプト」で書いたスクリプトを使い、SAPI5 を通して「おはよう。」と読み上げさせて WAVE ファイル化しました。
そしてそれぞれのファイルをバイナリエディタで開き、ヘッダを除いた音声部分の数値を、「8kHz」なら一個ずつ、「16kHz」なら二個ずつ、「24kHz」なら三個ずつ、「32kHz」なら四個ずつ取り出して並べます(つまり8000分の1秒ごとに比較します)。
例えば、音声の開始部分から4単位(つまり8000分の4秒間)を取り出して比較しやすいように並べると、以下のようになります。

1 2 3 4
8kHz 04 03 0C 07
16kHz 06 04 0D 03 09 0C 0B 07
24kHz 06 04 04 0D 03 03 09 0C 0C 0B 07 07
32kHz 06 06 04 04 0D 0D 03 03 09 09 0C 0C 0B 0B 07 07

Microsoft Haruka(11.0)と SAPI5 の検証

上記の表からわかるとおり、全ての個所において別々の数値が割り振られているのが「16kHz」で、それより低い周波数である「8kHz」は単に「16kHz」から一個おきに抜き出したもの、それより高い周波数である「24kHz」「32kHz」は数個に一個の割合で直前の値をコピーして水増しされた個所があります。
つまり Microsoft Haruka(11.0)は「16kHz」が基本であり、そして、やはり SAPI5 は単純なコピーや削除によってリサンプリングを行っているということです(通常は平均値等を出してなめらかな曲線になるようにするものだと思います)。
もし、CD に焼くなどの用途のために、より高い周波数の WAVE ファイルが必要な場合であっても、SAPI5 を通すのであれば、できれば直接は「16kHz」で生成し、何か別の優秀な音声ファイル編集用のソフトウェアでリサンプリングした方が良いでしょう。

MSSP(11.0)では異なる

上記の仮説とその実証は、Windows に標準で搭載されている音声管理システムである SAPI5 に対してのものです。
この SAPI5 というのは、いわば音声機能の土台にあたる部分で、これ自体には音声認識や音声合成の機能はなく、ユーザーからの入力や音声認識・合成エンジンからの出力を相互に橋渡しする役割を担います。
そして、今回説明している MSSP は、この SAPI5 を .Net 対応にした程度で、それ以外はほぼ同じです(実際エンジン部分を「Microsoft Speech Platform を SAPI5 として使う」のような作業によって SAPI5 に流用可能なぐらいです)。
…と、思っていたのですが、今回の検証方法は、MSSP(11.0)ではうまくいきませんでした。
どうやら MSSP(11.0)では、リサンプリングのような内部処理の改善?も行われているようで、少なくとも SAPI5 のような単純な「中抜き削減」や「コピー水増し」とは違うようです。
ただし、MSSP(10.1)と MSSP(10.2)では確認に成功したため、この改善は MSSP(11.0)から、ということになります。

Microsoft HelenMicrosoft Anna

同じく MSSP の英語音声である Microsoft Helen についても確認してみたところ、これは Microsoft Haruka と同様に、MSSP(10.1)と MSSP(10.2)では 8kHz、MSSP(11.0)では 16kHzとなりました。
また、Vista 以降に標準で搭載されている英語音声(SAPI5)の Microsoft Anna についても確認してみましたが、これも 16kHz という結果でした。

Microsoft Sam

次に、WinXP 以前に標準で搭載されている英語音声(SAPI5)の Microsoft Sam を確認すると、これは各周波数ごとに不規則な数値が出て、判定できませんでした。
以下は全くの推測になりますが、もしかしたら Microsoft Sam は内部で各周波数ごとの音声データを持っており、設定に応じて出力を切り替えているのかもしれません。
そもそも、Microsoft Sam は Microsoft によって SAPI5 という規格と(多分)同時に作られた最初期の音声合成エンジンで、それはサードパーティーが対応エンジンを作る上での「お手本」という位置付けでもあったと思われます。
そして、SAPI5 の初期の設計思想では、音声合成エンジン側が様々な周波数の音声を保持し、SAPI5 側からの要求に応じて、適した周波数の音声データを返す、という予定だったのかもしれません。
それであれば、SAPI5 側のリサンプリング処理が非常に簡素なものであることにもつじつまが合います(音声合成エンジンから最適な音声が返ってくる前提なので SAPI5 は特に何かをする必要がないはずだった、と)。

まとめ

最後に、今回の検証結果を表にしてまとめると、こんな感じになります。

  変換精度 Haruka Helen Anna Sam
SAPI5 単純 Ver依存 Ver依存 16kHz 不明
MSSP(10.1) 単純 8kHz 8kHz - -
MSSP(10.2) 単純 8kHz 8kHz - -
MSSP(11.0) 改善 16kHz 16kHz - -

インストーラのサイズが変わっていない、というのが気になりますが、もしかしたら以前から内部的には 16kHz で持っており、音声合成エンジンを販売しているサードパーティーへの配慮かなにかで、意図的にデチューン(性能を落とす)していたのかもしれません。
なんにせよ音質が向上していることは確かだと思われますので、特に理由がなければ 11 にアップデートして「16kHz 16Bit」で使用することをお勧めします。

関連記事

【同じタグを付けた記事の一覧】
音声技術 音声合成 spcbght

スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
09 | 2017/03 | 10
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
月別アーカイブ
プロフィール

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(65)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(34)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(26)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(17)
画像管理(15)
WindowsLiveWriter(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
ウォークマン(9)
fi-6130(9)
FLAC(9)
Gracenote(8)
英語音読学習計画(8)
Prolog(8)
JavaScript(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
wxWidgets(7)
spcbght(7)
DCP-J552N(6)
W63CA(6)
MP3Gain(6)
WinRT(6)
iGoinLM(6)
VirtualBox(6)
WindowsLiveMesh(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
楽器演奏(5)
Mery(5)
LAME(5)
音楽技術(5)
GalateaProject(4)
LLVM(4)
nLite(4)
MIDI(4)
ホームページ(4)
WindowsLiveSkyDrive(4)
GalateaTalk(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
137位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
12位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。