http://decomo.info/wiki/" /> クソゲ〜製作所 - 2005年10月の日記

クソゲ~製作所

新システムに移行中:http://decomo.info/wiki/

« 2005年09月 | ホーム 2005年12月 »

2005年10月27日(木)

 

設計に詰まる...

 
20051027-01.jpg

作成中の簡易オーディオプレーヤ、とりあえず、プレイリスト部に読込んだファイルのパスを表示するところ「まで」は出来た。プレイリストで選択した曲を再生する部分も、実装しようと思えば、そう悩まずに実装できると思う。

だが、問題はその実装方法。どういうクラス分けをして、それらクラスにどのような機能を持たせ、どのように呼び出すか、といったソフトの設計に関することで悩んでいる。

そもそも、プレイリストのデータを、Controllerクラス(UIからの情報を受け、各クラスにメッセージを送る、アプリ全体を統制するクラス)で直接いじくるという設計はいいのだろうか。構想としては、プレイリストに関することはPlayListクラスに全て任せ、Controllerクラスはあくまでも、UIからの要求をPlayListクラスへ送るという業務に専念したい。

だが、プレイリストのUI部分であるNSTableViewは、表示するデータ源をInterface Builderで指定してやらなければならない(他の方法もあるのかもしれないが、自分は知らない)。指定する為には、PlayListクラスをインスタンス化しなければならないのだが、そうすると今度は、インスタンス化されたPlayListクラスを、Controllerクラスから知る術が無い。結果として、ControllerクラスとPlayListクラスは、互いに完全に分断独立されたクラスになってしまう。

そんな訳で、ControllerからNSTableViewを直接操作しているが、プレイリストをクラス化しようがしまいが、一度、ソフトの設計を整理する必要がありそうだ。

とは言え、こうした設計に関する知識は皆無だったりする。何か、文献を当たるしかあるまい…。ソフト完成までの道は、まだまだ長い………。

Decomo 02:23 comment (0) trackback (0)

2005年10月20日(木)

 

NSArrayとNSTableViewとNSArchiverを学ぶ

 

http://decomo.info/wiki/blog/2005/2005-10-20に移動しました。

どのクラスも、まぁ、その名前の通り。それぞれ、NSArrayは配列を、NSTableViewはテーブルビュー(Winで言う所の、エクスプローラで表示方法を「詳細」にした時に表示されるような形式)を、そしてNSArchiveはデータの保存に関するクラスである。

Windowsに関するプログラミング技法は全然知らないので比較はできないが、とにかくどのクラスも便利過ぎる。「この値を格納しろやー」「このデータを『商品名』フィールドに表示してくれやー」というメッセージを、それぞれのインスタンスに送るだけで、きっちりと期待通りの動作をしてくれる。

何より凄いのが、NSArchive。各オブジェクトに -encodeWithCoder: プロトコルを実装してやれば、保存したいオブジェクトに含まれる、別のオブジェクトまでを全て一発で保存してくれる。そうやって保存したデータの読込みは、NSUnarchiver クラスで一発OK。面倒な保存/読込み処理を、これらのクラスに丸投げできて、非常に便利便利。

前回のNSSoundとあわせて、簡易サウンドプレーヤを作る為の材料は、これで揃った。あとは実際に製作に取りかかるのみだ。頑張るぞー!!

Decomo 00:13 comment (2) trackback (0)

2005年10月07日(金)

 

NSSoundと戯れる

 

そろそろ、本格的に簡易オーディオプレーヤを作るべく、NSSoundクラスのドキュメントを読んだ。

何か、扱いが凄い簡単なんですけどー...。ファイルを与えてオブジェクトを作成し、あとは「play」「stop」と言った、見て字の如くな機能を備えたメソッドを呼んでやれば、その通りに動作してくれるようだ。

というわけで、早速実装実装。

ドキュメントにはサンプルコードが付いているので、それを切り貼りして、InterfaceBuilderでActionを設定してやるだけ。そして、出来たのがこれ。

20051007-01.jpg

最初は動かなかったが、試行錯誤を繰り返すうちに、無事動くようになった。かかった時間は1時間もないだろうか。ソースの行数にして、僅かに70行。たったそれっぽっちのプログラムで、オーディオプレーヤとして有するべき、基本的な機能は持ってしまっているという点が凄い。NSSound万歳である。

ドキュメントによれば、NSSoundは16bit/44.1k or 22.05k HzのAIFFやWAVEなどの、単純なファイル形式しかサポートしていないことになっている。が、しかし、実際にはMP3やAAC(m4a)も難なく読めてしまっている。Technical Q&A QA1335を読むと、v10.3以降では(?)QuickTimeやCoreAudioで再生できる形式ならば、再生できるようになったとか。

便利なNSSoundにも欠点はあって、それはストリーム再生ができないということ。つまりそれは、NSSoundで再生できないファイルは、どんなに足掻いても再生できないということだ。非対応のファイルは再生できなくても当然、と思うかもしれないが、ストリーム再生に対応していれば、様々なデコーダを用意しておいて、そのデコーダが吐き出すWAVEなりAIFFなりを流し込んでやれば、再生することができる。

ストリーム再生を行うとなると、CoreAudioかQuickTimeを使わざるを得なくなるわけで、そうすると一気に難易度が上がる。しかし、各種オーディオファイル(エミュの音源ファイルなんかも含む)の再生を考えると、避けては通れない道だ。まぁ、そのうち勉強しよう。

Decomo 01:06 comment (0) trackback (0)