Ruby

DirectSoundとRubyのプログラミング その15

続き。 目立つバグをつぶしてpauseとresumeを実装したので次はフェードイン/アウトを実装してみよう。 どのように作るか 基本的にはフェード処理を流用する。play/stop/pause/resumeそれぞれに引数を追加して、時間と、フェードインの場合は目標値を設定でき…

DirectSoundとRubyのプログラミング その14

続き。 サウンドライブラリによくある機能で不足しているものとして、pauseとresumeがある。再生を一時停止し、再開する。DirectSoundバッファには関数としてplayとstopはあるが、pauseとresumeは無い。じゃあどのように実装するかというと、っていうか、sto…

DirectSoundとRubyのプログラミング その13

続き。 いくつか非常に気になるバグがあるのだが、それを直すのはまた今度として、今回はそれよりも気になる超基本機能の欠落をどうにかしよう。

DirectSoundとRubyのプログラミング その12

続き。 前回の最後のほうで構成について考えたが、現在の構成では波形のリアルタイム生成がやりにくい。できることはできるが、MySoundクラスを作り直す感じになってしまうことになるので無駄に手間がかかる。 IO→デコーダ→MySound→SoundTestという4階層構造…

DirectSoundとRubyのプログラミング その11

続き。 シーク機能 現状、ogg再生中にループすることができないのは、シーク機能が無いからである。いや、vorbisfileにはあるのだが、インターフェイスを作っていない。これを作ってみよう。 vorbisfileには大量のシーク関数が用意されていて、サンプル単位…

DirectSoundとRubyのプログラミング その10

続き。 メモリから読み込む DXRubyでも要望があって開発版で対応したのだが、ファイルからだけじゃなく、メモリに持っているバイナリデータを使って再生する機能を作ってみよう。 といってもそんなに難しい話ではなく、Rubyで書くならファイルの代わりにStri…

DirectSoundとRubyのプログラミング その9

続き。 現状ではストリーミング再生するときにRuby側でスレッドを作っているが、これは固定処理なのでC側に移してみよう。 その前にちょっとクラス構成を 固定処理と言ってもバッファをArrayで返すかStringで返すかで呼ぶメソッドがwritebufになったりwriteb…

DirectSoundとRubyのプログラミング その8

続き。 wavファイルの全体を読み込んで単発で鳴らす いままでストリーミング再生に取り組んできて、前回でoggを再生できるようにまでなった。適当に作り始めたものを気が向くままいじっていたらだんだん高機能になっていく、というのは面白い。 今回はストリ…

DirectSoundとRubyのプログラミング その7

続き。今回はちょっと趣向を変えて、oggファイルの再生をしてみよう。 oggについて 拡張子oggのファイルはOgg Vorbisというファイルフォーマットというか圧縮形式というかのファイルで、OggというコンテナにVorbisという形式のデータが入っている。Vorbisは…

DirectSoundとRubyのプログラミング その6

続き。 前回のバグについて 色々やってたらいくつかバグを見つけた。 まず、8bitのwavファイルのデータは0〜255の符号無しで波形を表現するのでRuby側のunpack文字列は小文字のcじゃなくて大文字のCになる。C側の計算も間違っている。 それから、16bitのwav…

DirectSoundとRubyのプログラミング その5

あけましておめでとうございます。続き。これはたぶん、RubyでDirectSoundを使って何をどこまでできるのか実験してるという感じで、続けていった結果として直接的に何かが完成するというわけではなさそうな気がする。 解放について 前々回の記事に通りすがり…

DirectSoundとRubyのプログラミング その4

なんとなく続き。どこまで続くのか俺自身にもわからない。 ポーリングとイベント 現状では適当なタイミングでバッファをチェックして、空いた部分に生成したデータを詰め込む、という動作をさせている。これをポーリングと言うが、DXRubyで使う場合は1フレー…

DirectSoundとRubyのプログラミング その3

なんとなく続き。 SoundTestをクラス化する 全体のコードはgistに置いておいた。今回はDirectSoundについては特に何もしてなくて、主にRubyに関する部分の修正となる。 これを全部説明するのは大変なので、ポイントに絞って順番に行ってみよう。

DirectSoundとRubyのプログラミング その2

なんとなく続き。気が向いたので書いてみた。 再生カーソルと書き込みカーソル DirectSoundでポーリングないしイベント受信でバッファを書き換えようとした場合、まずバッファ内でDirectSoundが使おうとしている領域をチェックしなければならない。と言うの…

DirectSoundとRubyのプログラミング

サウンドAPIは色々あるが、バッファをロックして書き込んで再生すれば音が出るという部分についてはどれも大きな違いは無い。WindowsVista以降ならWASAPIというオーディオAPIがあり、色んな機能があって優秀なのだが、このへんのOS上ではDirectSoundはWASAPI…

Procについて

RubyにはProcクラスという組み込みのクラスがあるが、例えばるりまのProcのところを見ると ブロックをコンテキスト(ローカル変数のスコープやスタックフ レーム)とともにオブジェクト化した手続きオブジェクトです。とか書いてあってさっぱり意味がわからな…

Rubyによるリモートデバッグ

IDEとかでリモートデバッグするためのgemなどはあって、それを使えば便利で簡単にリモートデバッグができるようなのだが。 それはそれとして、その手のものを自分で作ってみるという興味本位の行動があっても特に問題は無かろう。さて、Rubyにはset_trace_fu…

SDL_mixerのラッパを考える その2

前回、SDL_mixerのChannelの問題点を指摘し、その解決法の一部を実装した。残っている問題はChannelに空きが無かった場合の処理である。それを作る前に少し検討しておかないといけないことがある。 効果音の重要度と処理方式 SDL_mixerではMusicとChunkしか…

SDL_mixerのラッパを考える

SDL2の周辺ライブラリのひとつ、SDL_mixerは各種フォーマットの音データを簡単に再生できる。その点では非常に扱いやすいのだが、再生した音の制御という点では非常に低レベルな機能しか持ち合わせていない。 sdl2rで実装したSDL_mixerの機能を扱いやすくラ…

sdl2rのそのままじゃないところ

一応、sdl2rはSDL2そのままの形でRubyから使えるというのが売りなのだが、そもそもがC用のライブラリであるだけに、どうしてもそのままでは困ったちゃんな部分があって、Ruby向けに修正しているところがいくつかある。そのへんを書いておこうと思う。

sdl2rの使い方

現在、Ruby用SDL2バインダのsdl2rをなんとなく作ってみている。 基本的にはSDL2の関数やマクロをそのまま実装した感じで、そのままだと困っちゃう部分に関してはちょこっとだけ手を入れている。SDL2のラッパなのでMacでもLinuxでもビルドできれば動くはずで…

手続き脳のためのラムダ式のはなし

ずいぶん前からメジャーなオブジェクト指向言語にラムダ式が導入されている。 俺がいる職場では未だに.net2.0なので使えないのだが、最近ちょこちょことヘルパーライブラリを作っていてSystem.Funcが使えたらなあーなどと思うことがよくある。職場の何人かに…

CライブラリとRubyの不整合について

昨日、SDL2のRubyバインダを作ろうとして挫折したので、何が問題になったのかをメモ。 結論から言うと、SDL2のオブジェクトの寿命管理がC用の考え方で作られていて、Rubyで扱うためにRubyオブジェクト化した場合にGCによる解放処理との整合性が取れない。SDL…

mrubyのVMざっくり解説

なんとなく、mrubyのVMの基本的なところを書いておこうと思ったので。誰かの参考になれば。 大きな仕様的なところは、 ・32bit固定長のバイトコードを解釈して動作する。 ・レジスタをスタックに確保するタイプのレジスタマシンである。従って、スタックの任…

mrubyのkhashとHashの高速化

mrubyカテゴリあったほうがいいかなーとか思うが、そんなに書くこともないからいらんかも。増えるようなら考える。 khashをどうにかして高速化できないかなーと細かい修正を入れてみて、ついでにHashが遅いらしいので書き込みを高速化してみたのでそれをネタ…

ocraで画像や音その他のファイルをexeに入れる方法

ocra による Ruby の EXE 化を見てもらえば終わる話なのだが。 ちょっと具体的にDXRubyで扱うリソースをまとめてみたのでそのレポートをば。 サンプル ここに置いておいた。解凍するとexeファイルが1個出てくる。これを実行するとサンプルゲームが動く。exe…

RubyInstallerのRuby2.0でRubyInlineとOcraを使ってexe化する

Rubyのコード内にCのコードを埋め込んで、その部分だけCコンパイラでコンパイルして拡張ライブラリ化し、呼び出す。これがRubyInlineの仕掛けである。Windowsでうまく動かないとか、Ocraでexe化するのがうまくいかないとか、色々あったが、最近のんは改善さ…

松江Ruby会議05に参加してきた(3)

昨日の最初に書いた「普段置かれている環境への疑問」てのは職場のことであって、Twitterとかで関わってる人たちのことではない。ここを誤解されると致命傷になりかねんので一応念のため。さて、今回は松江Ruby会議05ちょー個人的感想の最終回で、DXRubyに関…

松江Ruby会議05に参加してきた(2)

前回は講演の超主観的な感想であった。全体的にレベルが高いのは松江だからなのか、それともどこに行ってもこんな感じなのか。 自分が普段置かれている環境に若干の疑問を持ちつつ。次いってみよー。 松江、島根の取り組み Ruby合宿、中学生Ruby教室、Ruby.J…

松江Ruby会議05に参加してきた

2014/3/15(土)、島根県松江市にてMatsue.rb主催の松江Ruby会議05が行われた。それのゲスト講演をしてきた。 島根県がやっているRuby合宿でDXRubyが使われているという繋がりでDXRubyに関する講演の依頼が来たので、ちょっと喋りに行ったという経緯である。 …