안녕하세요, 귀온님!
14568 단어 proglangdesignshowdevbeginners
안녕하세요, 귀온님!
나는 잠시 동안 여기에 Gwion에 대해 게시했지만 프로젝트가 무엇을 할 수 있는지 명확하게 설명하지 않았습니다.
사람들이 그것에 대해 생각하는 데 도움이되는 동안이 게시물이 있기를 바랍니다.
이 튜토리얼이 끝나면 브라우저에서 Gwion이 생성하는 소리를들을 수 있어야합니다 😄
종속성
다음이 모두 컴퓨터에 설치되어 있는지 확인하십시오.
Gwion은 gcc 및 clang으로 테스트되었습니다.
당신은 시도 할 수 있습니다 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
버튼을 클릭하면 여기에 뭔가가 있을지도 모릅니다! 🍾앞으로 더
이 게시물이 약간의 지원을 받고 계속하도록 동기를 부여할 수 있기를 바랍니다.
두 번째 에피소드는 간단하지만 흥미로운 심리 음향 경험을 보여줄 것이라고 생각합니다.
세 번째는 단순한 멜로디를 만드는 방법을 보여주어야 합니다.
귀온은 분명히 훨씬 더 많은 것을 할 수 있기 때문에 후속 기사가 엄청나게 많을 수 있습니다 😄
Reference
이 문제에 관하여(안녕하세요, 귀온님!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fennecdjay/hello-gwion-6hm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)