←Previous | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    //コントロールパネル
    let controlPanel = controlPanelArray[screenNumber] = createG ();

    //タイトル
    setDefaultFill ("#ffffff");
    setDefaultStroke ("none");
    appendNode (controlPanel,
                setFontSize (createText (12, 30, "Sky-blue Toy Piano"), 20),
                setFontSize (createTextURL (16, 48, "https://stdkmd.net/toypiano/"), 12));

    appendNode (svgElement, controlPanel);
    appendNode (document.body, svgElement);
  }

  //ボタン
  buttonX = 12;
  buttonY = 64;

  //説明ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (docButtonArray, true, true, 8,
             "M 16 10 l -3 -2 h -4 l -3 2 v 14 l 3 -2 h 4 l 3 2 l 3 -2 h 4 l 3 2 v -14 l -3 -2 h -4 l -3 2 v 14",
             "Manual",
             function () {
               opmWindow.pw$close ();
               pcmWindow.pw$close ();
               docWindow.pw$open ();
             });

  //FM音源ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (neiroButtonArray, true, true, 8,
             "M 19 9 h -2 l -2 2 v 2 l -2 2 h -4 l -3 3 v 4 l 4 4 h 4 l 3 -3 v -4 l 2 -2 h 2 l 2 -2 v -2 z m 7 -3 l -10 10",
             "FM sound source",
             function () {
               docWindow.pw$close ();
               pcmWindow.pw$close ();
               opmWindow.pw$open ();
             });

  //ADPCM音源ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (neiroButtonArray, true, true, 8,
             "M 6 21 h 1 v -10 h 3 v -5 h 3 v 5 h 3 v 10 h 3 v 5 h 3 v -5 h 3 v -10 h 1",
             "ADPCM sound source",
             function () {
               docWindow.pw$close ();
               opmWindow.pw$close ();
               pcmWindow.pw$open ();
             });

  //床固定ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (floorFixedButtonArray, true, floorFixed, 8,
             "M 14 6 l -1 1 v 1 l 1 1 v 1 l -1 1 m 6 -5 l -1 1 v 1 l 1 1 v 1 l -1 1 m 3 2 v 9 l -1 1 h -8 l -1 -1 v -9 m -5 10 v 3 h 20 v -3",
             "Floor-fixed mode",
             toggleFloorFixedMode);

  //ノーマルボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (normalButtonArray, screenMode != 0, screenMode == 0, 4,
             "M 16 18 l -3 1 l -1 3 l 1 3 l 3 1 l 3 -1 l 1 -3 l -1 -3 z m 0 4 v -16 m -4 6 l 4 -6 l 4 6",
             "Non-stereoscopic mode",
             function () {
               setScreenMode (0);
             });

  //平行法ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   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・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (parallelButtonArray, screenMode != 1, screenMode == 1, 4,
             "M 10 18 l -3 1 l -1 3 l 1 3 l 3 1 l 3 -1 l 1 -3 l -1 -3 z m 0 4 v -16 m -4 6 l 4 -6 l 4 6 " +
             "M 22 18 l -3 1 l -1 3 l 1 3 l 3 1 l 3 -1 l 1 -3 l -1 -3 z m 0 4 v -16 m -4 6 l 4 -6 l 4 6",
             "Parallel stereoscopic mode",
             function () {
               setScreenMode (1);
             });

  //交差法ボタン
  //                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
  //     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  //   0・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   1・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   2・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   3・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   4・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   5・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //   6・・・・・・●──・・・・・・・・・・・・・・・──●・・・・・
  //   7・・・・・・│\・──・・・・・・・・・・・──・/│・・・・・
  //   8・・・・・・│・\・・──●・・・・・●──・・/・│・・・・・
  //   9・・・・・・・│・\・・・・・・・・・・・・・/・│・・・・・・
  //  10・・・・・・・│・・\・・・・・・・・・・・/・・│・・・・・・
  //  11・・・・・・・・│・・\・・・・・・・・・/・・│・・・・・・・
  //  12・・・・・・・・│・・・\・・・・・・・/・・・│・・・・・・・
  //  13・・・・・・・・●・・・・\・・・・・/・・・・●・・・・・・・
  //  14・・・・・・・・・・・・・・\・・・/・・・・・・・・・・・・・
  //  15・・・・・・・・・・・・・・・\・/・・・・・・・・・・・・・・
  //  16・・・・・・・・・・・・・・・・X・・・・・・・・・・・・・・・
  //  17・・・・・・・・・・・・・・・/・\・・・・・・・・・・・・・・
  //  18・・・・・・・・・・●・・・/・・・\・・・●・・・・・・・・・
  //  19・・・・・・・●・・・・・●・・・・・●・・・・・●・・・・・・
  //  20・・・・・・・・・・・・/・・・・・・・\・・・・・・・・・・・
  //  21・・・・・・・・・・・/・・・・・・・・・\・・・・・・・・・・
  //  22・・・・・・●・・・●・・・●・・・●・・・●・・・●・・・・・
  //  23・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  24・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  25・・・・・・・●・・・・・●・・・・・●・・・・・●・・・・・・
  //  26・・・・・・・・・・●・・・・・・・・・・・●・・・・・・・・・
  //  27・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  28・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  29・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  30・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  //  31・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
  addButton (crossButtonArray, screenMode != 2, screenMode == 2, 8,
             "M 13 19 l -3 -1 l -3 1 l -1 3 l 1 3 l 3 1 l 3 -1 l 1 -3 z m -3 3 l 16 -16 m -7 2 l 7 -2 l -2 7 " +
             "M 19 19 l -1 3 l 1 3 l 3 1 l 3 -1 l 1 -3 l -1 -3 l -3 -1 z m 3 3 l -16 -16 m 2 7 l -2 -7 l 7 2",
             "Cross-eyed stereoscopic mode",
             function () {
               setScreenMode (2);
             });

  //説明ウインドウ
  appendNode (document.body,
              docWindow.pw$outerBox);

  docWindow.pw$open ();

  //FM音源ウインドウ
  makeOpmWindow ();

  //ADPCM音源ウインドウ
  makePcmWindow ();



  makePiano ();

  //描画開始
  projectTimeoutId = setTimeout (startProject, PROJECT_DELAY);

  //ウインドウイベント
  addEvent (window, "resize", function (e) {
    stopProject ();
    resetSize ();
    for (let screenNumber = 0; screenNumber <= 2; screenNumber++) {
      let screen = globalScreenArray[screenNumber];
      setStyle (setViewBox (resizeRootSvg (svgElementArray[screenNumber],
                                           screen.sc$width, screen.sc$height),
                            screen.sc$viewX, screen.sc$viewY, screen.sc$viewWidth, screen.sc$viewHeight),
                "height", screen.sc$height + "px",
                "left", screen.sc$left + "px",
                "top", screen.sc$top + "px",
                "width", screen.sc$width + "px");
    }
    startProject ();
  });

  //マウスイベント、タッチイベント
  //  clientX,clientYはビューポートの左上から
  //  MouseEvent.offsetX,MouseEvent.offsetYは要素の左上から
  //  Touch.offsetXは存在しない
  //  Touch.pageX,Touch.pageYはページの左上から
  //  WaterfoxはsvgElement.offsetLeftがない
  //  window.scrollX + e.clientX - e.pageX == 0  Chrome,Waterfox。EdgeはNaN
  for (let screenNumber = 0; screenNumber <= 2; screenNumber++) {
    let screen = globalScreenArray[screenNumber];
    addEvent (svgElementArray[screenNumber], "mousewheel", onMouseWheel);
    addEvent (svgElementArray[screenNumber], "DOMMouseScroll", onMouseWheel);  //Firefox
    addEvent (svgElementArray[screenNumber], "mousedown", onMouseDown);
    addEvent (svgElementArray[screenNumber], "mousemove", onMouseMove);
    addEvent (svgElementArray[screenNumber], "mouseup", onMouseUp);
    addEvent (svgElementArray[screenNumber], "touchstart", onTouchStart);
    addEvent (svgElementArray[screenNumber], "touchmove", onTouchMove);
    addEvent (svgElementArray[screenNumber], "touchend", onTouchEnd);
  }

  //キーイベント
  addEvent (window, "keydown", windowOnkeydown);
  addEvent (window, "keyup", windowOnkeyup);

  //出力を開始する
  try {
    audioContext = new AudioContext ();
    audioContext.audioWorklet.addModule ("processor.js").then (() => {
      let audioWorkletNodeClass = eval ("AudioWorkletNode");
      opmpcmProcessor = new audioWorkletNodeClass (
        audioContext,
        'opmpcm-processor',
        {
        channelCount: 2,
        channelCountMode: "explicit"
        });
      opmpcmProcessor.port.onmessage = e => {
        let command = e.data;
        console.log ("received " + command.c);
      };
      opmpcmProcessor.port.start ();
      opmpcmProcessor.connect (audioContext.destination);
      audioAvailable = true;
      //
      setPresetNeiro (0);
      //
    });
  } catch (e) {
    console.log ("Your browser does not support AudioWorklet.");
  }

}  //windowOnload

addEvent (window, "load", windowOnload);
←Previous | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19