oav-p5給初學者的速查表
用 oav-p5 的 p5 草圖會用到的名字,放在一頁:對麥克風喊、敲鼓機、彈鍵盤,再讓數字變好用。點名字看完整說明。可以印成一張橫的 A4。
完整的 API 參考 → oav-p5 0.8.4
開始:一行
貼在草圖的第一行(OpenProcessing 或 p5 編輯器)。角落出現 🎹 就是載到了。
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js' }));接下來的草圖長這樣
function setup() {
createCanvas(400, 300);
startDrums('four on floor'); // only if you want drums
}
function draw() {
background(20);
circle(200, 150, 40 + micLevel * 300);
}
function kickDetected(level) { // oav-p5 calls it
// a kick: do something
}這些名字寫在 setup()、draw() 或 oav-p5 會呼叫的函式裡。寫在檔案最上層時它們還不存在。
喊:麥克風
micLevel多大聲,0(安靜)到 1(大喊)bass mid treble低音、中音、高音,各 0 到 1beat聽到一拍的那一格是 truemicIsOn麥克風有沒有開成功micSensitivity(2)靈敏兩倍,太小聲就試 3startMic() stopMic()自己開、自己關
這些由你來寫,oav-p5 會呼叫
beatDetected(level)有一拍:聲音突然跳起來kickDetected(level)低頻一下大鼓(還有 snareDetected、hatDetected)
敲:鼓機
startDrums('four on floor', 120)畫面上出現 16 格鼓機,每分鐘 120 拍startDrums('bd*4, ~ sd, hh*8')也可以用一行字寫節奏stopDrums()停下來,卡片收起來drumStep剛剛打到第幾格,0 到 15drumBar第幾小節,從 1 開始drumPhase beatPhase一小節、一拍,平滑地從 0 走到 1drumBpm drumsAreOn速度/有沒有在打kickIsDetected snareIsDetected打到的那一格是 true:lag(kickIsDetected, 0, 0.3) 讓它慢慢退millis() - lastKickTs離上一下大鼓幾毫秒(還有 lastSnareTs、lastHatTs、lastBeatTs)frameCount - lastKickFrameCount離上一下大鼓幾格,打到的那一格是 0
這些由你來寫,oav-p5 會呼叫
drumHit(lane, velocity)每打一下:哪一種鼓、多用力barStarted(bar)每一小節的第一格stepStarted(step, bar)16 格的每一格
時間軸:用小節排
cue(5, 'bloom', 12)第 5 小節叫一次,之後每 12 小節再叫cueFired(name, bar)你寫的函式:在這裡換場景cueName最近一個發動的 cuedrawRhythm(x, y, w, h, 'circle')把節奏畫在畫布上('grid'、'circle'、'spiral'),錄影錄得到
一行字寫節奏
bd sd bd sd空白把一小節平均分(bd 大鼓、sd 小鼓、hh 鈸)hh*8打 8 下bd ~ bd ~~ 是休息[bd bd] sd[ ] 把兩下擠進一個位置bd*4, ~ sd逗號:同時打bd(3,8)8 格裡平均打 3 下<bd sd>每小節輪流換一個
彈:鍵盤與旋鈕
note最後按的鍵,MIDI 號碼 0 到 127(60 是 C4)velocity多用力,0 到 1millis() - lastNoteTs離上一次按鍵幾毫秒noteIsDown(60) noteIsDown('C4')那個鍵現在有沒有按著knob1 … knob8旋鈕,0 到 1,像 mouseX 一樣直接讀fader1 … pad1 …推桿 0 到 1、打擊墊(多用力,放開是 0)
這些由你來寫,oav-p5 會呼叫
notePressed(note, velocity)按下一個鍵noteReleased(note)放開一個鍵knobMoved(n, value)轉了一顆旋鈕padPressed(n, velocity)打了一下打擊墊
沒有鍵盤?畫面上的 🎹 就是一台,📱 讓手機變成一台。
出聲與音名
startSound('piano')彈的鍵有聲音(先點一下畫面)stopSound() soundIsOn關掉/有沒有在響noteName(61)→ 'C#4'noteNumber('C4')→ 60noteFreq('A4')→ 440(赫茲)
讓數字好用
lag(micLevel, 0.03, 0.4)用追的不要用跳的:0.03 秒上、0.4 秒下(Lag CHOP)env('kick', 0.01, 0.3)每下大鼓跳到 1,0.3 秒退回 0(Trigger CHOP)speed(TWO_PI)每秒累加:rotate() 一秒轉一圈spring(knob1, 100, 6)像彈簧,會衝過頭再彈回來trail(micLevel, 3)最近 3 秒的值,一個陣列drawTrail(list, x, y, w, h)把那個陣列畫成一條線count('kick', 4)數次數:0、1、2、3、0…scope(value, 'name')角落的小示波器,看一個數字怎麼變
寫在 draw() 裡,不要放進 if。
錄影與體檢
startRecording() stopRecording()把畫布和聲音錄成影片(或 🎹 → ⏺)recordingIsOn現在有沒有在錄recordingSaved(info)影片存好了OAVp5.version'0.8.4':第一行有載到OAVp5.check()🩺 一張體檢卡,問問題時截圖貼上
沒聲音?先點一下畫面,瀏覽器要點過才會出聲。其他問題?按 🎹 → 🩺,把截圖貼出來。