webMAGURO

Opalがなかなか面白いのでDXRuby互換インターフェイスを少し進めて、Fontクラス追加とちょこっとメソッド追加を行った。ついでにタッチインターフェイスも微妙に対応。 いまんところ試作レベルにも達していないので名前をつけるほどでもないのだが、とりあえ…

Opal:Ruby to Javascript Compiler

RubyのコードをJavaScriptに変換するOpalというソフトウェアがある。Opal自身はRubyで書かれていて、gemでインストールできる。これを使ってRubyコードをJavaScriptに変換してWebサイトにアップロードすると、手元でRubyで書いたコードがブラウザ上で動作し…

x86アセンブラの続き

動的にバイナリを生成して実行できるのでJITアセンブラなわけだが、こいつに簡単な命令をいくつか追加して、ModR/MバイトとSIBバイトも出力できるようにした。これでメモリアクセスやインデックス指定ができるようになったし、ebpやespなども使えるようにな…

x86アセンブラDSLを作ってみるテスト

ずーっと前にStringでバイナリを作ってDLで呼び出すコードを書いたことあったけども、x86アセンブラの文法はわりとそのままRubyで解釈できるんじゃね?って思ってDSLを作ってみるテスト。Rubyも新しくなったからfiddleを使う。 require 'fiddle' module X86A…

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…

DXRuby1.5.17devリリース

とりあえずRuby2.1.0用をWikiに置いた。他のバージョン用のものはまた後で。環境まだ整備できてないし。 今回は目立つ機能追加は無いが、こまごまとメソッドの追加と、制限の緩和がメイン。詳細はreadmeの更新履歴を見てもらうということで。 Window.loopが…

DXRuby Advent Calendar 2014 : DXRubyの怪しげで不自然な挙動について語る

この記事はDXRuby Advent Calendar 2014の15日目です。14日目の記事はあおいたくさんの「ゲーム用GUIフレームワーク作った(作ったとは言ってない)」でした。どっちやねん。俺もDXRubyWSというウィンドウシステムを作ってはいるのだが、ゲーム用UIにも使える…

Procについて

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

module Easing

ちょと前にDXRuby Advent Calendar 2014の記事を書いたのだが、やっぱり突貫工事で記事を書くとちょっと辛いものがある。1日ぐらい寝かしてからアップすればよかったか。と言っても指摘事項はほんとに厳しいところを突かれていて、例えばティアリング防止な…

DXRuby Advent Calendar 2014 : DXRuby機能リクエストにお答えする

この記事はDXRuby Advent Calendar 2014の5日目です。4日目の記事はしのかろさんのDXRuby機能リクエストでした。しのかろさんはDXRubyを使い込まれているようで鋭い指摘が多い。確かに使っていると「何でこれが無いのかな?」って感じる物なのだが、実は今ま…

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

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

Window.loopを複数置く

あと丁度1ヶ月でRuby2.2が出る。んじゃないかと思う。 そうするとDXRubyもそれに対応してビルドしてリリースしないといけないのだが、次はTypedData化しないといけなくなるのでそのままビルドするわけにもいかず。つっても警告はビルド時の話だと思うので問…

U25 Ruby“ネ申”プログラミングコンテストin島根

少し前の話になるのだけども、「U25 Ruby“ネ申”プログラミングコンテストin島根」というコンテストが名前のとおり島根で行われて、この最終審査会が10月11日にあった。 http://www.ruby2014.shimane-u.ac.jp/ この最終選考に残ったものの中に「MotionTool」…

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

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

SDL_mixerのラッパを考える

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

DXRuby Advent Carendar2014だそうで

ここ。 http://www.adventar.org/calendars/345 TwitterやGithubのアカウントでログインできるのでネタをお持ちの方もそうでない方も登録して何か書いてやってくださいな。 俺も何か面白いネタがあったら書く方向で考えていく感じ。