
Sophia ※がある人を Cloud Ruler Temple に連れて行くと,集合した Blades の前で演説が行われた.
※Sophia = プレイヤー
matlab (今回は 6.5.1 でしか試してません)は複素数について直感に反する挙動を示すことがある.例を見てみよう.
complex じゃなくなってる.およ?一応確認すると,A に代入した値は実数でなく複素数と認識されているはずだ.>> A = repmat(complex(0),[10,1]);
>> whos A
Name Size Bytes Class
A 10x1 160 double array (complex)
Grand total is 10 elements using 160 bytes
>> A(end) = complex(1,0);
>> whos A
Name Size Bytes Class
A 10x1 80 double array
Grand total is 10 elements using 80 bytes
となるからだ.ただし,入力引数に対する inputname のように,出力引数についての情報取得機構が関数 complex 内で働いているとすると,よくわからない話になるかもしれない.>> clear a; a=complex(1,0); whos a
Name Size Bytes Class
a 1x1 16 double array (complex)
Grand total is 1 element using 16 bytes
一つ考えられる仮説は,「虚部が全て 0 の配列は実数型にされてしまう」というものだ.実際,その方がメモリ効率やら計算効率やらよくなる気はする.
念のため,虚部が 0 でない複素数を代入すれば,配列は実数型に変換されることは無い.
そして,要素を虚部が 0 の複素数に順に置き換えていくと,>> A = repmat(complex(0),[10,1]);
>> A(end)=complex(0,1);
>> whos A
Name Size Bytes Class
A 10x1 160 double array (complex)
Grand total is 10 elements using 160 bytes
となった.ここまでは前述の仮説で当たっていそうである.>> A=complex([1,2],[3,4]);
>> A(1)=complex(real(A(1))); whos A
Name Size Bytes Class
A 1x2 32 double array (complex)
Grand total is 2 elements using 32 bytes
>> A(2)=complex(real(A(2))); whos A
Name Size Bytes Class
A 1x2 16 double array
Grand total is 2 elements using 16 bytes
しかし,もちろん話はこれで終わらない.次の例を見てみよう.
なんと配列は複素数のままであり,これは前述の仮説と矛盾する.ところがさらに,代入の方法を変えると,>> A=zeros(1,2);
>> A(:)=complex(0);
>> whos A
Name Size Bytes Class
A 1x2 32 double array (complex)
Grand total is 2 elements using 32 bytes
となって前述の仮説が復活する.どうなってるのという話である.>> A=zeros(1,2);
>> A(1:end)=complex(0);
>> whos A
Name Size Bytes Class
A 1x2 16 double array
Grand total is 2 elements using 16 bytes
ここで新たに,「全代入(whole substition とか?)」という概念を考えてみる.
全代入と考えるのは次の4つ.
いや~.重箱の隅つつくといろいろ出てくるなぁ.>> A=complex(rand(3));
>> A(:)=complex(0); whos A
Name Size Bytes Class
A 3x3 144 double array (complex)
Grand total is 9 elements using 144 bytes
>> A(:)=complex(zeros(3)); whos A
Name Size Bytes Class
A 3x3 144 double array (complex)
Grand total is 9 elements using 144 bytes
>> A=complex(rand(3));
>> A(:,:)=complex(0); whos A
Name Size Bytes Class
A 3x3 72 double array
Grand total is 9 elements using 72 bytes
>> A=complex(rand(3));
>> A(:)=complex(zeros(3)) + 1; whos A
Name Size Bytes Class
A 3x3 72 double array
Grand total is 9 elements using 72 bytes
以前の記事にも書いた携帯で録画した動画を何とかするのの続き.
YAMB は MP4Box のフロントエンドであるらしく,Options->General->MP4Box->View or Edit MP4Box Command Line. にチェックを入れると,どうやって MP4Box を呼び出しているかがわかる.
これを調べると,次のようなバッチファイルでいけそうだ.
この内容でバッチファイルを作り,そのショートカットを Send To フォルダに入れておく."C:\Program Files\YAMB\MP4Box.exe" -avi 1 "%~f1"
"C:\Program Files\YAMB\MP4Box.exe" -raw 2 "%~f1"
"C:\Program Files\YAMB\MP4Box.exe" -add "%~d1%~p1%~n1_track1.avi" -add "%~d1%~p1%~n1_track2.amr" "%~f1.mp4"
del "%~d1%~p1%~n1_track1.avi"
del "%~d1%~p1%~n1_track2.amr"
バッチパラメータ( %~f1 等)についてはykr さんのページや,Windows 一般に共通なのかわからないけどMicrosoft TechNetのページなどを参照.
ちなみに,track 1 の抽出を -raw 1 とすると .cmp ファイルができる.これでも .mp4 へ mux できたが,なぜか後ろの方が再生できなかったりした..avi 経由だと問題なかった.なんで??
さて,あとは mpeg2 に変換して DVD に焼くところだ.