Changeset 29204

Show
Ignore:
Timestamp:
01/29/09 01:08:51 (4 years ago)
Author:
moriyoshi
Message:

* Further performance tuning.

Location:
lang/javascript/SoundGenerator
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/SoundGenerator/sound.js

    r29198 r29204  
    2727 
    2828        for (var i = 0; i < len; ++i) { 
    29             var v = 128; 
     29            var v = 0; 
    3030            for (var j = sounds.length, d; --j >= 0;) 
    31                 v += (sounds[j][i] - 128); 
    32             v = v < 0 ? 0: (v > 255 ? 255: v); 
     31                v += sounds[j][i]; 
     32            v = v < -128 ? 0: (v > 127 ? 255: 128 + v); 
    3333            da.push(String.fromCharCode(v)); 
    3434        } 
     
    6161        var sin = Math.sin, pi = Math.PI; 
    6262        d[o + duration - 1] = 0; 
    63         for (var v; t < duration; ++t) { 
    64             v = 0; 
    65             for (var i = pi * 25; i -= (pi + pi) >= pi;) { 
    66                 var m = t * freq / res, z = i / 24; 
    67                 v += sin(i * 2 * m) * sin(z) / z / i; 
    68             } 
    69             d[o + t] = 128 + (v * eg(t) * vol * pi) | 0; 
     63        for (var pv = 0; t < duration; ++t, pv = v) { 
     64            var m = 2 * pi * t * freq / res, v = pv; 
     65            for (var i = 23; (i -= 2) > 0;) 
     66                v += sin(m * i) / i; 
     67            v /= 2; 
     68            d[o + t] = (4 * v * eg(t) * vol / pi) | 0; 
    7069        } 
    7170    }, 
     
    7776        var sin = Math.sin, pi = Math.PI; 
    7877        for (var pv = 0; t < duration; ++t, pv = v) { 
    79             var m = t * freq / res; 
    80             var v = pv; 
    81             for (var i = 20; --i >= 1; ) 
    82                 v += sin(2 * pi * i * m) / i; 
     78            var m = pi * t * freq / res, v = pv; 
     79            for (var i = 20; --i > 0; ) 
     80                v += sin(2 * i * m) / i; 
    8381            v /= 2; 
    84             d[o + t] = 128 + (v * eg(t) * vol) | 0; 
     82            d[o + t] = (2 * v * eg(t) * vol / pi) | 0; 
    8583        } 
    8684    }, 
     
    8886    generateSilence: function(duration) { 
    8987        var d = this.data, j; 
    90         for (j = duration; (j -= 32) >= 128; ) { 
    91             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    92                    128, 128, 128, 128, 128, 128, 128, 128, 
    93                    128, 128, 128, 128, 128, 128, 128, 128, 
    94                    128, 128, 128, 128, 128, 128, 128, 128); 
    95         } 
    96         j += 32; 
    97         switch (j) { 
    98         case 0: 
    99             break; 
    100         case 1: 
    101             d.push(128); 
    102             break; 
    103         case 2: 
    104             d.push(128, 128); 
    105             break; 
    106         case 3: 
    107             d.push(128, 128, 128); 
    108             break; 
    109         case 4: 
    110             d.push(128, 128, 128, 128); 
    111             break; 
    112         case 5: 
    113             d.push(128, 128, 128, 128, 128); 
    114             break; 
    115         case 6: 
    116             d.push(128, 128, 128, 128, 128, 128); 
    117             break; 
    118         case 7: 
    119             d.push(128, 128, 128, 128, 128, 128, 128); 
    120             break; 
    121         case 8: 
    122             d.push(128, 128, 128, 128, 128, 128, 128, 128); 
    123             break; 
    124         case 9: 
    125             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    126                    128); 
    127             break; 
    128         case 1128: 
    129             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    130                    128, 128); 
    131             break; 
    132         case 11: 
    133             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    134                    128, 128, 128); 
    135             break; 
    136         case 12: 
    137             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    138                    128, 128, 128, 128); 
    139             break; 
    140         case 13: 
    141             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    142                    128, 128, 128, 128, 128); 
    143             break; 
    144         case 14: 
    145             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    146                    128, 128, 128, 128, 128, 128); 
    147             break; 
    148         case 15: 
    149             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    150                    128, 128, 128, 128, 128, 128, 128); 
    151             break; 
    152         case 16: 
    153             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    154                    128, 128, 128, 128, 128, 128, 128, 128); 
    155             break; 
    156         case 17: 
    157             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    158                    128, 128, 128, 128, 128, 128, 128, 128, 
    159                    128); 
    160             break; 
    161         case 18: 
    162             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    163                    128, 128, 128, 128, 128, 128, 128, 128, 
    164                    128, 128); 
    165             break; 
    166         case 19: 
    167             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    168                    128, 128, 128, 128, 128, 128, 128, 128, 
    169                    128, 128, 128); 
    170             break; 
    171         case 2128: 
    172             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    173                    128, 128, 128, 128, 128, 128, 128, 128, 
    174                    128, 128, 128, 128); 
    175             break; 
    176         case 21: 
    177             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    178                    128, 128, 128, 128, 128, 128, 128, 128, 
    179                    128, 128, 128, 128, 128); 
    180             break; 
    181         case 22: 
    182             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    183                    128, 128, 128, 128, 128, 128, 128, 128, 
    184                    128, 128, 128, 128, 128, 128); 
    185             break; 
    186         case 23: 
    187             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    188                    128, 128, 128, 128, 128, 128, 128, 128, 
    189                    128, 128, 128, 128, 128, 128, 128); 
    190             break; 
    191         case 24: 
    192             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    193                    128, 128, 128, 128, 128, 128, 128, 128, 
    194                    128, 128, 128, 128, 128, 128, 128, 128); 
    195             break; 
    196         case 25: 
    197             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    198                    128, 128, 128, 128, 128, 128, 128, 128, 
    199                    128, 128, 128, 128, 128, 128, 128, 128, 
    200                    128); 
    201             break; 
    202         case 26: 
    203             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    204                    128, 128, 128, 128, 128, 128, 128, 128, 
    205                    128, 128, 128, 128, 128, 128, 128, 128, 
    206                    128, 128); 
    207             break; 
    208         case 27: 
    209             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    210                    128, 128, 128, 128, 128, 128, 128, 128, 
    211                    128, 128, 128, 128, 128, 128, 128, 128, 
    212                    128, 128, 128); 
    213             break; 
    214         case 28: 
    215             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    216                    128, 128, 128, 128, 128, 128, 128, 128, 
    217                    128, 128, 128, 128, 128, 128, 128, 128, 
    218                    128, 128, 128, 128); 
    219             break; 
    220         case 29: 
    221             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    222                    128, 128, 128, 128, 128, 128, 128, 128, 
    223                    128, 128, 128, 128, 128, 128, 128, 128, 
    224                    128, 128, 128, 128, 128); 
    225             break; 
    226         case 3128: 
    227             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    228                    128, 128, 128, 128, 128, 128, 128, 128, 
    229                    128, 128, 128, 128, 128, 128, 128, 128, 
    230                    128, 128, 128, 128, 128, 128); 
    231             break; 
    232         case 31: 
    233             d.push(128, 128, 128, 128, 128, 128, 128, 128, 
    234                    128, 128, 128, 128, 128, 128, 128, 128, 
    235                    128, 128, 128, 128, 128, 128, 128, 128, 
    236                    128, 128, 128, 128, 128, 128, 128); 
    237             break; 
    238         } 
     88        d[d.length + duration - 1] = 0; 
     89        //for (j = duration; --j >= 0; ) 
     90        //    d[d.length] = 0; 
    23991    } 
    24092}; 
  • lang/javascript/SoundGenerator/test.html

    r29198 r29204  
    77 
    88var m1 = new MusicBuilder(new SoundGenerator(16000)); 
    9 m1.parseMML("O5@1T120L16E E RE RC E8 G8R8>G8R8"); 
     9m1.parseMML("O5@1T120S1M1500L16E E RE RC E8 G8R8>G8R8"); 
    1010var m2 = new MusicBuilder(new SoundGenerator(16000)); 
    11 m2.parseMML("O4@1T120L16F+F+RF+RF+F+8G8R4."); 
     11m2.parseMML("O4@1T120S1M1500L16F+F+RF+RF+F+8G8R4."); 
    1212var m3 = new MusicBuilder(new SoundGenerator(16000)); 
    13 m3.parseMML("O3@1T120L16D D RD RD D8 G8R8 G8R8"); 
    14 new SoundPlayer(16000).play(m1.sg.data); 
     13m3.parseMML("O3@1T120S1M1500L16D D RD RD D8 G8R8 G8R8"); 
     14new SoundPlayer(16000).play(m1.sg.data, m2.sg.data, m3.sg.data); 
    1515}; 
    1616  </script>