頭痛い、、、

さて、今日も図書館で勉強していたのですが、
途中から頭が痛くなってしまいました orz
なんか、もう、がんがんしてきて、あんまり集中できなくて、
かといって、帰って帰ったとしても、数時間ねないと
治らないだろうから、あきらめてそのまま勉強をしていました。

途中で、勉強の合間に、昨日今日と、偶然、同じバドミントン部の人が3人いて、
(同級生の友人、先輩、自分)1時間ほどいろいろと話してました。
(一応断っておくと、もちろん自習室の中じゃなくて、外)
昨日今日、と書いたのは、実は昨日も3人一緒にいて、
そのときも1時間くらいしゃべっていたわけです。
(うまく説明ができてるか微妙)
まぁ、(特に先輩は)久しぶりにということもあって、
話が弾んで結構面白かったです。

さて、今日で夏休みも終わり。
まぁ、受験生の夏休みなんて、あってもないようなものですが。
正直、ぜんぜんやってないような気がして、すごく不安。
模試の状況とか、テストの状況を見て、いろいろと考えることがあると思う。

あと、Free Typingのほうですが、結局、夏休み中にできませんでした。
今も、少しずつ実装していっているのですが、まだまだ、
時間がかかりそうです。

メモ
fstreamつかうと、\r\nはそのままだけど、WriteText使うと、\r\n
が\nに変換される模様。

Posted at : 2006-08-31 23:58:12 / Category : none

うわ、、、やっちゃった。

ちょっと横になってたら、気づいたら1時・・・。
気づかぬ間に寝てしまっていた・・・。

とりあえず、今日の分の日記については、
メモだけ残しといて、気が向いたら書こうと思います。

・朝のこと
・昼の図書館のこと

さて、寝よう・・・。

Posted at : 2006-08-31 00:59:38 / Category : none

今日は、、、

今日は、一日中図書館にこもっていました。
開館(9時半)に入って、閉館(19時)まで、
昼飯含まないで、約9時間ほど。
まぁ、夏休みの最後の三日間ぐらい、
我慢してやってみようと思います。

それより、ずっと同じ体勢でいるので、足が痛い。
今も痛くて、結構きつい(==

さて、プログラミングやりたいのも山々ですが、
あまり遅くまでやっていて、自習中に寝てたら
本末転倒なので、そろそろ寝ようと思います。

Posted at : 2006-08-30 00:20:59 / Category : none

眠くて、、、

プログラム組もうにも頭が回らない。
さっさと寝よう。

と思ったが、だんだんと目が覚めてきて、問題解決。
解決というか、眠くて頭で何考えてるかわからなかっただけだけど。

さて、本当にそろそろ寝よう。

Posted at : 2006-08-29 01:10:31 / Category : none

メモしながら日記

GetOpenFileNameでOPENFILENAME.lpstrFileの値って、
しっかりと初期化されてないとだめみたいだね・・・。
しっかりと、といっても、

char FileName[255] = "";

見たいな感じのことです。
たしか、、、この値が設定されてると、デフォルト値が
これに設定されるんじゃなかったかな。
調べてないので、気になる方は検索してみてください。

EM_SETBKGNDCOLORでリッチエディットコントロールの背景色変更。
しっかりとメモしておかないと、使いたいと思ったときには
確実に忘れてる。

いつも思うけど、Excel(表計算ソフト)っていいね。
問題作成の部分を作成していて、コントロールが大量にあって
それを全部ハンドルをメンバ変数に入れたりしないといけないときでも、
Excel使って、いろいろ工夫すると、結構やりやすい。

Posted at : 2006-08-28 00:00:20 / Category : none

久しぶりに

久しぶりに2時半ごろまで起きてる。
しかし、これやると、明日がきついんだよねぇ。
まぁ、特に用事はないからいいのだけれども。

さて、今日は、Free Typingの作業を進めていたのですが、
何を思ったか、問題作成するモードを作り始めてしまいました orz
自分からまた仕事を増やしてるようなきがする・・・。

で、特定のフォルダ以上を参照できないような、ファイルダイアログを
作っていました。まぁ、これについては、後日説明をするかもしれません。

さて、眠くなってきたし、そろそろ寝よう。
ぁー、でも、とりあえず、明日の作業がスムーズに進むように
骨組みだけは作っとこうかな。

Posted at : 2006-08-27 02:28:05 / Category : none

Free Typingの作業状況2

昨日見つかった不具合に関連して、一度、一通り
ソースコードを見直してみました。
似たような不具合が発生するような箇所は
見当たりませんでしたが、いまさらながら、
設計が醜すぎる・・・。
なんで、必須項目がコンストラクタに登録されるような
構造になってないんだ?
何を考えてこんなことやったんだ?

まぁ、そんな感じでして、そのうちに再構築しなおさないと
いけないような状況なのかもしれません。
時間があればできるんだけどなぁ。

とりあえず、マニュアルの方ですが、今回は
Winkを使って、動画での説明を加えていきたいと思います。

そういや、Wink用にユーザー作成して、ユーザーアイコンが
×マークになってるから(画像のリンク切れの状態)おかしいな
と思って、変更しようとしたら、

オートメーション サーバーはオブジェクトを作成できません。

と出てきた。
何か、Visual Studioが同様のエラーを起こすことがあるようで、
それの原因はWindows Scriptのコンポーネント破損。
多分、再インストールしたときにバージョンが
置き換わっちゃってたりしてるかな。

Posted at : 2006-08-26 00:05:19 / Category : none

hulu,,,

Apple Storeの商品には学割がある、ということを
日経パソコンを見てはじめて知った。
ノートが10%引きだっていうから、もし、20万くらいの
買ったとしたら、(買わないけど)2万も割引されるわけか。
ちなみに、iPodとかMac miniもあるようなので、こっちは
もしかしたら買うことがあるかもしれない。
忘れずに覚えておこう。

忘れずに覚えておこう、と入力して、数時間前に
何か覚えておこうということを思い出したけど、
一番肝心な内容の部分が思い出せない・・・。
何か調べると思ったんだけどなぁ。

「クロージャは並大抵の苦労じゃ実装できないらしい。」と言われて、
真剣に、そうなのか、とうなずいてしまった orz
いやまぁ、冗談じゃなくて本当に苦労してるんだろうけど。

Free Typingの作業。
ソースコードを見るのが怖い。
内容が気になる人は、数週間後に出ると思われる
ソースコードを前回の分と差分を取ってみればわかります。
あまりにも恐ろしくて・・・。

Posted at : 2006-08-24 23:53:43 / Category : none

Free Typing作業状況

30ビット目のフラグも調べる方法はわかりました。
教えてくださった方、ありがとうございます。

で、とりあえず、実装したのですが、
何故か最初のうち、動かないので、おかしいなぁ、
と思っていたら、エディットボックスをサブクラス化してて、
そこから、親ウィンドウに対して、WM_KEYDOWNのメッセージを
投げるようにしていたのですが、何故か、

SendMessage(GetParent(hWnd),WM_KEYDOWN,wp,NULL);

一番重要なlpの部分が来ていないという始末 orz
デバッガ眺めてて、lpだけNULLだから、
おかしいなぁ、と思ってたら、このありさまだよ。

しかし、今日はこの作業で時間を費やして、
作業が一向にはかどらない。
もう少し、作業を効率よくやってかねば・・・。

Posted at : 2006-08-24 00:02:47 / Category : none

眠い・・・。

気づいたら勉強しながら寝てた。
で、気づいたら11時半・・・。
もう眠いので、Free Typingのほうの作業はせずに、
Pocket PCで日記書きこんで、リモート経由で
パソコンを落として寝ます、、、

Posted at : 2006-08-23 00:00:11 / Category : none

30ビット目のフラグを調べる方法・・・?

今、Free Typingのデバッグをしていて気づいたのですが、
ダイアログの部分だけ、WMKEYDOWNでボタン操作が行われていて、
それ以外の部分は、WM
KEYUPでボタン操作の処理が行われている。

こうすると、ダイアログでエンターキーを押して、ダイアログを閉じて、
そのまま前のウィンドウに戻ると、またそこで、ダイアログを
開く動作をする、というループに陥ってしまう。

そこで、ダイアログ以外もWMKEYDOWNでボタンの処理を行おうとさせるも、
これは以前のバージョンで問題が出ることが確認されている。
WM
KEYDOWNは押しっぱなしのときでも、送信されているようで、
これによってどんな弊害が発生するかというと、
プレイ中→問題ファイル選択→タイトル、という一連の
戻る動作をEscキーに割り当てているのだが、プレイ中のときに
Escキーを押すと、たまにタイトル画面まで戻ってしまう、ということである。

そこで、単純にダイアログボックス側をWMKEYUPで処理させるということも
できなくないが、WM
KEYDOWNの詳細を調べてみると、

Specifies the previous key state.
The value is 1 if the key is down before the message is sent, or it is zero if the key is up.

どうやら、LPARAMの30ビット目が直前のキーの状態を意味するようで、
これが、0なら今のキーははじめて押されたもの、1なら継続して
押されているもの、ということらしい。

そこで、30ビット目のフラグを調べる方法に取り掛かろうとするも、
ビット演算はどうにも不慣れで、どうしようか悩む。

とりあえず、自分なりに考えてみたけど、これでいいのだろうか。

まず、30ビット目が最下位ビットにくるように右シフトして、
それと1をANDして、その返されたものを、さらにまた1と比較する。

こんなのでいいのかなぁ。
他に方法があったら教えてもらえるとうれしいです。

さて、今日はまた面倒なことをやらされまして、
今年二度目の蜂の巣取りをやらされました orz
まったく、なんでわざわざうちに巣を作るのか、って
非常に腹立たしくなってきますが、怒っていても仕方がないので、
仕方無しに蜂の巣を取る。

もちろん、作業は夜で、わざわざ蜂に刺されたいとも思わないし、
第一怖いので、冬服着て、肌が露出しない状態で作業。

まず、殺虫剤をかけて、蜂を殺して、水をかけて、
適当なそこら辺にあった木を使って、蜂の巣を取る。

前回は、殺虫剤をかけた段階で、ボトボトと蜂が落ちる音が聞こえたのですが、
今回は、聞こえず。どうやら、蜂はいなかった模様。

巣も、前回は。10センチぐらいあったけど、今回は2センチあるか
どうかといったところ。

そんな感じで、蜂の巣取りをさせられてました。

Posted at : 2006-08-21 23:50:05 / Category : none

今日の日記と、昨日のかけなかった分

.NET Compcat Framework 2.0をPocket PC 2003に入れる方法を模索してみる。

レジストリとか、ファイルをエミュレーター側から、実機の方に
コピーしてみるも、うまくいかず。
そういえば、このFrameworkをインストールしてるときに、
進捗状況が表示されてるときに、Prgram Files内の、
Compact Frameworkのディレクトリの中に何かファイルが
System.Xml.dllとか(だったと思う)がコピーされてるんだけど、
エクスプローラー上から見ても、表示されない・・・。
なんなんだろうこれ。ひょっとして、一時ディレクトリに割り当ててるのかなぁ。

結局、Framework 2.0でやるのは断念。
が、昨日、一部の.NET Framework関連のコンポーネントを
削除してしまっていて、.NET Compact Frameworkのプロジェクトを
作成するとこんなエラーが出てしまう。

このプロジェクトには .NET Compact Framework v1.0 が必要ですが、
このコンピュータにインストールされていません。

で、調べた情報を元に、.NET Framework 1.0を
再インストールするも、状況変わらず。
結局、Visual Studio 2005の修復作業をしないといけませんでした。

この段階で、午前中の三分の二近くを無駄に消費・・・。
受験生だってのに何やってるんだろう。

どうにも気になるので、休みのときに作業。

.NET Compact Framework(以下、面倒なので、いまさらながらCFと略称)を
2.0から1.0に変更して、一番問題なのが、コントロールの
ハンドルが取得できないこと。

とりあえず、リモートスパイ使って、ハンドルが取れることは確認。

が、エディットコントロールのハンドルを取得したくて、
適当な文字列書き込んで、FindWindowしても、値が返ってこない・・・。

時間がないので、他の方法を試してみる。

親ウィンドウのフォームのハンドルだけは取れるので、
そこから小ウィンドウのハンドルを取得してって、
GetWindowTextでテキストの状況を調べて、
該当するもののハンドルを返却する関数を作成。
この作業だけで30分ほど。時間かかりすぎだ。

とりあえずは取れるようになった。

WindowsでUser32.dllに入ってるものは、
Pocket PCでは大概がCoreDll.dllに入っている模様。

おかしいと思ったら、デバッグコード入れたままだった orz

あれ、、、ウィンドウハンドルを取得することはできたけど、
肝心のダウンロード状況の反映が行われない・・・。
しかも、何か、上書きができない状況になってる・・・。
不思議だ。。。

リビルドしたら、うまくいくようになった。
Pocket PC用のC++コンパイラって、この手の現象多いなぁ。
簡易リビルドをオフにしとくべきか。

何か、ソフトのほうに集中してしまって、勉強がはかどらない。
これが完成して、Free Typingのほうも完成させたら、パソコンやる時間を
思い切って減らすべきだろうなぁ。

というのが、昨日の状況。

さて、今日はというと、まぁ、あまり時間がないので、
簡素に書いていくと、

できたソフトの検証をしてみるも、ファイルの先頭部分に
ごみが入っちゃって、プレーヤー側から読み込めない。
適当にいじってみて、文字のEncoding変えたら起こらなくなった。
やっぱり、こういう変なところかえると、結構治るもんだったりする。
まぁ、根本的な解決策にはなっていませんが。

正常に動作することを確認。
これで、何とか勉強に集中できるようになった。

休み時間にて、Windows環境でも動かせるように改良してみるも、
文字コードの変換が面倒なので、断念。
てか、よくよく考えてみると、DLLの方は(C++で作成)一行しか
書き換えてなくて、コンパイルが通ったんですが・・・。
(元は、Pocket PC用に開発していたもの)
しかも、書き換えたのが、stdio.hをインクルードしただけ。
別にこんなもの、Pocket PCデコンパイルするときでも、
あってもぜんぜん問題ない。
ということで、結構、Win32API系に関しては、ソースの
互換性(っていうのか)が保たれます。

次に、Free Typingのほうの作業。
ソースコードの方は、追加の実装を含めて修正完了。
明日からは、マニュアルと、デバッグ(何かこの言葉以前にも聞いた覚えが)

ほんと、そろそろ、パソコンの時間を減らさないとまずいので、
真剣に作業してかないといけない。

あと、今までの日記に書くなったメモを、
まとめて、「メモ」の方に書くようにしないといけない。

そこまでやって、やっとパソコンの時間を減らせるだろうか。

Posted at : 2006-08-20 23:34:15 / Category : none

大方完成

ポッドキャストのデータをダウンロードするソフトは大方完成。
今、手元でデバッグの最中だけど、さすがに、4Mbyte位のデータだと、
30秒近くかかるね、、、

とりあえず、作業中のメモとかは明日。

Posted at : 2006-08-19 23:56:46 / Category : none
Posted at : 2006-08-19 23:38:48 / Category : none

ぅ・・・。

ポッドキャストのデータをダウンロードするソフト、ここに来て、
重大なミスを犯していることが発覚。
ミスというか、どう考えてもおかしいとも生んだが、
.NET Compact FrameworkがPocket PC 2003の実機上にインストールできない。
再頒布パッケージをダウンロードして、インストールするんだけど、
このデバイスはだめです、っていわれる・・・。

一応、ダウンロードもとの情報を見ると、

サポートされているデバイスのオペレーティング システム :
Windows Mobile Software for Pocket PC 2003,
Windows Mobile 5.0 for PocketPC および Smartphone,
Windows CE .NET 5.0 またはそれ以降のバージョン。

とのこと。
Pocket PC 2003っていろんな表記を見るんだけど、
これって別なのかなぁ。

うーん、、、エミュレーターではPocket PC 2003を
指定してやってるんだけどなぁ・・・。

とりあえず、そのエミュレーターからDLLだけ抜き出して
コピーしてみたけど、レジストリ情報が足りないのか、
特に変化なし・・・。

うーん、、、どうしよもないなぁ。
あきらめて、1.0で作り直すか・・・。
XML Readerは存在するようだし、問題は、
Listが存在しないくらいかな。

と、よくよく調べてみると、厳密なList(List<>)が提供されないだけで、
ArrayListの方は提供されるわけだね。

そういや、よくよく考えてみると、自分が2.0選んだ理由って、
ウィンドウハンドルが1.0だと取れないからだった気が・・・。
まぁ、別に無くても困らないだろうし、他の方法も探ってみようか。

Posted at : 2006-08-18 23:44:22 / Category : none

今日の作業の様子(箇条書き形式)

・Winampのプラグイン
Winampのプラグイン完成。
いやぁ、、、予想以上に手間取った。
というか、自分がすごい誤解をしてたのもあるけど、
結局、半ば強引に実装しました。

以下そのとき思ったことのメモ。
・プラグインを作るときは、Cでやるほうがいい
C++でやると、どうにも安定しないっていうか、
まれに読み込まれる、と解釈した方がいいのか。

追記
C++でやる場合、extern "C"を使えば、問題ないかも。
ただ、この処理がどういう処理を行ってるのかはいまいち不明。
使ってみようというかたは、別に調べてみてください。

・ソリューションを作成するときは、添付されてるものを使う
Winampのプラグインを作るときは、ソリューションを自分で作成せずに、
添付されているプロジェクトファイルなり、Makeファイルなりを使うようにする。
あと、規定のライブラリを無視する設定になっているものがあるけど、
それは有効にしてもOKだった。というか、しないと厄介。

メモ終了。

そういや、やっとプロセスのアタッチとかデタッチの使い方がわかってきた。
プラグインを作るときはこの機能があると、実行中にデバッグできて
かなりらくだなぁ。

・Pocket PCでポッドキャストのファイルを取得
今度は別のソフトで、CでDLLを作って、C#でそれを呼び出し。
しかも、対象プラットフォームがPocket PCだから、さらに厄介。

.NET Compact Framework 1.xだと、オブジェクトの
ウィンドウハンドルが取得できないので、
しぶしぶ.NET Compact Framework 2.0を使用。。。

違うプロジェクトをコンパイルしてるのに(しかも、
言語も違うのに)1Byteもサイズが違わないものが生成された(笑

なんで、こうやって宣言されてて、

struct sockaddr {
ushort safamily; /* address family /
char sa_data[14]; /
up to 14 bytes of direct address */
};

typedef struct sockaddr SOCKADDR;

これがよくて、

if(SOCKET_ERROR == connect(ServerSocket,(SOCKADDR *)&ServerSockaddr,sizeof(ServerSockaddr)))

これがいけない。

if(SOCKET_ERROR == connect(ServerSocket,(sockaddr *)&ServerSockaddr,sizeof(ServerSockaddr)))

どうしてなんだろう。
よくわからないなぁ。
どこかで自分が間違えてるか、、、

マルチバイト文字列からワイド文字列への変換関数
mbstowcs(), wcstombs()

こんなエラーが出た。

エラー 1 error LNK2019: 未解決の外部シンボル _securitycookie が関数 Connect で参照されました。 Download.obj
エラー 2 error LNK2019: 未解決の外部シンボル _securitycheck_cookie が関数 Connect で参照されました。 Download.obj
検索してみると、日本語の情報はあまりない。
英語の方で検索してみると、同じ状況のエラーを発見。
「secchk.lib」を追加してやれば、できるようになった。

DLL linker error security_cookie ??? - MSDN Forums
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=92692&SiteID=1

何故か、C#でstringでDLLで定義して、DLL側に送られてくるのが一文字だけ orz
ふざけるなぁ。。。

splitpath、wsplitpath
資料探してる間にこんな関数を発見。
「パス名を構成要素に分解します。」とのこと。

やったーーー。
やったよ、やっと3時間近く悩んでた問題(一文字しか
送られてこない問題)が解決したよ。。。

原因は、文字コードの違い。
Pocket PCの場合、基本的にすべてUnicodeで処理することになるんだけど、
C#からアクセスする関数の引数がLPCSTRになってたのが原因っぽい。
半角英数についてはそんなにうるさく言われないと踏んでたのに、
これは盲点だったなぁ。変数のサイズが違うからかなぁ。。。

C#のXMLリーダって、URLからの取得も対応してるんだねぇ。
まぁ、C++で作ったダウンローダの方はバイナリに対して
使いたいだけだから、無駄にはならないけど。

属性(Attribute)を取得したいときは下の方法。
Path.Add(reader.GetAttribute("url"));

何か、ホスト名からIPアドレスに変換したときに、
IPアドレス文字列の末尾にごみがつく・・・。

また、余計なことに時間を取ってしまったような気がする。
上の問題はwcstombsの三つ目の引数の解釈を間違えてたのが原因だ。。。
てっきり、変換前の文字列の長さかと思ったら、そうじゃなくて、
変換後の文字列を格納する変数の最大長を入れてやらないといけないみたい。
それだから、末尾にNULLが入ってなくって、ごみが入ったようになったんだと思う。

長年の疑問が解決したような気がする。
というか、いわれれば、もっともなんだけど、
HTTPのリクエスト投げるときに、バーチャルドメインで稼動してる環境だと、
IPアドレスでサーバーソケットに接続して、
そこから、どうすれば個別のドメインに対して
アクセスできるのか、ってのがわからなかった。

で、今よくよく考えてみれば、別に、HTTPのリクエストメッセージの
ところに、ドメイン名からかいてやれば、いいだけじゃないのか、
と思って、調べてみると、やっぱりそういうことらしい。
というか、スキーム名からはじめちゃっていいみたい。

おし、、、ダウンロードできる状況まで完成。
これ以降は明日以降でもすぐに実装できるだろう。

・Free Typing
手をつけようと思ったけど、時間が無くて断念。
こちらも明日以降に回します。

さて、かなり見辛いですが、今日の様子。
今日は、勉強はほとんどしていませんでした。
まぁ、今日は息抜きだと決めてやりましたが。

さて、明日からは夏休み最後までがんばっていこう。

Posted at : 2006-08-18 00:08:06 / Category : none

わからないなぁ

Winampのプラグインで、一通りの動作はできるようになったんだけど、
ファイルの再生が完了したら、自動的に次のファイルが再生されるはずなのに、
それが行われない。

何が原因なんだろうか・・・。

Posted at : 2006-08-16 23:40:41 / Category : none

Winampプラグイン

先日作っていたMusicPlayer、プレイリスト機能がないので何とかしたい、
と思っていて、実装しようにも、時間があるわけじゃないから放置していたら、
今日になってふっととある妙案を思いつく。

そう、それは、タイトルのとおり、音源部分だけが使いたいんだから、
WinampのInput Pluginとして実装しちゃえばいいじゃん(方言)ということ。

ということで、早速資料を探してみると、、、やっぱり、
予想していたとおり結構簡単そう。
ある意味、実装するのに戸惑うより、ネット上の資料を
検索する方が戸惑うかもしれない、というほと。

ということで、早速、マニュアルを見ずに実装。
まぁ、もちろんできるわけがない。

で、マニュアルを読んでみると、同梱してある
Makeファイルを使って、Visual Studioに読み込めとのこと。

それを使ってやってみると、とりあえず、サンプルのものはコンパイル完了。
プラグインとして認識することも確認。

で、ここからがまた厄介で、DLLの性質上(だったはず)
C++が使用できなくて、一部書き換えが必要だったのと、
最初のうち、同梱されているMake使ったことで、C言語の
設定に変えられてるとは気づかなくて、(実際、
プロパティ開いても、コンパイルの設定はC++になってるし・・・。)
気づくまで、何がなんだかわからない状態でした。

途中で、C言語の設定に変わってることに気づいて、変数宣言の位置変えたりとか、
FMODのライブラリをCのものに差し替えたりとか、いろいろとやって、
やっとのことで、再生することだけは完了。

ただ、あくまで再生だけで、リソースの開放とか、
曲の終了時の通知とか、そこら辺がよくわかってないので、
明日からはそこら辺を見て生きたいと思う。

ということで、Free Typingはまた後にのびそうです・・・。

あと、More Effective C++到着。
早速空いてる時間に読んでいきたいと思う。

Posted at : 2006-08-15 23:40:44 / Category : none

MusicPlayerの解説

昨日作ったMusicPlayerについて、説明をしようと思います。
まず、ダウンロード先は、こちら。
今回は、バイナリとソースと両方用意しました。

バイナリ
http://yasuharu.net/admin/diary/img/MusicPlayer.zip

ソース
http://yasuharu.net/admin/diary/img/MusicPlayer_src.zip

さて、まず、開発環境ですが、コンパイラはVisual C++ 2005。
使用したライブラリはFMODというもので、さまざまな
プラットフォームに対応している、音楽ファイル操作ライブラリです。

オーディオの使い方(日本語のFMODに関する説明)
http://www.h7.dion.ne.jp/~qemu-win/Audio-ja.html

FMOD sound system - [audio library api music mod s3m xm it mp3 ogg vorbis wma midi cdda dsp]
http://www.fmod.org/

で、まず、今回どんなことをやりたかったのかというと、
イコライザをかけて、反響するような音声を出したかった、
というのがやりたかったことです。
ソフト自体は、1年位前にMCIを使って作っていたのですが、
最近になって、友人にあげたら反響があったので、
GUIのアプリケーションとして、作り直した、ということです。
(元のものはコンソールのアプリケーションだった)

どうやって実装したかというと、自分には音声の波形を
いじったりとか、そういうのは無理だったので、
ふと思いついた、同時に複数の音声を流して、そのときに
微妙に再生間隔をずらす、という方法を使いました。
要は、イコライザで反響をした状態を、音波が観測者に対して、
複数の音波でずれて観測する、と考えて、音源から音波を出す間隔を
ずらしてやろう、という考えです。

仕組みの説明については、そんな感じで、
プログラム的なことについて触れると、
言語は(言うまでも無く)C++で、Win32APIだけを使って書いてあります。

あと、一番厄介なライセンス関係ですが、
FMODについては、非営利であれば、ライセンスは不要とのこと。
で、MP3の方については、ちょっとはっきりしなくて、
ゲームであれば、5000本以下のダウンロード数であれば、
大丈夫と書いてあるのですが、ソフトウェアの方に関しては、
いまいちよくわからない・・・。
これだけ、MP3ファイルがありふれれても、特許に関連したのに
触れた記事もあんまり見つからない・・・。
まぁ、とりあえず、小規模で5000本以下なら問題ないと思う。

と、そんな感じです。
あと、Free Typingのほうは、急に思い出したことがあったので、
それを実装中・・・。
後は、テストするだけだけど、マニュアルとかも書かないといけないし、
結構かかりそう。

Posted at : 2006-08-14 23:32:38 / Category : none

洋書一冊購入 & 作っていたソフトひとつ完成

洋書を一冊購入。

Amazon.co.jp: More Effective C++: 35 New Ways to Improve Your Programs and Designs
(Addison-Wesley Professional Computing Series): 本: Scott Meyers
http://www.amazon.co.jp/gp/product/020163371X/

値段は、6500円。とりあえず、高い。

まぁ、なぜこの本なのかというと、

・英語の文章に慣れたかったこと。
・パソコン関連の本が何かほしかったこと。
・More Effective C++自体はいつか買おうと思ってたけど、
 日本語訳があまりよくないので、原著の方がよいということ。

というような、滅茶苦茶な動機で買うことにしました。

まぁ、どうせ、英語の本はこれからもいくらでも読むことになるだろうし、
今のうちに慣れとくのがいいのではないかと思う。
別に、英語の文章読みたいっていうだけじゃなくて、
中身の方も十分気になるような内容ですがね。

ちなみに、日本語訳のほうはというと、
一度だけ友人に借りて読んだことはある。
内容は、確かに日本語訳がわかり辛かったけど、
書いてある内容はとても興味があるものばかりだった。
(例外とか、スマートポインタとか)

ということで、早く来ないか待ち遠しい。

ところで、話は変わって、後から気づいたことで、
More Effective C++の日本語版って、今、Amazonとかには
置いてないんだね・・・。
別に買う気はないけど、結構意外だなぁ。
でも、意外と、駅前の本屋とかにありそうだなぁ。

さて、話は変わって、作っていたソフトについて。
まず、どんなソフトか、簡単に紹介しますと、

音楽ファイルを再生するときに、反響しているような感じを出させる。

要は、イコライザの機能ですね。
イコライザの機能で、反響が高いものを選択したような感じを演出します。

ダウンロードはこちら。
http://yasuharu.net/admin/diary/img/MusicPlayer.zip

動作環境:Windows

操作方法は、再生したいファイルをドラッグアンドドロップしてください。
「ファイル名」の欄にファイルパスが挿入されたら、「再生」を押してください。
「再生」を押した後、ソフトが5秒ほど固まりますが、これは仕様です。
その後、音楽が再生されます。
別の音楽を再生したい場合は、再生したいファイルをドラッグアンドドロップして、
「停止」を押してから「再生」を押してください。

仕組みと、ソースコードについては明日解説しようと思います。

Posted at : 2006-08-13 23:32:19 / Category : none