ハングアップの日々

2009年 4月分

2009/04/30

リンクオプション

 Visual C++ では、リンク時に特定の .obj を指定することで CRT の挙動を変更できるようになっている。これをリンクオプションと呼ぶらしい。

new/delete の挙動の違い

 VC++ 6.0、VC++ 2002/2003、VC++ 2005/2008 では、それぞれ new/delete の挙動が違う。メモリ不足の時、6.0 では new は例外を投げずに NULL を返す。2002/2003 では、libc とリンクしたときは NULL を返すが、libcp とリンクしたときは例外を投げる。2005/2008 では、libc とリンクしたときも例外を投げる。リンクオプションとして、2002/2003 では thrownew.obj が指定でき、2005/2008 では nothrownew.obj が指定できるようになっている。なかなかややこしい。

 ちなみに、WDK 6001.18002 は、cl.exe のバージョンは 14 で VC++ 2005 と同等だが、lib ディレクトリには thrownew.obj があることから、CRT の挙動は VC++ 2003 と同じと思われる。

2009/04/28

memo

2009/04/27

memo

 未整理。

2009/04/26

iPod, MP4

 テレビの音声を iPod で聞こうとしたが、ファイル形式が悪いのか再生できなかった。AAC を MP4Box で MPEG-4 コンテナに入れて、拡張子を .m4a にしてから iTunes に登録したところ、PC 上では問題なく再生できたのだが、iPod では再生できなかった。iTunes で AAC に再エンコードしたところ、こちらは問題なく再生できた。mp3infp で両者の違いを調べてみた。

形式Trackサンプリングレート
iPod 再生不可MPEG-2 AAC10148kHz
iPod 再生可MPEG-4 AAC144.1kHz

さて、何が再生できない原因だろう。

Haali Media Splitter

 Haali Media Splitter で MP4 (.m4a) を再生してみたのだが、mp3infp で入力したタグが取得できないようだ。MP4 のタグが読める DirectShow フィルタが欲しいがあるのだろうか。

aacgain

 テレビの音声をそのまま取り込むと、CD に比べて音量が小さい。aacgain というものを使って音量を調整してみた。iPod でも音量の変更が反映された。

msvcp60.dll (続き)

 Win2k の msvcp60.dll についてもう少し調査。VS6 SP4 や VS6 SP6 の vcredist.exe を実行しても、Win2k には msvcp60.dll をインストールすることはできないようだ。

vcredist.exe /C /T:c:\tmp

のように実行すれば、ファイルを取り出すことができるので、それを手動でシステムディレクトリにコピーすることで一応はインストールできる。しかし、バージョンを確認してみたところ、謎が・・・。
 VS6 SP6 の vcredist.exe に含まれている msvcp60.dll のバージョンは 6.0.8972.0 だが、現在常用している Win2k 環境にインストールされている msvcp60.dll のバージョンは 6.2.3104.0 だった。別の XP 環境を確認すると、同じく 6.2.3104.0 だった。何を入れたらこれがインストールされるのだろうか?

2009/04/25

WDK, MFC, SSE2

 MFC と SSE2 を使っていて、VC++ 7.1 でビルドされているプログラムを、WDK でビルドすることで VC++ 7.1 のランタイムを使わずに済むようにしてみようとした。WDK 付属の MFC は MFC 6.0 相当で古いため、一部修正が必要だった。sources ファイルの書き方にも少々苦労したが、何とか WDK でビルドできるようになった。早速 Vista 上で実行してみたところ、スタックオーバーフローで落ちてしまった。WDK ではスタックサイズが通常よりもかなり小さくされているのが原因だった。スタックサイズを通常と同じ 1MB に設定したところ、動くようになった。
 次に Win2k で実行しようとしたところ、msvcrt.dll に __libm_sse2_sin が見つからないと言われて起動できなかった。WinXP でも同様だった。Win2k/XP の msvcrt.dll には SSE2 関連の関数がないようだ。
 ランタイムの配布/インストールの手間を省くために WDK を使おうとしたのに、Vista でしか動かないものになってしまった。残念。

2009/04/23

TvqDec.ax

 現在の TvqDec.ax は、VC++ 7.1 のランタイムライブラリ (msvcr71.dll, msvcp71.dll) が必要となっている。代わりに VC++ 6.0 のランタイムライブラリ (msvcrt.dll, msvcp60.dll) を使用するようにするために WDK でビルドしてみることにした。
 WDK 6001.18002 の Win2k 用のビルド環境でビルドすると、実行ファイルのサブシステムバージョンが 5.0 に設定されるため、Win98 などの古い環境では動作しなくなる。sources ファイルで SUBSYSTEM=4.0 と指定してみたところ、NT4 用のライブラリがないために、リンクエラーになってしまった。editbin で次のようにして、サブシステムバージョンを書き換えてみたところ、Win98SE でも動作するようになった。

editbin /subsystem:console,4.0 /release TvqDec.ax

msvcp60.dll

 今になって気付いたが、Win2k では VC++ 6.0 のランタイムライブラリの内、msvcrt.dll は最初からインストールされているが、msvcp60.dll はインストールされていないようだ。WinXP 以降ならば、msvcp60.dll も最初からインストールされているようだ。
 VS6 SP4 のランタイムは「Vcredist.exe による Visual C++ アプリケーション用の最新ランタイム コンポーネントのインストール」から入手できる。VS6 SP6 のランタイムは単体では公開されていないが、SP6 の分割ダウンロードの中の Vs6sp6S1.exe の中に vcredist.exe という形で含まれている。

2009/04/22

URL memo

2009/04/20

URL memo

2009/04/19

MP4Box

 MP4Box を使った mp4 の結合方法を色々試行錯誤。MP4Box で単純に結合すると、映像と音声の長さが微妙に違うせいで多数のファイルを結合するようなときに映像と音声がどんどんずれてしまう。
 結局以下のような手順になった。ここでは、input01.mp4, input02.mp4, input03.mp4 の3ファイルを結合する例を示す。

  1. mp4box -info input01.mp4
    入力の映像と音声の長さを確認。短い方の長さ(通常は映像)をメモし、秒数に変換しておく。
  2. mp4box -new output01.mp4 -cat input01.mp4:dur=xxxx.xxx -cat input02.mp4
    1. で確認した長さを :dur=xxxx.xxx で指定し、input01.mp4 と input02.mp4 を結合して output01.mp4 に出力する。
  3. mp4box -info output01.mp4
    2. で出力された映像と音声の長さを確認。短い方の長さをメモ。
  4. mp4box -new output02.mp4 -cat output01.mp4:dur=yyyy.yyy -cat input03.mp4
    3. で確認した長さを指定し、output01.mp4 と input03.mp4 を結合。

 1つ結合するたびに映像・音声の長さを調べて、1つずつ結合していくため手間が掛かるが、これ以外の方法はうまくいかなかった。例えば、入力全ての映像・音声の長さを先に調べて、一度に全て結合した場合は、結合点で誤差が出るのか結局映像と音声がずれてしまった。:delay=xxx で映像と音声の遅延を調整する方法も試してみたが、再生ソフトが遅延指定を認識しなかったりしたためうまくいかなかった。

2009/04/16

URL memo

REX-CFU2

 いつのまにか、REX-CFU1 の後継の REX-CFU2 というものが出ていたようだ。USB チップが SL811HST から変更されたようだが、何に変更されたのかは不明。Linux 用ドライバも無いようだ。
 そういえば、REX-CFU1 の Windows 用ドライバを作ろうとして、そのまま放置中だな。

2009/04/15

URL memo

2009/04/13

URL memo

2009/04/12

memo

 日本のマスコミはゴミばかり。NHK も信用に値しない。

2009/04/10

Google Chrome

 Google Chrome を試してみた。インストール先が、C:\Program Files 以下ではなく、C:\Documents and Settings\(USERNAME)\Local Settings\Application Data\Google\Chrome という点にまずびっくり。検索設定のインポートで
 少し使ってみたが、確かに応答が非常に早い。今までのブラウザとはレベルが違う。ただ、1タブ 1プロセスとなっており、1プロセスあたり 10MB 以上のメモリを使っていることから、タブを何十個も開くような使い方にはあまり向いていないかもしれない。
 Adobe Reader や Java の動作に難あり。今後に期待。

2009/04/09

XML::RSS

 XML::RSS で日本語が化ける件をもう少し調査。encode_output=>0 を指定すればよいらしい。

テキストブラウザ

 気まぐれで、Cygwin 上で動くテキストブラウザを2つばかり試してみた。1つ目は lynx。日本語の扱いに難あり。日本語が扱えないわけではないが、文字コードの自動判別がうまくいかないのかよく文字化けする。また、UTF-8 はまともに表示されない。2つ目は w3m。日本人が作っているだけあって、日本語は問題なく表示できる。テキストブラウザでありながら、タブやマウスが使えるのが驚き。

URL memo

2009/04/07

URL memo

2009/04/05

電子工作

 何となく FT245RL USBパラレル変換モジュールを買ってみた。使い道は全く考えていない。

2009/04/01

パラレルポート

 最近会社で使っている装置で、パラレルポート経由で操作するものがある。パラレルポートを搭載した PC が少ないため、不便な状態になっている。会社の方はうまくやりくりすることにして、別途パラレルポート関連の情報を少し調査してみた。

spam

 先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 1337通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 2通(0.1%)。spam が増加傾向。

メール受信状況 2009/03


Copyright (C) 2009 K.Takata