PCM WAVE -> SACD変換 Ver 1.01
                                                    2018年4月


   1、まずは簡単な紹介から...

Windows PCM音声をSACD(DSDIFF又はDSF)形式音声に変換します。手持ちのwindowsPCM音声をSACD対応機器などで再生すると
場合によっては良い音で聞けるかもしれない‥?



   2、動作環境について
 CPUメモリーOS記録媒体
最低限Core2Duo E66001GBytewindows2000HDD
中間Core-i5 25008GBytewindows7 x64SSD
最高Core-i7で4GHz16GByte〜windows7以降SSD+RAMディスク
 このソフトは周波数変換の最適化をあまり掛けていないので、変換が非常に遅いです。
上記「中間ランク」のPCでCD音声5分をDSD64(2.8224MHz)に変換するのに8分かかります。なのでなるべく高速のPC上で
使用するのが賢明です。それとメモリーも非常に使います。空きメモリー1.5GByte以上は欲しいです。特に32BitOS環境では
メモリー不足で強制終了してしまう可能性が高い事をご了承下さい。
推薦環境は「最高ランク」ですが「中間」ランクでも十分?に動きます 最低ランクはとりあえず何とか動くというレベルで
まともに使えるかどうかは未確認なので?
あと、NET2版にはNET Ver2.0のランタイムが NET4版にはNET Ver4.0のランタイムがそれぞれ必要になりますので
ご注意下さい。NET Ver2.0のランタイムが手に入らない場合Ver3.5までのランタイムで代用できるようです。
各種PCの動作速度詳細は最終ページを御覧下さい。


   2.1、扱える音声について
 入力音声はWindowsリニアPCM 8bit(符号なし)、16bit、24bit、32bit、単精度実数(f32)のモノラルまたはステレオです。
多Chの音声と実数形式(倍精度実数f64)は対応していません。出力音声はDSDIFF形式(.dff)とDSF形式(.dsf)が可能です。


   2.2、64bit版と通常版の違いについて
 .NET2版と.NET4版それぞれに通常版と64bitOS版(ファイル名に64の数字が入っている)が同封されていますが
大まかに2つの違いがあります。
ソフト種類OSの種類使えるメモリー量
64bit版64bit専用2048MByteまで
通常版32bit又は64bit1300MByte程度まで

64bit版は起動時のロックを外せば32bit環境でも動きますが、メモリー不足で必ず止まるのと計算速度が通常版より遅いので
32bit環境で動かすメリットは殆どありません。なので32bit環境では動かないようにしてあります。
使えるメモリー量の制限は3項"使用方法"で説明するサンプリング周波数の選択時に"任意"を選択した場合に大きく影響が出ます。
通常のDSD64〜512までを選択した場合には殆どメモリー使用量の影響を受けません。


   3、使用方法

ソフトを起動すると以下の画面になります。


 3.1最低限設定が必要な項目は?
@とBとCです。@にファイルをドラッグ&ドロップしてBで変換後のサンプリング周波数を設定しCでファイル形式を選択した後
Jのボタンを押してかなり待てば変換後のファイルが変換元ファイルと同じ場所に".dff"または".dsf"と4文字追加された状態で
出来上がります。例えば変換元が"A.wav"の場合、変換後は"A.wav.dff"または"A.wav.dsf"を作成します。ファイルの
上書きチェックはしていないのでご注意下さい。
変換元と同じ場所にファイルを作成するので、変換元ファイルは必ずHDDなどの読み書き可能な記録媒体上に置いて下さい。
変換が終了するとNに変換にかかった時間や計算速度が表示されますが、不幸にも"ノイズシェーパー発狂??回"と表示された場合‥
ノイズ入りのファイルが出来上がっているので再度設定をして、変換し直す必要があります。その際の設定方法は
3.12節ノイズシェーパー発狂対策ご一読下さい。

 3.2変換先ファイルの場所や名前を指定する場合
3.1の操作に追加してAにフォルダーをドラッグ&ドロップすればフォルダ内に変換元と同じファイル名で新規作成します。
Aにファイルをドラッグ&ドロップすると変換後の新規ファイルはAに入力したファイルに上書きします。

 3.3フォルダ内のファイルを一括変換したい場合
@に変換元ファイルが入ったフォルダを、Aに変換後のファイルを格納するフォルダをドラッグ&ドロップします。Aを省略すると
変換後のファイルが変換元ファイルと同じ場所に".dff"または".dsf"と4文字追加されたファイルが大量に出来上がります。

 3.4変換速度を早くしたい or 変換精度を上げたい
サンプリング周波数変換の精度と速さを決めるのはEのフィルタ長で決まります。速く変換したい場合、64位の値に通常は256、
高精度に変換したい場合512位の値にします。ここで設定する値が大きい程変換元ファイルの高音成分まで変換後のファイルに再現されます。

 3.5一時停止 または 強制停止させたい
Jの開始ボタンを押して変換開始後に中断または強制停止ボタンを押して計算止める事が出来ます。停止中は何も計算していないので
CPU負荷も0%になります。ノートPCなどでうるさいFANを止めたい時などに使用するなど利用法は?。

 3.6サンプリング周波数を変更したい
Bの出力サンプリング周波数の項目でDSD64,128,256,512それと任意から選べます。DSD64であっても2.8224MHz(44.1KHz×64)の
民生用と3.072MHz(48KHz×64)の業務用がありますが本ソフトでは入力音声のサンプリング周波数から民生用か業務用か自動判別しています。
判定方法は入力音声のサンプリング周波数を1000で割った余りと5512で割った余りを比較し1000で割った余りが小さければ業務用と
しています。なので44.1KHzの音声をDSD64設定にすると自動的に2.8224MHzに変換されますが、例えば3.072MHzの業務用に変換したい場合
Bの任意に設定してから右のテキストボックスに3072000と入力して下さい。オレオレ周波数‥例えば4000000と入力すると本当に
4MHzのSACDができますが、再生できるプレーヤーがこの世に存在するかは(ry

--------以下 オプション項目--------

 3.7音量調整について
変換後の音量は変換前の音声と同じになるように設計しています。SACDはPCM音声に対して0.5倍の音量までしか扱えないので
本ソフトではあえて音量設定を0.5倍としています。ただし変換元の音声が小さい時は0.5倍以上の値にして調整可能です。また、変換元の
音声最大値を変換前にあらかじめ検出して、自動的に指定した音量、たとえば0.5倍にする事もできます。正規化->という項目に
チェックを入れて右隣に数値を入力すれば自動的に最大音量がおおよそ数値どおりになります。簡易的な機能なので
少しオーバーレベルになる事があります。

 3.8ピッチ調整について
音声のピッチを変更できます。通常は1.0(倍)ですが1.2倍にすると再生速度を1.2倍したような高音キンキンの音声になります。

 3.9窓関数の設定
フィルタの切れのよさ(減衰量)を決める窓関数を設定します。自動に設定すると変換前の音声Bit数に応じて次の値に設定されます。
8bit→ハニング窓 16bit→ブラックマン・ハリス窓(4term) 24bit→ブラックマン・ハリス窓(7term)
32bit→ブラックマン・ハリス窓(11term)

 3.10 フィルタの周波数設定
フィルタのカットオフ周波数は変換前の音声サンプリング周波数で決まり、その値はサンプリング周波数の1/2(ナイキスト周波数)です。
普段は変える必要はありませんが意図的に変えたい場合Gの項目で"手動"に設定後、数値入力すると変更できます。DSD64は30KHz以上の
音声を殆ど再現できません。なので96KHz24bitの音声をDSD64に変換したい時、手動に切り替えた後30/48した値"0.625"と数値入力すると
3.12で説明するノイズシェーパーの発狂対策にも良いかもしれません。


 3.11 フィルタの種類を変更する。
ノイズシェーパで使用するデジタルフィルタの種類を変更したい場合、下図の項目で変更できます。

0と1番のボタンの位置が枠の上側にありますがこれは左側に16bitと書いてあるように、可聴帯域(約20KHzまで)で量子化bit数で表現して
何bit相当の音質があるか、正確に言えばホワイトノイズの量がどの程度あるかを示しています。
0から14番まで番号を振っていますが番号が低いほど安定したフィルタで、大音響でも安定した動作をします。逆に14番のフィルタは
大きな音が入力されるとおかしな動作をする可能性が大きくなります。
あと、こんなにフィルタがある理由ですがフィルタの安定性と性能(ノイズ特性と帯域)が間逆の特性を示すので
いろいろ検討すると大量に出来てしまう訳です。
一番中庸で無難なのが4番なので初期設定として4番になっていますが、3.12節で説明するノイズシェーパ発狂対策が必要なときは
番号を下げ、逆に音声の音量が小さい時など余裕がある場合、番号を上げて性能を稼ぐなどいろいろ音質の追求が出来ると思います。



 3.12 ノイズシェーパ発狂対策
3項Nいろいろな状態表示にてノイズシェーパー発狂??回と表示された場合、変換したファイルには必ず有音のノイズ(バチッ または
ブチ音)
が乗っています。発狂回数が数回以内の場合は「Iノイズシェーパのフィルタ選択」で番号の小さな、安定性に特化した
フィルタに切り替える事で解決できます。発狂の原因は大音響の音声を長時間ノイズシェーパに入力するとノイズシェーパ自身で
発生するノイズを付加する音声領域が無くなってしまい、動作が不安定になる事に起因します。なので低音の大音響が連続し
なおかつ出力音声のサンプリング周波数が上がる程(DSD64よりDSD128や256などを選択すると)発生確率は上昇します。
通常の音楽の場合大音響は一瞬で終わるので多分大丈夫ですがテストトーンのような音量が一定の音声の場合高頻度で発生します。
安定性の高いフィルタはノイズシェーパとしての能力が低いのであまり使うべきではないですがノイズが乗ってはどうしょうもないです。
発狂回数が30を超える場合、根本の音量設定が駄目なのでD音量調整にて数値を下げていくしか‥。
フィルタ番号を変更する場合、フィルタ別の能力(周波数特性)詳細については補足3ノイズシェーパ特性を御覧下さい。


その他

 5.1アンインストール方法
本ソフトをゴミ箱に移動するだけで完了します。レジストリーに何か記入したり設定ファイルを作ったりしないので上記の作業で完了します。

 5.2免責事項
 本ソフトを使用して健康被害や金銭、物的損害を被るなどしても作者は一切の責任を負いません。
特に使い慣れていない時に、変換後のファイルを大音量でいきなり聞くとか、危険なのでやめて下さい。耳が破壊される可能性があります。
変換前のファイルも念のためコピーをとっておく事をお勧めします。

 5.3転載可否について
自由です。ソースコードも付いているので改造も楽です。ただし改造された場合、作成したソフトについても5.2免責事項を適用します。
また許可無く著作権事項を変更して公開しないで下さい。ソースの一部を拝借して他のソフトに流用した場合、営利目的ならご相談を、
非営利ならご一報を。

                                          連絡先mail a12010@excite.co.jp



--------以下 補足--------


補足1  PC別変換速度   114秒CD音声をDSD64に変換 設定は変更せず初期状態のまま
PC.NET VerOSソフト入力音声変換時間変換時間/音声長
※12.0XP sp3(32bit).NET2.0汎用版114秒490秒4.29倍
※2238.94秒2.10倍
※32.0Win7 x64.NET2.0 64bit版180.03秒1.58倍
.NET2.0 汎用版180.62秒1.59倍
4.6.2.NET4.0 64bit版213.02秒1.87倍
.NET4.0 汎用版209.53秒1.83倍
※42.0.NET2.0 64bit版200.96秒1.76倍
4.5.NET4.0 64bit版289.02秒2.54倍
※1 Core2Duo E8400 3.0GHz 2GByte RAM HDD
※2 Corei5 2500 3.3GHz 4GByte RAM HDD
※3 Corei5 2500 3.3GHz 16GByte RAM SSD
※4 Corei5 2520M 2.5GHz 8GByte RAM SSD

NET2.0版の方が速いのでNET4.0版はランタイム入手ができないなどの理由が無い限り使うべきではないです。




補足2 ソフト別制限事項
ソフト種類OS種別最低メモリ量(MByte)必要.NETランタイムデジタルフィルタ係数使用量最大値※1
32bit.NET2.032/64bit両方とも10242.0〜3.530,000,000
.NET4.04.0〜4.7
64bit.NET2.064bit専用20482.0〜3.5100,000,000
.NET4.04.0〜4.7
※1 係数使用量は Eフィルタ係数長さ設定×アップサンプリング最小公倍数
   例えば44100Hz->2822400Hz 係数長256の場合 256×64=16384
      44100 Hz->3072000Hz 係数長256の場合 256×10240(※2)=2,621,440
※2 44100Hzと3072000Hzの最小公倍数計算すると147:10240になるのでアップサンプリング倍数は10240倍。
   なので変換後のサンプリング周波数が素数だとデジタルフィルタ係数最大の制限に簡単に引っかかります。


ソフト作成環境
.NET2.0版(オリジナル) Visual Studio C# 2005
.NET4.0版 Visual Studio C# 2012 -> 上記.NET2.0版のプロジェクトを変換してコンパイルしただけ




補足3 ノイズシェーパ特性
下のグラフはノイズシェーパを含めた1bit量子化器の(DSD64動作時)利得です。利得が低いほどノイズ量も低いので性能が良い事を
示しています。グラフ中の番号はI「ノイズシェーパのフィルタ選択」で指定した番号です。
グラフが大量にありすぎて見づらいですが、なんでこんなにあるかと言えば、フィルタの安定性と性能が間逆の特性を示すので
いろいろ検討すると大量に出来てしまう訳です。あと30〜100KHz付近のノイズが多すぎると再生プレーヤー内のフィルタで
取りきれなかったノイズがスピーカーから出力され、場合によってはツィーターを焼いてしまう
という問題も絡んできます。
‥そして妥協と検討を重ね、14個もフィルターが出来たという。

下のグラフでは1〜10番までの特性を示します。一般的なフィルタは4番だと思います。明るい緑色の4番の線と比較して
6番のフィルタは30〜60KHz付近のノイズが一番多い事が分かります。これがツィーターを焼いてしまうかもしれない
という問題の特性です。逆になぜ6番が存在するかというと可聴域の10KHz付近のノイズは-122dB(約24bit相当)と低いにも
かかわらずフィルタの安定性が良いという特徴があります。なのでDSD128や256などで使用するとメリットを発揮できます。



次のグラフでは残りの10〜13番のフィルタを問題のあった6番と標準の4番と重ねて示します。
10〜13番のフィルタは実験的要素が強く、DSDというフォーマットでどれだけ帯域を稼ぎつつ
量子化bit数も稼げるかに重点を置いて設計しました。なので安定性は可能な限り捨てています。
14番のフィルタは-86dB(約18bit相当)で39.9KHz、-76dB(約16bit相当)で40.1KHzという帯域が確保できます。
13番のフィルタは一番不安定ですが、-122dB(約24bit相当)で27KHzの帯域を確保しています。が、実測すると
倍精度実数を使って計算しても計算誤差が無視できないようで20〜27KHz付近は22bit相当となっています。



次のグラフは1KHz〜100KHz部分の詳細を示します。




下の表では各フィルタの性能を表にしてまとめてあります。
青色 良特性   オレンジ色 注意   赤色 警告   赤色太文字 欠点 よく理解してから使用
 フィルタ番号
01234567891011121314
安定性
(耐発狂性)
ノイズシェーパの全利得値(倍)
1.21041.24981.25571.26701.30821.30961.32861.35141.37931.38601.38801.40491.40601.40641.4088
可聴域量子化
bit数
1616.2202020.524242224202420.6242418
上記の帯域(KHz)
20.422.913.417.319.012.320.920.017.430.923.133.125.127.039.9
30〜70KHz
ノイズ量
最大 最小多め  
その他
安定性最高 DSD128
〜専用
標準DSD128〜専用    20bit帯域最高 24bit帯域最高帯域最高



以下の図では各フィルタの特性をDSD64〜512まで変化させた場合の詳細を示します。
縦軸がノイズ量(bit)相当となっていますが、符号が逆ですが、この値相当の
量子化bit数?は確保できていると思います。
以下の帯域などの説明はDSD64時の性能について説明しています。


○フィルタ0 安定性最強、性能最低。とりあえず変換できればよいという時にしか
使えないと思います。16bit相当の音質しかないので、DSDハイレゾの意味が全く無いという




○フィルタ1 16bit相当で22KHz帯域を確保しているのでCD音質程度は得られているようですが?




○フィルタ2 20bit相当の音質はありますが帯域が12KHz程度しかないのでDSD128以上で安定性が
必要な時のみ使うべきです。




○フィルタ3 可聴域で20bit程度 20KHzで16bit相当の精度が得られているのでそこそこ使えます。




○フィルタ4 本ソフトの初期値にしているフィルタです。安定性、性能とも中庸です。




○フィルタ5 24bit精度が出るフィルタの中で一番安定していますが、帯域が12.3KHzと最低です。
 DSD128以上で安定性かつbit精度が欲しい時に使います。




○フィルタ6 24bit精度が20KHzまで出るので性能が良く、その割りに安定性も良いですが、30〜100KHzの
ノイズの量が一番多いのでスピーカー(ツィーター)を焼く可能性が高いです。その心配が無ければ利用価値があります。




○フィルタ7 22bit精度が出るのでそこそこ性能が良いですが、その割には安定性がいまいち良くないです。




○フィルタ8 24bit精度が17.4KHzまで出つつ、30〜100KHzのノイズが最小なので30KHz以上のノイズに敏感な
システムでは良い結果が得られるかも?しれないです。




○フィルタ9 <実験的フィルタ> 20bit精度が約30KHzまで出ます。安定性は‥。




○フィルタ10 <実験的フィルタ> 24bit精度が23.1KHzまで出ますが30〜100KHzのノイズも多いので注意




○フィルタ11 <実験的フィルタ> 20bit帯域最強フィルタ 20bit精度が33.1KHzまで出ます。




○フィルタ12 <実験的フィルタ>




○フィルタ13 <実験的フィルタ> 24bit帯域最強フィルタ 24bit精度が27.3KHzまで計算上出ていますが
実際には計算精度の関係で20KHz以上の精度が22bit程度しかないという




○フィルタ14 <実験的フィルタ> 帯域最強フィルタ 18bit精度が39.8KHzまで出ます。安定性は最低ですが
条件に合えば場合によってはDSD128相当の帯域がDSD64で得られます。