C言語の基本とかお手軽CGとか
ヘッダファイルを作ってみる
LPC1114用のPwmOut向けシンセライブラリをボチボチ書き直し始めているんですが、色々と課題が。
まずはC3とかA4#とかで音程を指定できるようにヘッダファイルを書いてみて、すんなりOKでしたが、そこから先が結構未知の領域で本とかwebとかで情報を探しながら手探りでやってみてました。
ヘッダファイルにstaticの変数書いちゃいけないとか知らなかった。よく検定受かったな。
- 作者: David Griffiths,Dawn Griffiths,中田秀基,木下哲也
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/04/03
- メディア: 大型本
- この商品を含むブログ (5件) を見る
音程の周波数定義の他、オシレーターとか音の合成とかをヘッダファイルにして問題なく動くことは確認できました。
PCMを扱う箇所はグローバル関数が関係していたりするので、とりあえずメインファイルの中に保留。
そのうえでオシレーターと合成を書き換えて、2DCOにしてみたところ怪しいところはあるけれど、取り敢えずは動きました。こういう怪しい挙動の検証のためにもデバッガが欲しくなってきます。mbedのweb環境は手軽で良いんですがデバッグ関連はまだちょっと弱い。オフラインのIDE環境に軍配があがります。
mbed LPC1114FNのmbedファイルをエクスポートできる開発環境は以下の通り。
- Keli μVersion4
- LPCXpresso
- GCC
- IAR systems
- Em::Blocks
このプロジェクトについてはLPCXpresso一択でしょうねえ。mX-LPC1114-S買えばデバッグ環境が入手できます。akizukidenshi.com
今は勉強がてら遊ぶので非力なLPC1114FNが良い感じなのですが、本気で音質とか考えるならばDACが3つあるSTM32F334R8T6がいいのかも知れないです。
取り敢えずデバッガは置いておいて、スタック構造を持つサウンドエンジンにするための変更を書いていたところ、音が鳴らなくなりました。
恐らく、TickerクラスとPwmOutクラスがタイマーの扱いでバッティングしていると思うのですが、どうすれば良いかは現時点では考えるための材料が全く無い状態。多分ずっと懸案にしていたライブラリを使わない直叩きをしないといけないと思われるのでまずは資料を漁り基本を知らないと。
直叩きの簡単な例が出ていたMonolistの記事を見に行ったところ、最終回を迎えていました。お疲れ様でした。初心者にとって非常に為になる連載でした。monoist.atmarkit.co.jp
まだやっていなかった連載分の例を軽く写経してノートにメモをとり、さて次はトラ技の記事読むかというところで一息ついたら、ちょっと集中力が途切れてしまったので、お茶をしたあとStructure Synthで遊ぶことにしました。
お手軽CGを作ってみる
structuresynth.sourceforge.net
Structure Synthは随分前に存在を知って、ちょっと触ったっきりになっていたのです。スクリプトは文脈自由文法でとても簡単。ただ、最新版ではJavascriptが統合されていて、色々自動化できるようになっています。それでアニメーションとか作れるようになっていて、それで興味を持って触ってみたけれど案の定よく判らなくてほったらかしにしていたと言う。
ただ、今回図書館に行った時に別の本を借りて、その流れでなんとなく借りた簡単解説本を改めて読んでみたら、アニメーション作るのもものすごく簡単でした。もしかしたら自分のこの手の事に関する理解力が上がったからかも知れない。
- 作者: フィリップ・ボール,林 大
- 出版社/メーカー: 早川書房
- 発売日: 2011/09/09
- メディア: 単行本
- 購入: 3人 クリック: 58回
- この商品を含むブログ (14件) を見る
Structure Synthで描く3D‐CGアート (I・O BOOKS)
- 作者: 柴田良一
- 出版社/メーカー: 工学社
- 発売日: 2014/10
- メディア: 単行本
- この商品を含むブログを見る
取り敢えず試作のスクリプト(ファイル名が"ss_test02.es")
set translation [-0.133891 -2.76372e-07 -20] set rotation [-0.694201 -0.700668 -0.164788 -0.499769 0.633962 -0.59019 0.517996 -0.327355 -0.790268] set pivot [0 0 0] set scale 1.46838 set background #ddd set colorpool grayscale set seed 70 set raytracer::light [5,5,10] set raytracer::shadows true set raytracer::samples 10 set raytracer::dof [0.5 / 0.8] set raytracer::size [800 x 600] set raytracer::reflection 0.25 #define pos 0 (float:0-60) {color #D33 a 0.3} box {x 1 s 0.3 0.3 2 color random} box {x -1 s 0.3 0.3 2 color random} box {y 1 s 0.3 2 0.3 color random} box {y -1 s 0.3 2 0.3 color random} box {z 1 s 2 0.3 0.3 color random} box {z -1 s 2 0.3 0.3 color random} box rule circle md 4{ 12 * {rz pos} 1 * {x 2 s 0.5 color random} circle box } circle
アニメーション用のスクリプト("ss_test02.es"と同じフォルダに入れておく)
#javascript function ss(number) { while (number.length < 4) { number = "0" + number ; } return number; } Builder.load("ss_test02.es"); max = 30; for (i = 0; i <= max; i+=1){ Builder.reset(); Builder.setSize(0,500); Builder.define("pos",i); Builder.build(); Builder.raytraceToFile("N" + ss(i+1) + ".png",true); }
こうしておいてアニメ用スクリプトファイルを実行する(操作としてはビルドボタンを押す)と、スクリプトの入れてあるフォルダに連番のpngファイルが保存されます。
要は、元のスクリプトで#defineで変数を定義しておいて、アニメ用のファイルでその変数を変えながらレンダリングしていくという段取り。
Structure Synthのレイトレーシングはあまり綺麗でないと言われてますが、スピードとか考えたら中々綺麗ではないでしょうか。
あとはまとめて動画にすれば完成。自分はlinuxでだとopenshot愛用してます。
ちょっとエンコードが荒かったですね。youtu.be