そろそろ携帯電話に入っている音楽ライブラリの更新期だなぁ・・・と思い、音楽リストを作ってバッチ処理でエンコードすることにした時の出来事。
携帯電話を携帯音楽プレーヤーとして使っているので、メモリカードに必要な音楽データを入れておくのですが、そのフォーマットがWMAなので・・・。
Windows Media Encoderをx64版だけインストールした時は、オブジェクト空間にWindowsMediaのコンポーネントが登録されるわけですが、それが64bit側にしか登録されません。
似たような現象としてDirectShowのフィルタ(ffdshowなど)を登録しようとしても32bit版でインストールするとたいてい32bit版側にしか登録されないということが起こります。
64bit版にも登録するには64bit対応のフィルタ(=DLL)を用意してそれを登録しないといけません。
この現象が起こった時にはそのコンポーネントを呼び出せるフロントエンドを使用しないとうまくいかないわけです。
WindowsMediaのバッチエンコードでは、64bit版のコマンドプロンプトからvbsを呼び出すようにするかフロントエンドのプログラム自体を64bit化して64bitのコンポーネントから呼び出さないと
WScript.CreateObject: “WMEncEng.WMEncoder”というオブジェクトを作成できませんでした。
というエラーが発生することになります。
バッチ処理は以前に自分が作成したもの(絶対パス指定のm3uファイルから指定ディレクトリにエンコードしていく[C言語])を使ってるので
このバッチプログラムをx64でコンパイルし直してやっとまともに動いてくれました・・・全くです。
ちょっと思ったのが、こんな機能のプログラムってないのかな~と。
ファイルリストを読み込んで指定ディレクトリに「パス状態を無効化して(ファイル名のみで)」出力する
上記のような用途にしか使い方が思い浮かばない(ファイルをリスト化してバッチエンコードする様なパターン)のが弱点ですが。