2008年01月22日

dsound.dllに乗っかる

技術的には出来るだろうとは思っていたものの、何となくやる気がなくてずっと未着手だったプログラムの実装テストなどをしていた。

内容というのは実際にはとても簡単なものなのだが、ミキサーの設定に依存せず他のプログラムが鳴らす音を取り込む、というもの。
ただし不特定多数のプログラムに対してこれを実現しようと思うとかなり骨の折れる作業になるので、取り合えずターゲットにしたいプログラムを決めてそのソフトからの取り込みが正しく行えるかどうかというのを基準に作業した。

結論から言うとかなり現実的なレベルでそれが可能だという事がわかった。
記事タイトルにもあるように dsound.dll の呼び出しを乗っ取り、DirectSound を使用してストリーミング再生、あるいは録音しているバッファの内容を盗み読みし、それをプロセス間通信で他のプロセスへ横流しする事で録音できる仕組みを作った。

仕組み上どうしてもリサンプラーやミキサーが必要になるため状況次第でパフォーマンス問題は否めないものの、少なくともこの仕組みを利用する事でかなり多くの状況で役に立つプログラムが出来上がりそうだ。

このプログラムが生きるのは主に様々な事情により録音デバイス自体が使えない場合である。もちろん IDirectSoundBuffer に書き込まれた内容自体を盗み読みするので劣化ゼロでデータを抽出出来るなど一応他のメリットもあるが、今回はそういう目的ではないのでその辺はあまり注目していない。
例えば録音ミキサーの使い方がわからなかったり、マイク入力に設定しており何らかの理由によりWaveMixが使えない、あるいは使いたくない場合にも録音できるわけなので、これはかなり需要があるプログラムだと思う。
更に IDirectSoundCaptureBuffer をフックすれば、実際には録音していないはずの音をデータに混ぜ込む事も出来る。この機能もちゃんと扱おうと思えば相当なポテンシャルを持っていると思う。

アプローチ自体は単純だが、かなり大きな一歩を踏み出せたように思える。
posted by oov at 06:13| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2007年11月14日

スレッドプライオリティ

残念ながらプログラミング関連の話題が続きます。
スレッドプライオリティに関するあれこれ。

スレッド周りの仕様はOSごとに仕組みがバラバラで、マルチプラットフォームで動くプログラムを作る際に結構壁になる事があるらしい。
それをサポートするために ZThread や boost::thread 等があるようなのだが、実装をよく見てみるとスレッドプライオリティに関する設定項目が boost::thread にはないし、ZThread では OSX でのプライオリティ設定用コードが抜け落ちている。
wxWidgets の wxThread の実装は比較的しっかりしているようだったのでそのコードを参考にしつつスレッド優先度の指定方法について簡単に調べた範囲内でまとめてみた。

例えばオーディオ周りを扱うプログラムを書こうと思った場合、リアルタイムな処理を行う時にスレッド優先度を上げておくことは大切だと思うのでそういう場合に役に立つかと思い自分のためにまとめた。

続きを読む
posted by oov at 10:20| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2007年10月25日

BlogMML

t120l16 @3 o5 cdefedc8 efgagfe8 c4 c4 c4 c4 ccddeeffe8d8c4;
t120l16 @3 o4 r2 cdefedc8 efgagfe8 c4 c4 c4 eeffe8d8c4;
t120l16 @3 o6 r1 cdefedc8 efgagfe8 c4 eeffe8d8c4

はてなでMML記法という素敵な機能が追加されていて、自分もちょっと試してみたいとは思ったもののはてなに移行するのも面倒臭いので、JSMMLを利用して似たような機能を作ってみた。
JavaScript が無効だったりとか IE6/Ff/Opera9 以外のブラウザだったりとか、その他どんな環境で動くのかはちょっとわからないけども作った事に満足。

仕組みは div に class="BlogMML" を付けて MML を括るだけなので手軽だけど、prototype.js の getElementsByClassName を使ってるので重いのかなあと思ったり思わなかったり。

凄い時代になったなあ。

関連リンク
http://sketch.txt-nifty.com/blog/ - FlMMLを作ったむーさんのBlog
http://d.hatena.ne.jp/secondlife/ - JSMMLを作ったsecondlifeさんのBlog
http://snow.if.tv/ - 再生ボタンなどの素材を頂いてきたSiya*araさんのサイト
posted by oov at 10:03| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする

2007年09月27日

SC-88Pro の LCD

lcd.png

昔 SC-88Pro を使って変な遊びをした事がある。
SC-88Pro にはエクスクルーシブメッセージを送りつけることでテキストを表示させたり絵を表示させる機能があり、MIDI 全盛期の頃はここに凝って色々なものを入れる人が居た。

当時はあまり興味もなかったのだが、今更になって調べてみると頑張れば30fpsぐらいは出るという素晴らしい代物だった。
もちろん30fps出たところで16x16の画面で出来る事は限られているのだが、感動のあまり SC-88Pro の液晶エミュレータを作り遊ぶための環境を整えてしまった。

lcd.jpg 実機での動作画面

ただ30fpsも出してしまうとほとんど余力なしの状態なので、多分BGMとか流す余裕とかはまったくなかったんじゃないかと思う(映像を出すところまでで満足してしまったので一緒に音を出すテストは残念ながらやっていない)。
posted by oov at 04:26| Comment(2) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする