2008年8月21日木曜日

WMA9でエンコードできない

ポータブルオーディオプレイヤー用に、最近はiTunesを使用してAAC-LCにエンコードしたものを利用していたのた。
だが、D-snap SV-SD370Vで聞いていると、「このファイルは再生できません」エラーがトラック移動時に発生したり、酷いものでは曲の途中で次トラックに移動してしまうものがあったりと、利用するに耐えない状況になってしまった。
というわけで、対応しているもうひとつのコーデック、WMA9に戻そうとした。

が、WMA9対応のフロントエンド(http://kkkkk.net/のpreLife3など)を使用してエンコードしようとすると、cscript.exe(Windows Script Host)が停止し、「Microsoft(R) Console Based Script Hostは動作を停止しました」と出る。
もう一台のPCで試した結果も同じだった。
また、コマンドプロンプト上で手打ちの場合や、WindowsMediaEncoderを使用した場合、ハードウェアDEPに対応していないPCを使用した場合は、エラーは発生しなかった。



原因は、Windows XP SP2以降のWindowsに標準で備わっているデータ実行防止機能(DEP)のようだ。
初期設定は、「重要なWindowsのプログラム及びサービスのみ有効にする」になっている。

今回の問題の場合、DEPによって停止されるプログラムがシステムファイルな為、一部だけ無効にすることができない。
従って、DEP機能そのものを無効にする必要がある。



DEPの設定方法は次のようになっている。


※Windows Vista、Server2008の場合
コマンドプロンプトを管理者として実行し、

・DEPを完全に停止する場合
bcdedit /set nx AlwaysOff

・システムファイルに対してのみDEPを有効にする場合
bcdedit /set nx OptIn

・システムファイルと通常のプログラムを対象にDEPを有効にし、除外リストに含められた場合のみ無効にする場合
bcdedit /set nx OptOut
(システムのプロパティの詳細設定→パフォーマンス→データ実行防止「次に選択するものを除くすべてのプログラム及びサービスについてDEPを有効にする」と同じ)

・すべてのプログラムに対しDEPを有効にする場合
bcdedit /set nx AlwaysOn



※Windows XP、Server2003の場合
システム→起動と回復→起動のオプション→編集
の、
"multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect "
(環境によって変わる)
の部分に、以下のオプションを追加する。

・DEPを完全に停止する場合
/NoExecute=AlwaysOff

・システムファイルに対してのみDEPを有効にする場合
/NoExecute=OptIn

・システムファイルと通常のプログラムを対象にDEPを有効にし、除外リストに含められた場合のみ無効にする場合
/NoExecute=OptOut

・すべてのプログラムに対しDEPを有効にする場合
/NoExecute=AlwaysOn


[XP ProでDEPを完全に無効にする場合の例]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=AlwaysOff



設定を間違うと最悪の場合起動しなくなるので注意。
また、本来システムを保護するためのDEPなので、問題が無い場合はDEPを有効にしておくべき。


08.08.24 追記
http://support.microsoft.com/kb/929182/にWindows Media Encoderの上記の問題に対応した、Vista 32bit版用パッチがあるらしい。


それにしてもVBRに対応しているのはmp3だけというこのD-snapとSD-Jukebox…。v6になってもAACのVBRが正しく取り込めないという対応の悪さ。NeroAacEncにも非対応だし。
単三乾電池パックとSDカードが使えるのは魅力的だったのだが、最近のD-snapは乾電池パック付属していないようで…
ただせさえDRMが邪魔で使いにくい日本のポータブルオーディオ。こういう使いやすさを伸ばしていかないと売れなくなるだろう、と…。

0 件のコメント: