投稿

7月, 2012の投稿を表示しています

C言語 サイン波をつくる

イメージ
任意のサイン波を作って、それをwavファイルとして保存するプログラム。子ども向けの学習サンプルとして作ってみた。下の例ではサイン波の足し算をしているが、掛け算などすることで、フーリエ変換の学習にもなる。下記のプログラムで作ったwavファイルはヘッダを含まないので、Audacityなどの波形編集ソフトでRawデータとして読み込む必要がある。サンプルフォーマット(音量の分解能)は32bit float。 サイン波の合成 #include &ltstdio.h&gt #include &ltstdlib.h&gt #include &ltmath.h&gt int main(void){ FILE *fpw; /* 書き込み用ファイルポインタ */ float *pbuff; /* メモリのデータを指す */ int samplingfreq = 44100; /* サンプリング周波数 */ int sec = 10; /* 作成する波形の長さ(秒) */ int fileSize = samplingfreq * sec; /* ファイルの大きさ */ float step = 2 * M_PI / samplingfreq; /* 点間のステップ */ int i; /* 新規ファイル作成 */ fpw = fopen("32bitF_raw.wav", "wb"); /* 失敗時終了 */ if (fpw == NULL) exit(EXIT_FAILURE); /* メモリを確保して先頭アドレスをpbuffに入れる */ pbuff = (float*)malloc(sizeof(float) * fileSize); /* 失敗時終了 */ if (pbuff == NULL) exit(EXIT_FAILURE); /* データ作成 & メモリに書き込み */ for(i=0; i&ltfileSize; i++){ *(pbuff+i) = /* 例 0.3は振幅 440は周波数Hz */ (0.3 * sin(i * st

UML Class Diagram の表記

イメージ
まずはクラス・ダイアグラムからスタート。はじめにすることは、図の意味を確認することから。個人的にはJavaで使うことを前提としているので、Javaとの対応を中心に学習して、細かな部分は後回し。 concrete class 一般的なクラス 上記の四角形がクラスアイコンで、中にはクラス名、属性(attributes)、操作(operations)が書ける。操作には名前の後に()が付いている。一番シンプルな表記はクラス名だけのもの。 属性(attributes)はJavaでのフィールドに相当。 操作(operations)はJavaでのメソッドに相当。 visibility(可視性) 属性と操作に対して種類を指定できる + public どこからでもアクセス可能 - private クラス内だけからアクセス可能 # protected クラス内及びサブクラスからアクセス可能 abstract class 抽象クラス Javaでの抽象クラスをクラス・ダイアグラムでは以下のように表す。表記としてはクラス名がイタリック書体になっているだけ。抽象メソッドもイタリック体で書く。 interface インターフェイス インターフェイスの表記はステレオタイプ&lt&lt&gt&gtを使って、クラスの種類を指定する。クラス名の上に&lt&ltinterface&gt&gtと書くことでインターフェイスを指定したことになる。またクラスと違った省略した表記もある。省略した場合、使うpathが変わるので注意が必要。 relationship path クラスの関係を表す線 クラスとクラスは線で結ばれる。線種は実線やら破線やら、矢印などがあるのだが、それぞれ定義があり、さまざまな関係を表現している。これに装飾を加えることで意味をより限定的にすることができる。線の種類も多く、混乱しやすいので整理してみた。 矢印は何かの流れを想像してしまいがちだが、クラス・ダイアグラムにおいては、そうでもないので混乱しやすい。そのときはソースコードを考えると理解できる。仕組みとしては、あるクラスが他のクラスを認識(使っている)している場合、そのクラスを指すことになる。例えばスーパ

UML (Unified Modeling Language) でも

イメージ
いろいろ使えそうなUML オブジェクト指向プログラミングに興味があるので、その設計図の役割を果たすUML (Unified Modeling Language) の学習をスタートしようと思う。UMLはモデリング言語という言語で、プログラミング言語に近い存在。CやJavaのテキストに対してビジュアルを使う。UMLの目的は複雑なプログラムの分析や設計。単純なプログラムなら必要ないが、クラスを数十使う規模のオブジェクト指向のプログラムであれば、UMLを導入して、しっかり設計した方がよい。ちゃんとした設計であれば、修正や拡張が容易に行えるようになり、作ったパーツは使い回しができるようになる。個人的には小規模なプログラムしか作らないので、現状ではオブジェクト指向も必要なかったりするのだが、UMLはプログラムだけでなく、様々な分析、設計に使えるので、やってみる価値はありそうだ。仕事でも使えるかも・・・という期待もある。 クラス、シーケンス・ダイアグラムから学習 UMLにはたくさんのダイアグラムがあって、目的に応じて使い分ける。UML1.xから現在のUML2.xを比較すると構成が変化していて、拡張もされているようだ。はじめから全部使うことはなさそうなので、一番利用頻度が高そうな、クラス・ダイアグラムとシーケンス・ダイアグラムから学習してみる。そのほかは、必要に応じて、たまに利用する程度だろう。UML入門書や入門サイトをみるとユースケース・ダイアグラムをはじめに扱っているけど、あれはシンプルすぎて逆に表現が難しい。クラスやシーケンスをしっかり描ける人でないと使いこなせないように思えたので、クラス、シーケンスの次にユースケースという流れかな。 UML2.2のダイアグラムの構成 太字が各ダイアグラムとなる。 UML diagrams: Structure diagrams: Class diagram Component diagram Composite structure diagram Deployment diagram Object diagram Package diagram Profile