These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんばんわ♪ 現在は3月30日(土)0時35分。 日付が変わりました。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2011年05月 来月
01 02 03 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2011年05月01日(日)

MIDIファイルの分解出来た

まだ意味を理解してないイベント多数ですけど、SMF バイナリの切り出しが出来ました。
アドバイス有難うございます。 > @urekat / @yoya ステータスバイトが無いランニングステータス??... (openpear の IO/Bit.php が必要です)

実行:

<?php
require_once 'MIDI.php';

$mididata = file_get_contents($argv[1]);
$midi = new IO_MIDI();
$midi->parse($mididata);
$midi->dump();

結果:

HEADER:
  Format: 1
  NumberOfTracks: 9
  DivisionFlag: 0
  Division: 480
TRACK[0]:
  CHUNK[0]:
    DeltaTime: 0
    EventType: 15(Meta Event)
    MIDIChannel: 15
    MetaEventType: 3(Sequence/Track Name)
    MetaEventData: akatomb.mid
  CHUNK[1]:
    DeltaTime: 0
    EventType: 15(Meta Event)
    MIDIChannel: 15
    MetaEventType: 84(SMPTE Offset)
    MetaEventData: `^@^@^@^@
すみません。後で編集し易いように SMPTE Offset とか
もうちょっと細かく分解しておきます。

駄目だった理由:

ランニングステータスの仕様を見逃してました。
解説ページにはちゃんと書いてあるのに。(´Д`;)

次の課題:

  • MFi (MLD) を分解する
  • SMF と MFi とで翻訳できるラベルを探す
  • 対応するラベルをコピーする
  • build 処理を書く

2011年05月02日(月)

MFi の分解出来た

MIDIと同じく意味を理解してませんが、MFi(いわゆるmldファイル)のバイナリを分解出来ました。

実行:

<?php
require_once 'MFi.php';

$mfidata = file_get_contents($argv[1]);
$mfi = new IO_MFi();
$mfi->parse($mfidata);
$mfi->dump();

結果:

Header Part:
  Identifier: melo
  FileLength: 3762
  OffsetToTrack: 76
  DataTypeMajor: 1
  DataTypeMinor: 1
  NumberOfTrack: 1
Data Information Part:
  [0]
    Identifer: titl
    Length: 21
    Data: mbox_Elgar_ainoaisatu
  [1]
    Identifer: prot
    Length: 15
    Data: PsmPlayer V4.41
  [2]
    Identifer: sorc
    Length: 1
    Data: 0
  [3]
    Identifer: vers
    Length: 4
    Data: 808661040
  [4]
    Identifer: note
    Length: 2
    Data: 1
Track Part
  [0]
    Identifer: 1
    Length: 1
    Event:
      [0]
        DeltaTime: 0
        StatusInfo: 255
        StatusInfo2: 195
        Data: 75
      [1]
        DeltaTime: 0
        StatusInfo: 255
        StatusInfo2: 225
        Data: 2
      [2]
<略>

次:

  • お次は SMAF 分解してみます。
  • で、MIDI => MFi と MIDI => SMAF の翻訳ルールを見つけて
  • 情報要素をコピーして MFi と SMAF の build ルーチンが書けたら
  • 着メロ Flash の音声差し替えがー。(その時は C言語で書き直しますけど)

参考:


2011年05月03日(火)

SMAF ファイルの分解に挑戦

Chunk と Tag の分解だけ大体 *1 出来た。

実行結果:

<?php
require_once 'SMAF.php';

$smafdata = file_get_contents($argv[1]);
$smaf = new IO_SMAF();
$smaf->parse($smafdata);
$smaf->dump();
array(2) {
  ["ID"]=>
  string(4) "MMMD"
  ["Size"]=>
  int(4214)
}
array(3) {
array(3) {
  [0]=>
  array(7) {
    ["ID"]=>
    string(4) "CNTI"
    ["Size"]=>
    int(5)
    ["Contents Class"]=>
    int(0)
    ["Contents Type"]=>
    int(51)
    ["Contents Code Type"]=>
    int(1)
    ["Copy Status"]=>
    int(253)
    ["Copy Counts"]=>
    int(0)
  }
  [1]=>
  array(3) {
    ["ID"]=>
    string(4) "OPDA"
    ["Size"]=>
    int(40)
    ["Chunks"]=>
    array(1) {
<略>

感想:

  • SMAF は TLC 構造が大別して chunk と tag の2種類。入れ子も素直な構造と、次の入れ子までにデータが挟まる構造がある。その挟まるデータも chunk の種類による。ブロック分割するだけでも手間がかかる。
  • SMAF は length分を超えて次の IDフィールドまで \0 や @ で padding する事がある。何の為にあるんだろう。4未満並ぶのなら 32bit 境界用だと思うけど、14byte 並んで 16byte のキリが悪い所で終わる事もあるし。訳が分からないよ。
00000040  39 33 31 37 32 4d 54 52  05 00 00 10 2f 02 00 02  |93172MTR..../...|
                         <----------> <---------> <> <> <>
                              ID         size     FT ST TD
00000050  02 40 40 40 00 40 40 40  40 40 40 40 40 40 40 40  |.@@@.@@@@@@@@@@@|
          <> <---> <-----??????????????????????????-------
          TG   CS  
00000060  40 4d 74 73 75 00 00 00  32 f0 06 43 79 06 7f 7f  |@Mtsu...2..Cy...|
          ?> <--------->
                 ID
parse 時は読み飛ばせば良いけど、build 時は padding をいくつ埋めるべきか知らないといけない。でも仕様書に記述がない。世の中の mmf ファイルの調査して、その法則を調べるしかないかな。

参考:

神サイトというか公式サイトが役に立たない。
公式サイトの仕様に Chunk ID のラベル名定義さえ無いとか何なのw

*1: その辺で拾ってきた mmf ファイルなら処理できるという意味で

2011年05月12日(木)

[opengl] Point Sprite

↑これを PHP に移植してみた。

結果:


メモリ溢れ:

でも、少し経つと落ちます。
yoya@gw:~/git/phpopengl/php_opengl/sprite1$ php main.php
freeglut (1): Unable to create direct context rendering for window 'main.php'
This may hurt performance.

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 24 bytes) in /home/yoya/git/phpopengl/php_opengl/sprite1/main.php on line 108

課題:

  • glPointParameterfv 未対応です。頑張ります。
  • テクスチャが機能していない。ような?
  • efree 忘れがありそうなのでチェック。

2011年05月15日(日)

LXBadRenderRequest

試しに glPointParameterfv を PHP binding してみたけど、動かしてみたら失敗。

Point Sprite を使ってみる:

yoya@gw:~/git/phpopengl/samples/tokoi/sprite1$ php main.php
freeglut (main.php): Unable to create direct context rendering for window 'main.php'
This may hurt performance.
X Error of failed request:  GLXBadRenderRequest
  Major opcode of failed request:  148 (GLX)
  Minor opcode of failed request:  1 (X_GLXRender)
  Serial number of failed request:  37
  Current serial number in output stream:  38
なんでだろう? VNC 越しに動かしてるのとか binding おかしいとか色々心当たりあるので、 順番に潰さないとです。

PyOpenGL はじめました:glRotate:

yoya@gw:~/git/phpopengl/samples/kotsubu-chan$ php  colorCube.php
freeglut Unable to create direct context rendering for window ''
This may hurt performance.
X Error of failed request:  GLXBadRenderRequest
  Major opcode of failed request:  148 (GLX)
  Minor opcode of failed request:  1 (X_GLXRender)
  Serial number of failed request:  39
  Current serial number in output stream:  41
こちらは glDrawElements でエラー。
こっちも配列を渡す関数なので配列のマッピングに問題ありかな。

追記 (2011/05/21):

glPointParameterfv で GLXBadRenderRequest が発生するのは OpenGL バージョンの問題みたい。
OpenGL ライブラリのヘッダを見ると 1.4 からの API らしいけど、 僕の開発環境は 1.3 なので。

2011年05月16日(月)

phpopengl メモリリーク修正

PHPの配列をCの配列に落とす php_array_to_〜 系が返すポインタは emalloc で確保したメモリ領域を指しますが、
これが悉く解放されていなかったので、しらみつぶしに efree を入れました。

先日のプログラム:

↑この時だと、少し動いて落ちるのですが、 今回は最後まで動きます。

php_array_to_ubyte_array:

動いてなかったので修正。
glDrawElements の挙動がおかしくて気付いて修正。けど。まだ
glColorPointer, glVertexPointer, glDrawElements のコンボで動作しない。
もっと見直さないと。

2011年05月17日(火)

うーん。

やはり評価厳しいなぁ。作った物に対しても自分に対しても。鍛えなければ。。
戦わなければ生き残れない。。。

2011年05月19日(木)

[phpopengl]スクリーンショット

OpenGL for PHP で表示中の画像を落とすルーチンをまとめました。 で、 ↑ これに画像保存のルーチンを挟んで、更に GIF アニメにしてみました。

(3D っぽくないけど、一応 OpenGL の API で描画したものです)
これの PHP への移植 > http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20060227 直接見ると背景が青いのに glReadPixels で画像に落とすと赤くなる。何か足りないかしら。

glutGet:

画像に落とすのに、開いてるウィンドウのサイズを調べる必要がありますが、 glutGet を読んでみたら NULL しか返しませんでした。動くようにしました。 Get 系はあまり動かないかも。
とりあえず世の中の色んなサンプルを移植してみて、動かないと気づいた物から対応していきますが、もし、動かしてほしい関数がある人がいたら連絡下さい。
優先します。

[phpopengl]glReadPixels

phpopengl の glReadPixels API を PHP っぽくしました。red, green, blue [,alpha] の hash のリストを返します。メモリ沢山使いますけど。 使い方の変更イメージ。

色を替えてみました。やっぱり 3D っぽくないけど地面に着地してる所に気付いてもらえるといいな。

2011年05月22日(日)

[phpopengl] スクリーンショット(2)

3D っぽくないという声が多かったので、球を表示してみました。
glMaterialfv(GL_FRONT, GL_DIFFUSE, $color);
glTranslatef($position[0], $position[1], $position[2]);
glutSolidSphere(0.08, 16, 10);

見た目面白いのが出来ると楽しい。
PHP なのでコンパイルの煩わしさもないし。 オリジナルは↑これです。

2011年05月25日(水)

GREE さん所で Perl ?

ほぉ。

GREE さん所は PHP が主で、最近は Ruby も募集してるらしいけど Perl も使ってるのかなぁ。ドキドキ。

2011年05月26日(木)

SWFEditor 0.40 - replaceMovieClip bugfix CID 256 over

メインは replaceMovieClip の不具合修正です。
- #define PutUShortLE(data, value) ((data[0] = (value & 0xff)), (data[1] = (value >> 16)))
+ #define PutUShortLE(data, value) ((data[0] = (value & 0xff)), (data[1] = (value >> 8)))
おバカ… !||!○| ̄|_
ついでに、www の dump ツールを少し改善しています。

2011年05月29日(日)

phpopengl に glutKeyboardUpFunc を追加

「はじめての OpenGL」のサンプルを PHP に移植していた所、以下のコードで fatal 発生
glutKeyboardUpFunc('keyboardUp');
glutSpecialUpFunc('specialUpKey');
glutIgnoreKeyRepeat(GL_TRUE);//キー・リピート無視

関数追加:

phpopengl が対応してなかったので、追加 glut callback 関数追加の手順は、
  • php_glut.h に PHP_FUNCTION と callback 関数の宣言
  • php_glut.h に GLUT_〜_CALLBACK は定義 (番号が重ならないように)
  • php_glut.c の glut_functions に PHP_FE 追加
  • php_glut.c に PHP_FUNCTION と callback 関数を実装
それだけ。

glutIgnoreKeyRepeat:

glutIgnoreKeyRepeat に GL_TRUE を渡すと、キーリピートが無効になるはずだけど、実際に試すと、リピート感覚が長くなっただけでリピートし続ける。なんだろう。

2011年05月30日(月)

phpopengl の glutTimerFunc を動くようにしました

glutTimerFunc が中途半端に実装されてて機能していませんでした。 修正イメージ

動作サンプル:


これでようやく、PHP で (ticks 指定の) OpenGL アニメーションが動かせます。
よし! phpopengl は↑ここで公開してます。

2011年05月31日(火)

phpopengl のリリース場所検討

現在、(yoya版) phpopengl を github 上で管理していますが、 実用的な品質に近づいてきたので、「はじめての OpenGL」のサンプルが全部動いた時点で、sourceforge.jp 辺りに移行して、リリース tarball やバイナリを提供しようと思っています。
本気で phpopengl を世に広めるなら、github だと機能不足なんです。
ただ、sourceforge.jp の phpopengl のプロジェクト名を使っちゃって良いか悩む所。
本来は sourceforge.net のメンテナとして名乗りを上げるべきで、 実は、github を、プライベートなコードなんですという言い訳に使っている点もあります。
どうするのが良いんでしょうね。やはり sourceforge.net に殴りこみをかけるべきか。。。
ただ、sourceforge.net にモーションをかける場合は、 といったタスクが増えます。 これらは本来初めからするべき事ですし、英語の読み書きは少し時間かかるだけで、そんなに問題ないです。
けれども、プログラム開発のスピードは多分遅くなるのと、実際に公開してどれだけ使って貰えるのか。そしてそれは割に会うのか。という心のツカエが取れません。ちょっと悩みます。
そもそも断られたり反応無かったりする可能性もありますけどね。
誰か背中を押して下さい。お願いします。

OpenCV for PHP

「はじめてのOpenGL」のsample17.cpp で OpenCV が使われているので、PHP binding を探したのですが、 この3つだと、 これは、自作しないとダメかも?
ちょっと道が遠くなった気がします。

これで、14 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project