These pages are written by only Japanese.

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

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


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

先月 2008年08月 来月
1 02
03 04 05 6 07 08 09
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 による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2008年08月10日(日)

[swfed] Flash から MP3 データ抽出

↑ここの DefineSound に入る MP3 データの構造を眺めていたのですが、
struct swf_mp3_header {
		unsigned		f_sync_word : 11;
		unsigned		f_version : 2;
		unsigned		f_layer : 2;
		unsigned		f_no_protection : 1;
	<略>
よく見ると MP3 ファイルフォーマットそのままのような…
…という訳で、データ部分をそのまま吸い出したら MP3 として再生できました。
% php swfdump.phps  game.swf
	<略>
[4] tag=DefineSound(14)  length=2505
        sound_id=1
        format=2(MP3) rate=1 is_16bits=1 is_stereo=0 samples_count=11019
	<略>
% php swfgetmp3data.phps  game.swf  1 > test.mp3

swfed 0.06 release:

さて、次は mdl/smaf ファイル入りの swf ファイルを入手せねば…

2008年08月11日(月)

[swfed] getSoundData 実装

実装、といいますか、getMP3Data を getSoundData に改名しました。
DefineSound タグから音声ファイルのフォーマットに関わらず、 ファイル全体のデータを抜き出せる事が分かったからです。
つまり、MP3 でも MLD ファイルでも、この getSoundData ですい出せます。 入れ替えの方は、rate, is_16bits 等の属性データをファイルの 中身にあわせて書き換えないといけないので、replaceMP3Data 等の フォーマット毎の関数を作る方が(自分が)楽カナと思ってます。 (そのうち自動判定の処理を入れるかもですけど)

2008年08月13日(水)

[swfed] 着うた MLD 入れ替え機能を実装

知り合いから着うた入りの SWF ファイルを貰えたので中身を見たところ
[661] tag=DefineSound(14)  length=143
        sound_id=941
        format=15(Unknown) rate=0 is_16bits=0 is_stereo=0 samples_count=0
        sound_data(length=433)
でしたので、これを元に MLD データ入れ替え機能を実装しました。

swfed 0.07 release:


2008年08月14日(木)

PHP と srand と seed (2)

google で検索してたら
mt_srand(microtime()*1000000);
の記述を見つけました。
これだと乱数列が100万種に限定されるので、 mt_srand(microtime(true)*1000000); とかの方が良いのでは。 といった指摘をしてみました。
まぁ、そもそも srand 系は下手に呼ばないのが一番なんですけど。^^;

PHP4:

microtime(true)が使えるのは PHP5 からなので、 PHP srand Manual 等にあるように、
list($usec, $sec) = explode(' ', microtime());
(float) $sec + ((float) $usec * 100000);
の方がいいかな。

2008年08月15日(金)

swfed セグメンテーション違反

swfed はまだ荒削りなので渡す素材によって、seg.fault が発生するかもです。
素材を頂ければ、すぐデバッグしますのでご一報を。m(_ _)m > 誰となく

[swfed] MP3 入れ替え開始

ここの SWF にとっての MP3 の説明と、 ここの MP3 frame と frame header の説明を読み合わせると、 どうも一筋縄にいかない感触です。
frame を辿って sound_samples_count を算出するしかないのかな。
めんどー…

lame cvs checkout

とりあえず checkout
cvs -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame login
cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P .
勉強開始。 色々なるほど。

2008年08月19日(火)

PHP - RETURN_STRINGL(s, l, dup)

extension を作る時に第3引数をあやふやなまま使っていたので、 一応整理。
php-5.2.6/Zend/zend_API.h を見れば一目瞭然。
#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
			↓
#define RETVAL_STRINGL(s, l, duplicate)  ZVAL_STRINGL(return_value, s, l, duplicate)
			↓
#define ZVAL_STRINGL(z, s, l, duplicate) {      \
                char *__s=(s); int __l=l;               \
                (z)->value.str.len = __l;           \
                (z)->value.str.val = (duplicate?estrndup(__s, __l):__s)
;        \
                (z)->type = IS_STRING;              \
        }

つまり…:

    data = swf_object_output(swf, &len);
    new_buff = emalloc(len);
    memcpy(new_buff, data, len);
    free(data);
    RETURN_STRINGL(new_buff, len, 1);
}
ここで、1 を渡してるのは無駄って事で… 0 に修正しまくろう。
ちなみに、emalloc して元のデータを free してるのは、 swf_object_output が返すデータは(自作の)swf_object ライブラリの 内部で malloc してるデータで、free するタイミングが見つからないから。
一応、
  • free link list を作って swfed が destroy する際に何とかする
  • swf_object の malloc をユーザ定義関数にして emalloc を使わせる
といった方法を思いつくけど、どうしよう。
前者は、オブジェクトを destroy した後も PHP 処理系側にアクセスされる可能性があるので、無理かな…

これで、6 日分だよ〜。

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