안녕하세요, 귀온님!

안녕하세요, 귀온님!



나는 잠시 동안 여기에 Gwion에 대해 게시했지만 프로젝트가 무엇을 할 수 있는지 명확하게 설명하지 않았습니다.
사람들이 그것에 대해 생각하는 데 도움이되는 동안이 게시물이 있기를 바랍니다.
이 튜토리얼이 끝나면 브라우저에서 Gwion이 생성하는 소리를들을 수 있어야합니다 😄

종속성



다음이 모두 컴퓨터에 설치되어 있는지 확인하십시오.
  • C 컴파일러.
    Gwion은 gccclang으로 테스트되었습니다.
  • make
  • 터미널 에뮬레이터. (kitty 사용)
  • libwebsockets
  • 사운드파이프. 원래 repo는 제거되었지만 여전히 github에서 사본을 찾을 수 있습니다.
    당신은 시도 할 수 있습니다 this one

  • 이제 모든 설정이 완료되었습니다. 먼저 다음 지침을 따르도록 제안하겠습니다.
    여기에서 다시 읽으십시오. 대부분의 부담을 덜어줄 것입니다(읽기 😄).

    귀온



    먼저 gwion을 가져와 기본 절차를 따르고,
    그러나 일부 플러그인도 필요하므로 plug 명령에 submodule update를 추가합니다.

    install_gwion.sh



    git clone https://github.com/fennecdjay/Gwion
    cd Gwion
    git submodule update --init util ast plug
    make
    


    플러그인 빌드



    이 프로젝트에는 몇 가지 플러그인이 필요합니다.
    그것들도 만들어 봅시다.

    plugins.sh



    cd Gwion/plug/Soundpipe
    make
    cd ../Modules
    make
    cd ../WebSocket
    make
    


    브라우저 부분



    이제 브라우저에서 Gwion의 오디오 출력을 듣는 것이 목표이므로,
    우리는 자바 스크립트와 html이 필요합니다

    gwion_ws_test.js



    const URL = "ws://localhost:1111"
    const BUFLEN = 512;
    const NCHAN = 2;
    var ws;
    var scriptNode;
    var audioCtx;
    var outsamples = new Float32Array(BUFLEN);
    var volume = 0.5;
    
    function gwionWsSetVolume(value) {
      volume = value;
    }
    
    function gwionWsFillBuffer(audioProcessingEvent) {
      ws.send("next");
      var outputBuffer = audioProcessingEvent.outputBuffer;
      for (var channel = 0; channel < NCHAN; channel++) {
        var outputData = outputBuffer.getChannelData(channel);
        for (var sample = 0; sample < BUFLEN; sample++)
          outputData[sample] = outsamples[sample + channel*BUFLEN] * volume;
      }
    }
    
    function gwionWsOnOpen()  {
      audioCtx = new (window.AudioContext || window.webkitAudioContext)();
      console.log(audioCtx.sampleRate);
      scriptNode = audioCtx.createScriptProcessor(BUFLEN, NCHAN, NCHAN);
      scriptNode.onaudioprocess = gwionWsFillBuffer;
      scriptNode.connect(audioCtx.destination);
    }
    
    function gwionWsOnMessage(e)  {
    //  if(e.data instanceof ArrayBuffer)
      outsamples = new Float32Array(e.data);
    }
    
    function gwionWsOnClose()  {
      if(audioCtx) {
        scriptNode.disconnect();
        audioCtx.close();
        alert("Connection closed");
      }
    }
    
    function gwionWsInit() {
      ws = new WebSocket(URL);
      if(!ws)
        alert("Web socket server not found at url: " + URL);
      ws.onopen = gwionWsOnOpen;
      ws.onmessage = gwionWsOnMessage;
      ws.onclose = gwionWsOnClose;
      ws.binaryType = "arraybuffer";
    }
    
    function gwionWsOnLoad() {
      if ("WebSocket" in window)
        gwionWsInit();
      else
        alert("WebSocket NOT supported by your Browser!");
    }
    


    gwion_ws_test.html



    <!DOCTYPE HTML>
    <html>
      <script src="gwion_ws_test.js"></script>
      <body>
      <p><button onclick="gwionWsOnLoad();">Connect</button><p>
      <p><input id="volumeSlider" type="range" min="0" max="1" value="0.5" step="0.01" oninput>
      </body>
    </html>
    


    기여



    당신은 아마 나보다 자바스크립트에 대해 더 잘 알고 있을 것입니다.
    자유롭게 개선 사항을 공유하고 PR을 제출하십시오.
    웹 어셈블리 사용 및 ScriptProcessor에서 AudioWorklet으로 전환
    훌륭한 추가 사항이 될 것입니다!

    삶을 편안하게 해주는 스크립트



    이제 우리는 모든 조각을 얻었습니다.
    이 모든 것을 조립하기만 하면 됩니다.

    ease.sh



    # create a 'libs' directory to store our plugins
    mkdir libs
    # copy all the plugins we built into 'libs'
    cp Gwion/plug/*/*.so libs
    # '-s 44100' as most browsers will output sound at that samplerate
    # '-p libs' tell gwion where to look for plugins
    # '-d ws' use 'ws' (aka WebSocket) driver
    # '$@' pass all arguments to gwion
    echo './Gwion/gwion -s 44100 -p libs -d ws $@' > run.sh
    


    소리 합성 Hello World



    hello world에 해당하는 사운드 합성은 440Hz에서 사인 발생기의 5초인 것 같습니다.
    그냥 해보자.

    hello_sine.gw



    #! Create a Sine generator and connect it to audio output
    var SinOsc s => dac;
    #! let five seconds pass
    5::second => now;
    


    test.sh



    # do nothing without a BROWSER variable
    if [ -z "$BROWSER" ]
    then
      echo "please set BROWSER environment variable"
      exit 1
    done
    $BROWSER gwion_ws_test.html &!
    bash run.sh hello_sine.gw
    


    이제 브라우저에서 테스트 페이지를 볼 수 있습니다.Connect 버튼을 클릭하면 여기에 뭔가가 있을지도 모릅니다! 🍾

    앞으로 더



    이 게시물이 약간의 지원을 받고 계속하도록 동기를 부여할 수 있기를 바랍니다.
    두 번째 에피소드는 간단하지만 흥미로운 심리 음향 경험을 보여줄 것이라고 생각합니다.
    세 번째는 단순한 멜로디를 만드는 방법을 보여주어야 합니다.
    귀온은 분명히 훨씬 더 많은 것을 할 수 있기 때문에 후속 기사가 엄청나게 많을 수 있습니다 😄

    좋은 웹페이지 즐겨찾기