2015-01-01から1ヶ月間の記事一覧

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を使って何をどこまでできるのか実験してるという感じで、続けていった結果として直接的に何かが完成するというわけではなさそうな気がする。 解放について 前々回の記事に通りすがり…