mieki256's diary



2006/07/03(月) [n年前の日記]

#1 [iappli] スクラッチパッドからのサウンドデータの読み込みでエラー

SO902iのみ、エラーになるという報告が。…何故。

SO902i用 mld と、結合したサウンドデータファイルのヘッダー部分をチェック。…オフセットやサイズに関しては意図通りの内容のように見える。うーん。

端末判別の結果が間違っているのだろうか。判別部分だけ別のプログラムに入れて、動作確認。 _ユーザエージェント一覧 と、 _iアプリ対応端末の情報 から、各機種が System.getProperty("microedition.platform") で返すはずの文字列の一覧を作成して、渡してみたり。

/*
 * iモード端末判別チェックテスト
 */

public class MachineCheck {

    // 各端末が、System.getProperty("microedition.platform") で返してくるはずの文字列
    static final String[] MACHINE_ID_STRING = {
            "D505i",
            "D505iS",
            "D506i",
            "D701i",
            "D701iWM",
            "D702i",
            "D702iBCL",
            "D851iWM",
            "D900i",
            "D901i",
            "D901iS",
            "D902i",
            "D902iS",
            "F505i",
            "F505iGPS",
            "F506i",
            "F700i",
            "F700iS",
            "F702iD",
            "F900i",
            "F900iC",
            "F900iT",
            "F901iC",
            "F901iS",
            "F902i",
            "F902iS",
            "N505i",
            "N505iS",
            "N506i",
            "N506iS",
            "N506iS2",
            "N700i",
            "N701i",
            "N701iECO",
            "N702iD",
            "N900i",
            "N900iG",
            "N900iL",
            "N900iS",
            "N901iC",
            "N901iS",
            "N902i",
            "N902iS",
            "P505i",
            "P505iS",
            "P506iC",
            "P700i",
            "P701iD",
            "P702i",
            "P851i",
            "P900i",
            "P900iV",
            "P901i",
            "P901iS",
            "P901iTV",
            "P902i",
            "P902iS",
            "SA700iS",
            "SA800i",
            "SH505i",
            "SH505i2",
            "SH505iS",
            "SH506iC",
            "SH700i",
            "SH700iS",
            "SH702iD",
            "SH900i",
            "SH901iC",
            "SH901iS",
            "SH902i",
            "SH902iS",
            "SO505i",
            "SO505iS",
            "SO506i",
            "SO506iC",
            "SO506iS",
            "SO702i",
            "SO902i",
            "SO902iWP+",
    };

    public static void main(String[] args) {
        MachineCheckSub m = new MachineCheckSub();

        // 端末を判別して読み込むべきサウンドデータ種類を決定
        for (int n = 0; n < MACHINE_ID_STRING.length; n++) {

            // String id = System.getProperty("microedition.platform");
            String id = MACHINE_ID_STRING[n];

            m.checkMachineString(id);
        }

    }

}


class MachineCheckSub {

    interface MachineKind {

        int MK_505_D = 0;
        int MK_505_F = 1;
        int MK_505_N = 2;
        int MK_505_P = 3;
        int MK_505_SH = 4;
        int MK_505_SHIS = 5;
        int MK_505_SO = 6;
        int MK_505_SOIS = 7;
        int MK_FOMA3_D = 8;
        int MK_FOMA3_F = 9;
        int MK_FOMA3_N = 10;
        int MK_FOMA3_P = 11;
        int MK_FOMA3_SH = 12;
        int MK_FOMA4_SO = 13;
        int MK_505_P_7XX = 14;
    }

    // sound data checksum
    static final int[] SND_CHKCODE_TBL = {
            0x0F68B, // 0
            0x0DE83, // 1
            0x01228, // 2
            0x0F735, // 3
            0x0DEAC, // 4
            0x02D31, // 5
            0x0BC65, // 6
            0x029AD, // 7
            0x02903, // 8
            0x0DE83, // 9
            0x02F8A, // 10
            0x0DEFB, // 11
            0x02AB4, // 12
            0x0D261, // 13
            0x00000, // 14
    };

    // sound data byte length
    static final int[] SND_ALLBYTE_TBL = {
            19090, // 0
            18834, // 1
            18707, // 2
            19090, // 3
            18844, // 4
            19290, // 5
            19492, // 6
            19290, // 7
            19280, // 8
            18834, // 9
            18807, // 10
            18834, // 11
            19290, // 12
            16292, // 13
            0, // 14
    };

    // sound data count
    static final int[] SND_PAKMAX_TBL = {
            5, // 0
            5, // 1
            5, // 2
            5, // 3
            5, // 4
            5, // 5
            5, // 6
            5, // 7
            5, // 8
            5, // 9
            5, // 10
            5, // 11
            5, // 12
            4, // 13
            0, // 14
    };

    static final String[] SNDDIR = {
            "505/d", // 0
            "505/f", // 1
            "505/n", // 2
            "505/p", // 3
            "505/sh", // 4
            "505/shiS", // 5
            "505/so", // 6
            "505/soiS", // 7
            "foma3/d", // 8
            "foma3/f", // 9
            "foma3/n", // 10
            "foma3/p", // 11
            "foma3/sh", // 12
            "foma4/so", // 13
            "505/p", // 14
    };

    // 端末判別用文字列
    static final String[] SNDHARD_STR = {
            "D5", // 0
            "D7", // 1
            "D8", // 2
            "D900", // 3
            "D9", // 4
            "F5", // 5
            "F700", // 6
            "F7", // 7
            "F9", // 8
            "N5", // 9
            "N7", // 10
            "N9", // 11
            "P5", // 12
            "P7", // 13
            "P8", // 14
            "P9", // 15
            "SH505i2", // 16
            "SH505iS", // 17
            "SH506", // 18
            "SH505i", // 19
            "SH7", // 20
            "SH9", // 21
            "SO505iS", // 22
            "SO506", // 23
            "SO505i", // 24
            "SO7", // 25
            "SO9", // 26
            "SA", // 27
    };

    static final byte[] SNDHARD_NUM = {
            MachineKind.MK_505_D, // "D5", // 0
            MachineKind.MK_505_F, // "D7", // 1
            MachineKind.MK_505_F, // "D8", // 2
            MachineKind.MK_FOMA3_D, // "D900", // 3
            MachineKind.MK_FOMA3_F, // "D9", // 4
            MachineKind.MK_505_F, // "F5", // 5
            MachineKind.MK_505_F, // "F700", // 6
            MachineKind.MK_FOMA3_F, // "F7", // 7
            MachineKind.MK_FOMA3_F, // "F9", // 8
            MachineKind.MK_505_N, // "N5", // 9
            MachineKind.MK_505_N, // "N7", // 10
            MachineKind.MK_FOMA3_N, // "N9", // 11
            MachineKind.MK_505_P, // "P5", // 12
            MachineKind.MK_505_P_7XX, // "P7", // 13
            MachineKind.MK_505_P_7XX, // "P8", // 14
            MachineKind.MK_FOMA3_P, // "P9", // 15
            MachineKind.MK_505_SH, // "SH505i2", // 16
            MachineKind.MK_505_SHIS, // "SH505iS", // 17
            MachineKind.MK_505_SHIS, // "SH506", // 18
            MachineKind.MK_505_SH, // "SH505i", // 19
            MachineKind.MK_505_SHIS, // "SH7", // 20
            MachineKind.MK_FOMA3_SH, // "SH9", // 21
            MachineKind.MK_505_SOIS, // "SO505iS", // 22
            MachineKind.MK_505_SOIS, // "SO506", // 23
            MachineKind.MK_505_SO, // "SO505i", // 24
            MachineKind.MK_505_SOIS, // "SO7", // 25
            MachineKind.MK_FOMA4_SO, // "SO9", // 26
            MachineKind.MK_505_D, // "SA", // 27
    };

    // SAxxx は不明機種とするが、仮で D505i のデータを鳴らす。たぶん、三洋製だから同じだろう…。

    // SH505ix や SO505ix が後から販売された場合、
    // 正しいサウンドが鳴るかは保障しない。でも、販売するなら xx506ix になるんじゃないかな…。

    // P70xi は ADPCM のフォーマットが違うので、本来別のデータを用意するが、今回は P505i のソレを流用する。


    int snd_chkcode;
    int snd_allbyte;
    int snd_pak_max;
    String sounddatakind;
    String machine_info;
    int sounddatakind_number;

    String soundDataFilename;

    static final String SNDFNAME = "_sd"; // サウンドパックデータ ファイル名


    // String id を元に端末を分類

    final void checkMachineString(String id) {

        machine_info = id;
        int sni = 0;
        String sndfilename = SNDFNAME;

        int fg = -1;
        for (int i = 0; i < SNDHARD_STR.length; i++) {
            if (id.indexOf(SNDHARD_STR[i]) != -1) {
                sni = SNDHARD_NUM[i];
                fg = i;
            }
        }
        if (fg == -1) {
            // 一覧には無い

            if (id.indexOf("SH5") != -1) {
                if (id.indexOf("SH505iS") != -1 || id.indexOf("SH506") != -1) {
                    sni = MachineKind.MK_505_SHIS;
                } else if (id.indexOf("SH505i") != -1 || id.indexOf("SH505i2") != -1) {
                    sni = MachineKind.MK_505_SH;
                } else {
                    sni = MachineKind.MK_505_SHIS;
                }
                fg = 1;
            } else if (id.indexOf("SO") != -1) {
                if (id.indexOf("SO505iS") != -1 || id.indexOf("SO506") != -1) {
                    sni = MachineKind.MK_505_SOIS;
                } else if (id.indexOf("SO505i") != -1) {
                    sni = MachineKind.MK_505_SO;
                } else {
                    sni = MachineKind.MK_505_SOIS;
                }
                fg = 1;
            } else {
                // どうしても判別できない・どれにも該当しない場合は、
                // 型番からして性能が低そうな P505i 用のソレ、としておく。
                sni = MachineKind.MK_505_D;
            }
        }

        sounddatakind_number = sni;
        snd_chkcode = SND_CHKCODE_TBL[sounddatakind_number];
        snd_allbyte = SND_ALLBYTE_TBL[sounddatakind_number];
        snd_pak_max = SND_PAKMAX_TBL[sounddatakind_number];

        String dls;
        dls = SNDDIR[sounddatakind_number];

        if (sni == MachineKind.MK_505_P_7XX) {
            sndfilename = sndfilename + "7xx";
        }

        sounddatakind = "[" + sounddatakind_number + "]\t" + dls + "/*" + sndfilename + "\t" + Integer.toString(snd_chkcode, 16) + "\t" + snd_allbyte + "\t"
                + snd_pak_max;

        if (fg == -1) sounddatakind = "? " + sounddatakind;

        System.out.println("id=" + id + "\t" + sounddatakind);

        soundDataFilename = sndfilename;

    }
}
こんな感じで。(後で書くけど、バグ入り。)

結果は下のような感じ。
id=D505i        [0]     505/d/*_sd      f68b    19090   5
id=D505iS       [0]     505/d/*_sd      f68b    19090   5
id=D506i        [0]     505/d/*_sd      f68b    19090   5
id=D701i        [1]     505/f/*_sd      de83    18834   5
id=D701iWM      [1]     505/f/*_sd      de83    18834   5
id=D702i        [1]     505/f/*_sd      de83    18834   5
id=D702iBCL     [1]     505/f/*_sd      de83    18834   5
id=D851iWM      [1]     505/f/*_sd      de83    18834   5
id=D900i        [9]     foma3/f/*_sd    de83    18834   5
id=D901i        [9]     foma3/f/*_sd    de83    18834   5
id=D901iS       [9]     foma3/f/*_sd    de83    18834   5
id=D902i        [9]     foma3/f/*_sd    de83    18834   5
id=D902iS       [9]     foma3/f/*_sd    de83    18834   5
id=F505i        [1]     505/f/*_sd      de83    18834   5
id=F505iGPS     [1]     505/f/*_sd      de83    18834   5
id=F506i        [1]     505/f/*_sd      de83    18834   5
id=F700i        [9]     foma3/f/*_sd    de83    18834   5
id=F700iS       [9]     foma3/f/*_sd    de83    18834   5
id=F702iD       [9]     foma3/f/*_sd    de83    18834   5
id=F900i        [9]     foma3/f/*_sd    de83    18834   5
id=F900iC       [9]     foma3/f/*_sd    de83    18834   5
id=F900iT       [9]     foma3/f/*_sd    de83    18834   5
id=F901iC       [9]     foma3/f/*_sd    de83    18834   5
id=F901iS       [9]     foma3/f/*_sd    de83    18834   5
id=F902i        [9]     foma3/f/*_sd    de83    18834   5
id=F902iS       [9]     foma3/f/*_sd    de83    18834   5
id=N505i        [2]     505/n/*_sd      1228    18707   5
id=N505iS       [2]     505/n/*_sd      1228    18707   5
id=N506i        [2]     505/n/*_sd      1228    18707   5
id=N506iS       [2]     505/n/*_sd      1228    18707   5
id=N506iS2      [2]     505/n/*_sd      1228    18707   5
id=N700i        [2]     505/n/*_sd      1228    18707   5
id=N701i        [2]     505/n/*_sd      1228    18707   5
id=N701iECO     [2]     505/n/*_sd      1228    18707   5
id=N702iD       [2]     505/n/*_sd      1228    18707   5
id=N900i        [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iG       [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iL       [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=N901iC       [10]    foma3/n/*_sd    2f8a    18807   5
id=N901iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=N902i        [10]    foma3/n/*_sd    2f8a    18807   5
id=N902iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=P505i        [3]     505/p/*_sd      f735    19090   5
id=P505iS       [3]     505/p/*_sd      f735    19090   5
id=P506iC       [3]     505/p/*_sd      f735    19090   5
id=P700i        [14]    505/p/*_sd7xx   0       0       0
id=P701iD       [14]    505/p/*_sd7xx   0       0       0
id=P702i        [14]    505/p/*_sd7xx   0       0       0
id=P851i        [14]    505/p/*_sd7xx   0       0       0
id=P900i        [11]    foma3/p/*_sd    defb    18834   5
id=P900iV       [11]    foma3/p/*_sd    defb    18834   5
id=P901i        [11]    foma3/p/*_sd    defb    18834   5
id=P901iS       [11]    foma3/p/*_sd    defb    18834   5
id=P901iTV      [11]    foma3/p/*_sd    defb    18834   5
id=P902i        [11]    foma3/p/*_sd    defb    18834   5
id=P902iS       [11]    foma3/p/*_sd    defb    18834   5
id=SA700iS      [0]     505/d/*_sd      f68b    19090   5
id=SA800i       [0]     505/d/*_sd      f68b    19090   5
id=SH505i       [4]     505/sh/*_sd     deac    18844   5
id=SH505i2      [4]     505/sh/*_sd     deac    18844   5
id=SH505iS      [4]     505/sh/*_sd     deac    18844   5
id=SH506iC      [5]     505/shiS/*_sd   2d31    19290   5
id=SH700i       [5]     505/shiS/*_sd   2d31    19290   5
id=SH700iS      [5]     505/shiS/*_sd   2d31    19290   5
id=SH702iD      [5]     505/shiS/*_sd   2d31    19290   5
id=SH900i       [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH901iC      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH901iS      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH902i       [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH902iS      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SO505i       [6]     505/so/*_sd     bc65    19492   5
id=SO505iS      [6]     505/so/*_sd     bc65    19492   5
id=SO506i       [7]     505/soiS/*_sd   29ad    19290   5
id=SO506iC      [7]     505/soiS/*_sd   29ad    19290   5
id=SO506iS      [7]     505/soiS/*_sd   29ad    19290   5
id=SO702i       [7]     505/soiS/*_sd   29ad    19290   5
id=SO902i       [13]    foma4/so/*_sd   d261    16292   4
id=SO902iWP+    [13]    foma4/so/*_sd   d261    16292   4
あ。

ヤバイ。一部バグってる。SH505* と SO505* がおかしい。if ( fg == -1 ) { } の外に出して例外的に判別しないといかんのでは。いや、それでもダメだ。比較用文字列を変更しておかないと。いやいや、それでも変だ…。って、あー。ループで比較してるところで、breakが抜けてるじゃないか! なんてこった。

break を入れた。
id=D505i        [0]     505/d/*_sd      f68b    19090   5
id=D505iS       [0]     505/d/*_sd      f68b    19090   5
id=D506i        [0]     505/d/*_sd      f68b    19090   5
id=D701i        [1]     505/f/*_sd      de83    18834   5
id=D701iWM      [1]     505/f/*_sd      de83    18834   5
id=D702i        [1]     505/f/*_sd      de83    18834   5
id=D702iBCL     [1]     505/f/*_sd      de83    18834   5
id=D851iWM      [1]     505/f/*_sd      de83    18834   5
id=D900i        [8]     foma3/d/*_sd    2903    19280   5
id=D901i        [9]     foma3/f/*_sd    de83    18834   5
id=D901iS       [9]     foma3/f/*_sd    de83    18834   5
id=D902i        [9]     foma3/f/*_sd    de83    18834   5
id=D902iS       [9]     foma3/f/*_sd    de83    18834   5
id=F505i        [1]     505/f/*_sd      de83    18834   5
id=F505iGPS     [1]     505/f/*_sd      de83    18834   5
id=F506i        [1]     505/f/*_sd      de83    18834   5
id=F700i        [1]     505/f/*_sd      de83    18834   5
id=F700iS       [1]     505/f/*_sd      de83    18834   5
id=F702iD       [9]     foma3/f/*_sd    de83    18834   5
id=F900i        [9]     foma3/f/*_sd    de83    18834   5
id=F900iC       [9]     foma3/f/*_sd    de83    18834   5
id=F900iT       [9]     foma3/f/*_sd    de83    18834   5
id=F901iC       [9]     foma3/f/*_sd    de83    18834   5
id=F901iS       [9]     foma3/f/*_sd    de83    18834   5
id=F902i        [9]     foma3/f/*_sd    de83    18834   5
id=F902iS       [9]     foma3/f/*_sd    de83    18834   5
id=N505i        [2]     505/n/*_sd      1228    18707   5
id=N505iS       [2]     505/n/*_sd      1228    18707   5
id=N506i        [2]     505/n/*_sd      1228    18707   5
id=N506iS       [2]     505/n/*_sd      1228    18707   5
id=N506iS2      [2]     505/n/*_sd      1228    18707   5
id=N700i        [2]     505/n/*_sd      1228    18707   5
id=N701i        [2]     505/n/*_sd      1228    18707   5
id=N701iECO     [2]     505/n/*_sd      1228    18707   5
id=N702iD       [2]     505/n/*_sd      1228    18707   5
id=N900i        [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iG       [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iL       [10]    foma3/n/*_sd    2f8a    18807   5
id=N900iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=N901iC       [10]    foma3/n/*_sd    2f8a    18807   5
id=N901iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=N902i        [10]    foma3/n/*_sd    2f8a    18807   5
id=N902iS       [10]    foma3/n/*_sd    2f8a    18807   5
id=P505i        [3]     505/p/*_sd      f735    19090   5
id=P505iS       [3]     505/p/*_sd      f735    19090   5
id=P506iC       [3]     505/p/*_sd      f735    19090   5
id=P700i        [14]    505/p/*_sd7xx   0       0       0
id=P701iD       [14]    505/p/*_sd7xx   0       0       0
id=P702i        [14]    505/p/*_sd7xx   0       0       0
id=P851i        [14]    505/p/*_sd7xx   0       0       0
id=P900i        [11]    foma3/p/*_sd    defb    18834   5
id=P900iV       [11]    foma3/p/*_sd    defb    18834   5
id=P901i        [11]    foma3/p/*_sd    defb    18834   5
id=P901iS       [11]    foma3/p/*_sd    defb    18834   5
id=P901iTV      [11]    foma3/p/*_sd    defb    18834   5
id=P902i        [11]    foma3/p/*_sd    defb    18834   5
id=P902iS       [11]    foma3/p/*_sd    defb    18834   5
id=SA700iS      [0]     505/d/*_sd      f68b    19090   5
id=SA800i       [0]     505/d/*_sd      f68b    19090   5
id=SH505i       [4]     505/sh/*_sd     deac    18844   5
id=SH505i2      [4]     505/sh/*_sd     deac    18844   5
id=SH505iS      [5]     505/shiS/*_sd   2d31    19290   5
id=SH506iC      [5]     505/shiS/*_sd   2d31    19290   5
id=SH700i       [5]     505/shiS/*_sd   2d31    19290   5
id=SH700iS      [5]     505/shiS/*_sd   2d31    19290   5
id=SH702iD      [5]     505/shiS/*_sd   2d31    19290   5
id=SH900i       [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH901iC      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH901iS      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH902i       [12]    foma3/sh/*_sd   2ab4    19290   5
id=SH902iS      [12]    foma3/sh/*_sd   2ab4    19290   5
id=SO505i       [6]     505/so/*_sd     bc65    19492   5
id=SO505iS      [7]     505/soiS/*_sd   29ad    19290   5
id=SO506i       [7]     505/soiS/*_sd   29ad    19290   5
id=SO506iC      [7]     505/soiS/*_sd   29ad    19290   5
id=SO506iS      [7]     505/soiS/*_sd   29ad    19290   5
id=SO702i       [7]     505/soiS/*_sd   29ad    19290   5
id=SO902i       [13]    foma4/so/*_sd   d261    16292   4
id=SO902iWP+    [13]    foma4/so/*_sd   d261    16292   4
これなら合ってる。たぶん。機種分類の一覧表と見比べた限りでは。

しかし、SO902iに関しては、バグがあった版でも正しく分類されてる…。となると、端末判別結果のバグのせいでおかしくなってるわけではなさげ。うーん。

以上です。

過去ログ表示

Prev - 2006/07 - Next
1
2 3 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 で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project