서버의 부하에 따라 가속하는 마리오 BGM 플레이어 (html5)

안녕하세요, 에이팀 이사 사무라이 나카가와입니다.
"일을 하면서 항상 직관적으로 서버의 부하 상황을 파악하고 싶다"
이번에는 그런 요구를 실현해 보았습니다.

개요



[1] 서버의 로드 평균을 반환하는 API와,
[2] HTML5의 Audio 태그에서,
서버의 부하에 따라 재생 속도를 바꾸면서 음악이 재생되도록 했습니다.
우선은 이쪽을 봐 주세요↓
htps: //같다. 베/우 14rl3wgV


배경 (코지츠케)


  • 평소 직관적으로 서버의 부하 상황을 알고 싶습니다.
  • 직장의 비엔지니어도 알고 싶다
  • 시각은 신경이 쓰이기 때문에 그 이외의 무엇인가
  • 미각, 후각 → 부하 상승하면 냄새가 나는 → 실현 어렵다, 촉각 → 부하 상승하면 의자에 빌리 빌리 ... → 아니 어렵다
  • "소리"라면 PC의 팬이나 에어컨의 가동음과 같이 울려도 평소 익숙해져 잊을 수 있습니다

  • 음악 재생 측



    html5와 js로 구현했습니다.
    덧붙여서, 이것은 어딘가의 서버에 두지 않고 로컬에 있어도 좋습니다.
    아래의 설명이 있는 html과 BGM의 소리 데이터가 같은 계층에 있으면 OK.
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Load Average Player</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
      audio = document.getElementById("bgm");
      audio.playbackRate = 1;
      document.getElementById("bgm").play();
    
      function checkLA() {
        // APIを呼ぶ
        $.ajax({
          type:"post",
          url:"/getLa.php",
          data: {
          },
          contentType: 'application/json',
          dataType: "json",
          success: function(data) {
            $('#current_la').text(data.la);
            // テンポの変わり具合をちょっと調整
            if (data.la < 0.3) {
              document.getElementById("bgm").playbackRate = 1+(data.la/2);
            } else {
              document.getElementById("bgm").playbackRate = 1+(data.la);
            }
          }
        });
      }
      setInterval(checkLA,1000);
    
      audio.loop = true;
    });
    </script>
    </head>
    <body>
      <div>load average: <span id="current_la">0</span></div>
      <hr/>
      <div id="content">
        <audio id="bgm">
          <source src="bgm.mp3">
        </audio>
      </div>
    </body>
    </html>
    
    

    1.html5의 audio 태그



    우선 이것이군요.
    <audio id="bgm">
      <source src="bgm.mp3">
    </audio>
    

    거의 img 태그 같은 감각으로 사용할 수 있습니다. 소스가 있는 서버에 mp3 데이터를 두고,
    src="hoge.mp3"라고 상태로 지정할 뿐.

    2.ajax에서 API 두드리는



    음, 이것은 좋을 것입니다.

    3. 노래 재생 속도 변경


    document.getElementById("bgm").playbackRate = 1+(data.la);
    

    재생 속도 바꾸는 것도 매우 간단, 그래, html5라면 (웃음)
    playbackRate가 1이면 100% 재생 속도입니다. 이번에는 la의 값을 더합니다.
    이번에 해보고 굉장하다고 생각한 것은, 크롬의 경우 밖에 시도하고 있습니다만,
    재생 속도를 주어도 피치가 변하지 않습니다. 이른바 빨리 감기로 큐르큘 ...
    높은 소리가 되거나 반대로 슬로우 모션으로 낮은 거인의 목소리처럼 되거나
    보통 재생 속도를 바꾸는 것만으로 주파수가 바뀌므로 피치가 바뀔 것입니다.
    제대로 피치 그대로 템포만이 바뀌었습니다. 대단해.
    이것 각 브라우저 조사해 보고 싶습니다.

    4.1초마다 API를 두드리기


    setInterval(checkLA,1000);
    

    1000밀리초를 지정.

    5. 반복 재생


    audio.loop = true;
    

    끝까지 재생할 때 반복할지 여부. 이번 용도에서는 반복입니다.

    API 측


    <?php
    date_default_timezone_set('Asia/Tokyo');
    $la = sys_getloadavg();
    $json_array = array(
      'la' => $la[0],
    );
    header("Content-Type: text/javascript; charset=utf-8");
    echo json_encode($json_array);
    ?>
    
    

    php로 로드 애버리지 취득하는 함수 있군요.
    이번에는 특별히 매개 변수를받지 않으므로 함수의 값을 json으로 반환합니다.

    해봐



    일단, 이미지하고 있던 대로의 것은 할 수 있었습니다.
    임계값을 넘으면 마리오에서 100초 끊었을 때처럼 해보고 싶습니다.

    실제 문제, 직장에서 음악을 흘릴 수는 없지만, 우선 만족 (웃음)!

    좋은 웹페이지 즐겨찾기