音声用のパスは繋がる
今は、Android版AGMPlayerの更新開発フェーズで、今回は、一般形式の動画/音声ファイルを再生可能にしようとしている。今は、一般動画/音声用の内部構造を構築中で、今日の時点で音声用のパスは繋がった。
Android OSの場合、機器で音を鳴らしたければ、AudioTrackオブジェクトを作成し、そのオブジェクトをplay状態にした後、writedataで鳴らしたい音を、CD音源なんかでも使用されている、16BitShort型のデータで書き込んでやれば良い。
それだけで、16BitShort型のデータは、音として鳴らす事が出来るので、Android機器で音を鳴らす場合、問題になるのは、どうやって、その16BitShort型のデータを用意するのか、という事になる。
もっとも、大昔からコンピュータのプログラミングをしてきている様な人なら、そんなの簡単! みたいになる筈だ。
何故なら、そのデータは、ある意味、音声データそのものなので、振幅を-32768〜32767の範囲にして、サンプリング周波数を鑑みた時間経過に従って変動する振幅を、そのままデータ化すれば良いだけ! だからだ。
まあ、そんな事を書いてみても、三角関数なんて実社会に出たら使う訳がない! みたいな感じで学生時代を過ごした人的には、何のことだか判らないかもしれないし、中学の頃までは真面目に数学も勉強したけど、高校からは文系に進んだので、オシロスコープだとかシンクロスコープなんて使ったことがない! みたいな人的にも、音声データ? と、言われても、実感はわかないかもしれない。
と、言う事で、コンピュータのプログラミングなんて、理系の知識がなくても、誰にでもできる! と、良く言われる訳なのだが、実際には、理系の知識があるのは大前提! みたいな事も、たまには、あるので、特に、低階層のプログラミングをする必要がある場合には、お手上げになる人も多いかもしれない。
と、言う事もあるので、理系出身の作者的には、差別化のために、純粋な文系の人は手を出しづらい様なコードも、積極的に書いたりする様にしている。
その結果としては、OSが提供しているAPIを直接的に使うだけでは、実装できない機能なんかも、自製ソフトには、積極的に実装する事になるのだが、前述の様に、OSが提供している高レベルのAPIを使う場合にも、少しは理系的な知識が必要になる事もある。
なので、マルチメディア系のソフトは巷にはあまりないのかなあ、と、思ったり思わなかったりもするのだが、そんな作者が大学時代に研究していたのは、ブラシレスDCモーターのセンサレス駆動方式! みたいな感じだった。
つまり、偉そうに書いている割には、作者的にも、大学や大学院では、コンピュータについて学んだりはしなかった訳だ。
また、情報工学なんかについても、専門ではなかったのだが、それでも、電気工学科、という事だったので、三角関数ばかりではなく、微分積分だとか複素関数論だとかは必須科目だったりはした訳だ。
と、言う事なので、はっきり言って、数学は得意ではなかった作者的にも、コンピュータ関連で出てくる程度の数学なら対応できない事もないので、数学なんて一切不要! みたいな分野も色々とあるコンピュータプログラムの世界で、敢えて、数学も少しは関係するかなあ、みたいな分野を相手にする様にしてきている訳だ。
しかしまあ、そんな事を言っても、実際の所、コンピュータのプログラミングで最も重要なのは、忍耐力! という事になるかもしれない。
何故なら、コンピュータのプログラミングというのは、既に存在する手続を、つなぎ合わせて、一つの仕事を行わせる様にするだけの話なので、論理的には、プログラミングが出来ない! なんて事はあり得ない! と、言う人も多いかもしれないのだが、同じ様な話としては、ノーベール賞を受賞した物理学の論文なんかについても、存在する言語の単語を繋ぎ合わせて論文に仕上げただけの代物なので、論理的には、誰だって、書けない筈はない! なんて事になるからだ。
つまり、意外と、出来ない筈はない! と、言われてしまうプログラミングというのも、実際には、実現できたら奇跡! レベルの困難さを秘めている可能性も十分あるので、そんな無謀な戦いを続けられる! というのは、普通は、馬鹿か天才だけかもしれない訳だ。
と、いうような事を考えていると、この開発は無理! と、早々に結論を出してしまいがちなのだが、もし、そこに忍耐力! という要素が加われば、忍耐力が強い人ほど、開発を成功させる可能性は高くなる筈な訳だ。
と、言う事で、今日の時点でも、まだ、一般動画と音声の再生はできる様になっていないのだが、全体的な構造は繋がった感じなので、その末端から、テスト用に音声データを作成して流してみた所、音が鳴る事は確認できた。
次は、映像についても、似た様な事をやる予定なのだが、映像の表示については、既に書いてきた様に、すこしやっかいな事になっているので、それに対応させるコードの追加も必要になる筈だ。
しかしまあ、ここまで来れば、精神的には、結構楽になるので、今週中には、とりあえずの再生くらいは、可能になっている様な気がし始めている今日この頃だ。
ちなみに、音を鳴らすのに、どうして数学、特に、三角関数の知識が必要になるのかというと、音というのは、普通、三角関数で出てくる正弦波が複数重ね合わされたモノ、として表されるからだ。
つまり、音のデータを作成する、という事は、正弦波のデータを複数重ね合わせて作成する事になるのだが、更に言えば、音が正弦波として表されるのは時間領域での話で、音は、複数の周波数の音源が重ね合わされたモノだ、という捉え方をすれば、音のデータというのは、周波数とその強さを表すグラフみたいな感じになる。
で、昔の人は頭が良かった、というか、実際には、あまり良くもなかったので、そういったモノを、無限に記述する事が現実的ではなかったので、フーリエ変換だとかいう、不思議な変換方法を編み出したりもした訳だ。
更に、作者が専門だった制御工学なんかでも、似た様な変換として、ラプラス変換、というのが用いられ、計算式を単純化していた訳なのだが、丁度、作者が大学に入った頃には、巷でコンピュータが普通に使われる様になったので、制御工学的にも、現代制御理論、みたいな話が出てきていた。
これは、手計算で色々と鑑みる必要があった時代には、物事を単純化しないと結果が出なかったのに対し、コンピュータが計算してくれる! という事になれば、物事を単純化して誤差を生むよりは、そのままコンピュータにインプットして計算させれば、より正確な結果を出してくれるじゃん! みたいな話になってきていた訳だ。
その結果としては、大昔の人たちがやっていた様なフーリエ変換だとかラプラス変換なんかを使わなくても、物理現象を解析したり予測したり出来る様になったのだが、そのために必要になるのは数学的なセンスではなく、風が吹けば桶屋が儲かる! 式の遷移式だけになったかもしれない。
と、言う事で、大昔と比べると、コンピュータの時代になると、物理を語るのに、数学のセンスは必要なくなったかもしれない。
なので、大昔の物理学者的には、停電になっても、計算尺を使って物理計算ができたかもしれないのだが、今時の物理学者的には、それは難しくなったかもしれない今日この頃、なのかもしれない。

