[Swfed-svn] swfed-svn [42] MLD ファイル入れ替えを実装しました。 ( 未テスト )

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2008年 8月 14日 (木) 02:52:03 JST


Revision: 42
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=swfed&view=rev&rev=42
Author:   yoya
Date:     2008-08-14 02:52:02 +0900 (Thu, 14 Aug 2008)

Log Message:
-----------
MLD ファイル入れ替えを実装しました。(未テスト)

Modified Paths:
--------------
    src/php_swfed.h
    src/swf_object.c
    src/swf_object.h
    src/swf_tag.c
    src/swf_tag.h
    src/swf_tag_sound.c
    src/swf_tag_sound.h
    src/swfed.c

Added Paths:
-----------
    sample/swfreplacemlddata.phps


-------------- next part --------------
Added: sample/swfreplacemlddata.phps
===================================================================
--- sample/swfreplacemlddata.phps	                        (rev 0)
+++ sample/swfreplacemlddata.phps	2008-08-13 17:52:02 UTC (rev 42)
@@ -0,0 +1,21 @@
+<?php
+
+if (($argc < 4) || ($argc%2 != 0)) {
+    fprintf(STDERR, "Usage: swfreplacemlddata <swf_file> <sound_id> <mld_file> [<sound_id2> <mld_file2> [...]]\n");
+    exit(1);
+}
+
+$swf_filename = $argv[1];
+
+$swfdata = file_get_contents($swf_filename);
+$obj = new SWFEditor();
+$obj->input($swfdata);
+
+for ($i=2 ; $i< $argc ; $i += 2) {
+	$sound_id = $argv[$i];
+	$mld_filename = $argv[$i+1];
+	$mlddata = file_get_contents($mld_filename);
+	$obj->replaceMLDData($sound_id, $mlddata);
+}
+
+echo $obj->output();

Modified: src/php_swfed.h
===================================================================
--- src/php_swfed.h	2008-08-12 14:25:12 UTC (rev 41)
+++ src/php_swfed.h	2008-08-13 17:52:02 UTC (rev 42)
@@ -59,6 +59,7 @@
 PHP_METHOD(swfed, getPNGData);
 PHP_METHOD(swfed, replacePNGData);
 PHP_METHOD(swfed, getSoundData);
+PHP_METHOD(swfed, replaceMLDData);
 PHP_METHOD(swfed, getEditString);
 PHP_METHOD(swfed, replaceEditString);
 PHP_METHOD(swfed, getActionData);

Modified: src/swf_object.c
===================================================================
--- src/swf_object.c	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_object.c	2008-08-13 17:52:02 UTC (rev 42)
@@ -320,6 +320,26 @@
     return data;
 }
 
+int
+swf_object_replace_melodata(swf_object_t *swf, int sound_id,
+                            unsigned char *melo_data,
+                            unsigned long melo_data_len) {
+    int result = 1;
+    swf_tag_t *tag;
+    if (swf == NULL) {
+        fprintf(stderr, "swf_object_replace_melodata: swf == NULL\n");
+        return 1;
+    }
+    for (tag = swf->tag; tag; tag = tag->next) {
+        result = swf_tag_replace_melo_data(tag, sound_id,
+                                           melo_data, melo_data_len);
+        if (! result) {
+            break;
+        }
+    }
+    return result;
+}
+
 char *
 swf_object_get_editstring(swf_object_t *swf,
                           char *variable_name,

Modified: src/swf_object.h
===================================================================
--- src/swf_object.h	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_object.h	2008-08-13 17:52:02 UTC (rev 42)
@@ -37,6 +37,9 @@
                                       unsigned char *png_data,
                                       unsigned long png_data_len);
 extern unsigned char *swf_object_get_sounddata(swf_object_t *swf, unsigned long *length, int sound_id);
+extern int swf_object_replace_melodata(swf_object_t *swf, int sound_id,
+                                       unsigned char *melo_data,
+                                       unsigned long melo_data_len);
 extern char *swf_object_get_editstring(swf_object_t *swf,
                                        char *variable_name,
                                        int variable_name_len);

Modified: src/swf_tag.c
===================================================================
--- src/swf_tag.c	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_tag.c	2008-08-13 17:52:02 UTC (rev 42)
@@ -409,6 +409,10 @@
     return result;
 }
 
+/*
+ * DefineSound
+ */
+
 unsigned char *
 swf_tag_get_sound_data(swf_tag_t *tag, unsigned long *length, int sound_id) {
     swf_tag_info_t *tag_info;
@@ -431,6 +435,44 @@
     return swf_tag_sound_get_sound_data(tag->detail, length, sound_id);
 }
 
+int
+swf_tag_replace_melo_data(swf_tag_t *tag, int sound_id,
+                          unsigned char *melo_data,
+                          unsigned long melo_data_len) {
+    swf_tag_info_t *tag_info;
+    int result;
+    if (tag == NULL) {
+        fprintf(stderr, "swf_tag_replace_melo_data: tag == NULL\n");
+        return 1;
+    }
+    if (tag->tag != 14) { // DefineSound
+        return 1;
+    }
+    tag_info = get_swf_tag_info(tag->tag);
+    if (tag_info && tag_info->detail_handler) {
+        swf_tag_detail_handler_t * detail_handler = tag_info->detail_handler();
+        if (detail_handler->identity) {
+            if (detail_handler->identity(tag->data, sound_id, tag)) {
+                return 1;
+            }
+        }
+    }
+    if (! tag->detail) {
+        swf_tag_create_detail(tag, NULL);
+    }
+    if (! tag->detail) {
+        fprintf(stderr, "swf_tag_replace_melog_data: Can't create tag\n");
+        return 1;
+    }
+    result= swf_tag_sound_replace_melo_data(tag->detail, sound_id,
+                                            melo_data, melo_data_len);
+    if (result == 0) {
+        free(tag->data);
+        tag->data = NULL;
+        tag->length = 0;
+    }
+    return result;
+}
 
 char *
 swf_tag_get_edit_string(swf_tag_t *tag,

Modified: src/swf_tag.h
===================================================================
--- src/swf_tag.h	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_tag.h	2008-08-13 17:52:02 UTC (rev 42)
@@ -68,6 +68,9 @@
 extern unsigned char *swf_tag_get_sound_data(swf_tag_t *tag,
                                              unsigned long *length,
                                              int sound_id);
+extern int swf_tag_replace_melo_data(swf_tag_t *tag, int sound_id,
+                                     unsigned char *melo_data,
+                                     unsigned long melo_data_len);
 /* edit text */
 
 extern char *swf_tag_get_edit_string(swf_tag_t *tag,

Modified: src/swf_tag_sound.c
===================================================================
--- src/swf_tag_sound.c	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_tag_sound.c	2008-08-13 17:52:02 UTC (rev 42)
@@ -182,3 +182,28 @@
         // dummy
     return -1;
 }
+
+int
+swf_tag_sound_replace_melo_data(void *detail, int sound_id,
+                                unsigned char *melo_data,
+                                unsigned long melo_data_len) {
+    swf_tag_sound_detail_t *swf_tag_sound = (swf_tag_sound_detail_t *) detail;
+    (void) melo_data;
+    (void) melo_data_len;
+    swf_tag_sound->sound_id = sound_id;
+    swf_tag_sound->sound_format = 15;
+    swf_tag_sound->sound_rate = 0;
+    swf_tag_sound->sound_is_16bits = 0;
+    swf_tag_sound->sound_is_stereo = 0;
+    swf_tag_sound->sound_samples_count = 0;
+    free(swf_tag_sound->sound_data);
+    swf_tag_sound->sound_data = malloc(melo_data_len);
+    if (swf_tag_sound->sound_data == NULL) {
+        fprintf(stderr, "swf_tag_sound_replace_melo_data: swf_tag_sound->sound_data == NULL\n");
+        return 1;
+    }
+    memcpy(swf_tag_sound->sound_data, melo_data, melo_data_len);
+    swf_tag_sound->sound_data_len = melo_data_len;
+        // dummy
+    return 0;
+}

Modified: src/swf_tag_sound.h
===================================================================
--- src/swf_tag_sound.h	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swf_tag_sound.h	2008-08-13 17:52:02 UTC (rev 42)
@@ -43,4 +43,8 @@
                                           unsigned char *mp3_data,
                                           unsigned long mp3_data_len);
 
+extern int swf_tag_sound_replace_melo_data(void *detail, int sound_id,
+                                              unsigned char *sound_data,
+                                              unsigned long sound_data_len);
+
 #endif /* __SWF_TAG_SOUND__H__ */

Modified: src/swfed.c
===================================================================
--- src/swfed.c	2008-08-12 14:25:12 UTC (rev 41)
+++ src/swfed.c	2008-08-13 17:52:02 UTC (rev 42)
@@ -63,6 +63,7 @@
         PHP_ME(swfed,  getPNGData, NULL, 0)
         PHP_ME(swfed,  replacePNGData, NULL, 0)
         PHP_ME(swfed,  getSoundData, NULL, 0)
+        PHP_ME(swfed,  replaceMLDData, NULL, 0)
    	PHP_ME(swfed,  getEditString, NULL, 0)
    	PHP_ME(swfed,  replaceEditString, NULL, 0)
    	PHP_ME(swfed,  getActionData, NULL, 0)
@@ -596,6 +597,32 @@
     RETURN_STRINGL(new_buff, (int) len, 1);
 }
 
+PHP_METHOD(swfed, replaceMLDData) {
+    char *data = NULL;
+    int data_len = 0;
+    int sound_id;
+    swf_object_t *swf;
+    int result = 0;
+    switch (ZEND_NUM_ARGS()) {
+      default:
+        WRONG_PARAM_COUNT;
+        RETURN_FALSE; /* XXX */
+      case 2:
+        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &sound_id, &data, &data_len) == FAILURE) {
+            RETURN_FALSE;
+        }
+        break;
+    }
+    swf = get_swf_object(getThis());
+    result = swf_object_replace_melodata(swf, sound_id,
+                                         (unsigned char *)data,
+                                         (unsigned long) data_len);
+    if (result == 0) {
+        RETURN_FALSE;
+    }
+    RETURN_TRUE;
+}
+
 PHP_METHOD(swfed, getEditString) {
     char *var_name;
     int  var_name_len;


Swfed-svn メーリングリストの案内
Back to archive index