• 模擬轉(zhuǎn)換輸入設(shè)備的軟件GlovePIE 編程文檔的部分中文翻譯

    2017/3/9??????點(diǎn)擊:

    GlovePIE是一個(gè)模擬和轉(zhuǎn)換輸入設(shè)備的軟件。例如可以讓W(xué)ii手柄信號(hào)模擬為鍵盤、鼠標(biāo)或游戲手柄在電腦上打游戲,可以用Wii手柄控制Midi輸出,不過這需要編寫一些腳本實(shí)現(xiàn)。GlovePIE現(xiàn)在能接受的設(shè)備有鼠標(biāo)、鍵盤、游戲手柄、PPJoy(一種虛擬游戲手柄)、P5數(shù)據(jù)手套、Wii Remote、MIDI和語音識(shí)別輸入。

    GlovePIE編程文檔的部分中文翻譯

    文內(nèi)符號(hào)說明:“[]”內(nèi)是可用可不用的項(xiàng),“|”兩邊是單選項(xiàng)。
    注釋可以為以下幾種
    // 注釋
    ' 注釋
    REM 注釋
    % 注釋
    /* 多行
    注釋 */

    建議用“//”

    debug=變量
    就能在調(diào)試窗口實(shí)時(shí)顯示變量值
    ---------------------------------------
    賦值語句
    有向前賦值和向后賦值兩種形式,等價(jià)的。
    向前賦值語句如下
    變量名 = 表達(dá)式 [;]

    變量名 := 表達(dá)式 [;]
    向后賦值語句如下
    表達(dá)式 => 變量名 [;]
    例如
    Ctrl = var.a
    Ctrl = var.b
    它有類似的效果: Ctrl = var.a or var.b
    ------------------------------------------
    IF語句
    有以下句法
    if 條件 then 語句 [;]
    if (條件) [then] 語句 [;]
    if 條件 [then] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [if]] [;]

    if 條件 [then] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end] else [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [if]] [;]

    if 條件 [then] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end] (else if|elseif) 條件2 [then] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end] (else if|elseif) 條件3 [then] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end] else [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [if]] [;]
    --------------------------------------------
    WHILE循環(huán)語句
    當(dāng)條件為真則循環(huán)
    有以下句法
    while 條件 do 語句 [;]

    while (條件) [do] 語句 [;]

    while 條件 [do] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [while]] [;]

    任何循環(huán)*多只運(yùn)行0.2秒,超過就強(qiáng)制中止。
    --------------------------------------------
    FOR循環(huán)語句
    有以下句法
    for 變量 (=|:=) 初始量 (to|downto) 結(jié)束量 [step 步長] do 語句 [;]

    for 變量 (=|:=) 初始量 (to|downto) 結(jié)束量 [step 步長] [do] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [for]]

    for (賦初值 ; 條件 ; 增量) [do] 語句 [;]

    for (賦初值 ; 條件 ; 增量) [do] [begin] [{]
    語句 [;]
    語句 [;]
    ...
    [}] [end [for]]

    任何循環(huán)*多只運(yùn)行0.2秒,超過就強(qiáng)制中止。
    --------------------------------------------
    等待命令
    有以下句法
    wait 持續(xù)時(shí)間 [;]

    wait(持續(xù)時(shí)間) [;]

    通常為持續(xù)時(shí)間指定單位。有效的單位是:ms, s, minutes, hours, days
    --------------------------------------------
    增減語句
    有以下句法
    var.x++
    ++var.x
    Inc(var.x)

    var.x--
    --var.x
    Dec(var.x)
    --------------------------------------------
    位移語句
    有以下句法
    左移變量N位
    shl var.x, N
    右移變量N位
    shr var.x, N
    --------------------------------------------
    “說”命令

    Say "句子"

    Say("句子")
    發(fā)出合成語音
    --------------------------------------------
    其他命令
    ExitScript
    退出當(dāng)前腳本運(yùn)行
    ExitPIE
    退出GlovePIE軟件

    FlashPieWindow
    閃GlovePIE的窗口
    HidePie
    隱藏GlovePIE
    ShowPie
    顯示GlovePIE
    RestorePie
    復(fù)位GlovePIE的窗口
    MinimizePie
    *小化GlovePIE的窗口
    MaximizePie
    *大化GlovePIE的窗口
    UnMinimizePie
    反*小化GlovePIE的窗口
    UnMaximizePie
    反*大化GlovePIE的窗口

    Execute(文件名)
    執(zhí)行外部程序
    Chain(文件名)
    調(diào)用運(yùn)行另一腳本

    PlaySound(文件名)
    播放音頻文件
    Beep([頻率, 持續(xù)時(shí)間])
    響單頻率聲
    BeepAsterisk
    響*音效
    BeepExclamation
    響!音效
    BeepHand
    響!音效
    BeepQuestion
    響?音效BeepDefault
    響缺省音效

    Display(text)
    輸出信息
    DebugPrint(text)
    調(diào)試窗口輸出信息
    OutputToFile(text)
    輸出信息到文件里
    AddCode(text)
    不知道

    Type(字符串)
    模擬鍵盤打入字符串
    TypeUnicode(字符串)
    模擬鍵盤打入U(xiǎn)nicode字符串
    Press(鍵)
    按下鍵
    Release(鍵)
    釋放鍵
    Toggle(鍵)
    如果鍵當(dāng)前是按下狀態(tài),則釋放鍵,如果鍵當(dāng)前是釋放狀態(tài),則按下鍵。

    SendOsc(ip, port, address, [p1, p2, p3…])
    BroadcastOsc(port, address, [p1, p2, p3…])
    這兩個(gè)是網(wǎng)絡(luò)發(fā)送信息的函數(shù)

    ControlPanel, ControlPanelKeyboard, ControlPanelJoystick, ControlPanelMouse, ControlPanelP5, ControlPanelPPJoy, ControlPanelSpeech, ControlPanelMidi, ControlPanelDisplay這些都是打開各個(gè)設(shè)備的控制面板。
    ================================================================
    GlovePIE內(nèi)置函數(shù)

    三角函數(shù)
    單位是度
    Standard trig functions: sin(x), cos(x), tan(x), sec(x), cosec(x), cotan(x)
    Hyperbolic trig functions: SinH(x), CosH(x), TanH(x), SecH(x), CosecH(x), CotH(x)

    Inverse trig functions: aSin(x), aCos(x), aTan(x), aSec(x), aCosec(x), aCotan(x)
    Inverse Hyperbolic trig functions: aSinH(x), aCosH(x), aTanH(x), aSecH(x), aCosecH(x), aCotanH(x)

    2D inverse tan function: atan2(x)
    ----------------------------------------------
    舍入函數(shù)

    ceil(x): 向正無窮方向取整
    floor(x): 向負(fù)無窮方向取整
    trunc(x), int: 向零方向取整
    round(x): 四舍五入法取整 .5取*接近的偶數(shù)(銀行家舍入法)
    frac(x): 取小數(shù)部分。 例如 Frac(-1.32) = -0.32

    RoundTo(x, 位): 如果“位”是負(fù)或零,則按位數(shù)使用銀行家舍入法。如果“位”是正,則(rounds to that power of ten using Banker's Rounding.)

    SimpleRoundTo(x [,位]): 和RoundTo函數(shù)基本一樣,除了只四舍五入,不用銀行家舍入法。位缺省值是-2。
    --------------------------------------------------
    正負(fù)函數(shù)
    Sign(x): 如果x是正返回1,如果x是零返回0,如果x是負(fù)返回-1。
    Abs(x): 返回x的絕對(duì)值。
    --------------------------------------------------
    指數(shù)和開方函數(shù)

    sqr(x): x^2
    sqrt(x): x^(1/2)
    power(x,y): calculates x^y
    intPower(x,y): x和y取整后算 x^y
    exp(x): e^x. e is 2.71828
    Ldexp(s,p): s * (2^p)

    Poly(x, a0, [a1, [a2, [a3, [a4, [a5, [a6]]]]]]): a0 + a1*x + a2*(x^2) + a3*(x^3) + a4*(x^4) + ...

    Log10(x): 10為底數(shù)的對(duì)數(shù)
    Log2(x): 2為底數(shù)的對(duì)數(shù)
    LogN(N, x): N為底數(shù)的對(duì)數(shù)
    Ln(x): 自然對(duì)數(shù)
    LnXP1(x): x+1的自然對(duì)數(shù)
    --------------------------------------------------
    比較函數(shù)
    IsZero(x): 如果是0返回真
    IsInfinite(x): returns true if x is infinite
    IsNaN(x): 如果不是數(shù)字返回真

    SameValue(a, b [, epsilon]): 如果a和b相等返回真, or differ by no more than epsilon
    InSet(x,a,b,c,d,e,f,g,...): 如果x匹配后面任意一值,則返回真

    max(a,b): 返回較大的值
    min(a,b): 返回較小的值
    --------------------------------------------------
    范圍函數(shù)
    EnsureRange(x, a, b): 如果x在[a,b]區(qū)間,返回x,如果小于a則返回a,大于b則返回b。
    InRange(x, a, b): 如果x在[a, b]區(qū)間內(nèi)返回真

    MapRange(x, a, b, c, d): 根據(jù)x在[a, b]范圍的比例映射[c, d]范圍。例如MapRange(2, 1, 3, 10, 30)返回20

    EnsureMapRange(x, a, b, c, d): 和MapRange類似,只是當(dāng)x超出[a,b]區(qū)間按EnsureRange反應(yīng)。例如EnsureMapRange(4, 1, 3, 10, 30)返回30
    --------------------------------------------------
    隨機(jī)函數(shù)
    Random: 返回0到1間的隨機(jī)數(shù)
    Random(n): 返回0到n-1的隨機(jī)整數(shù)
    RandomRange(a,b): 返回a到b-1的隨機(jī)整數(shù)
    RandG(mean, StandDev): 返回高斯分布隨機(jī)數(shù)
    --------------------------------------------------
    序數(shù)函數(shù)
    odd(n): 如果是奇數(shù)返回真
    pred(n): 返回 n-1
    succ(n): 返回 n+1
    --------------------------------------------------
    時(shí)間函數(shù)
    Now: 返回當(dāng)前時(shí)間日期在1899.12.30之后多少天(非整數(shù))
    Time: 返回Now函數(shù)的小數(shù)部分
    Date: 返回Now函數(shù)的整數(shù)部分

    Tomorrow: 等于Date+1
    Yesterday: 等于Date-1

    CurrentYear: 返回當(dāng)前年份

    DateOf(x): 返回日單位。例如 DateOf(1999)返回1999 days
    TimeOf(x): 返回日單位。例如 TimeOf(0.2)返回0.2 days


    Dayofthemonth(x), dayoftheweek(x), dayoftheyear(x), dayofweek(x),
    Daysbetween(x, y),
    Daysinamonth(x, y), daysinayear(x), daysinmonth(x), daysinyear(x), DaySpan(x, y),
    HourOfTheDay(x), HourOfTheMonth(x), HourOfTheWeek(x), HourOfTheYear(x),
    HoursBetween(x, y), HourSpan(x, y),
    IncDay(x, [y])
    --------------------------------------------------
    時(shí)序函數(shù)
    Smooth(x, [額外楨數(shù), [不工作區(qū)]])
    根據(jù)x之前的額外楨數(shù)平滑之。不工作區(qū)缺省是0.

    Pressed(鍵)按下就返回true。
    Clicked(鍵)點(diǎn)擊(壓下松開算一次點(diǎn)擊)就返回true,不論單擊雙擊。
    SingleClicked(鍵)單擊返回true。
    DoubleClicked(鍵)雙擊返回true。

    HeldDown(x, MinTime)
    x為真持續(xù)時(shí)間大于MinTime時(shí)返回true。

    KeepDown(x, MinTime)
    當(dāng)x為真后,持續(xù)保持true輸出MinTime時(shí)間。
    ================================================================
    運(yùn)算符

    不同類型的量運(yùn)算會(huì)自動(dòng)轉(zhuǎn)換

    a%
    百分比號(hào)

    -b
    負(fù)號(hào)

    |b|
    取絕對(duì)值,b可以是數(shù)字、向量或矩陣。

    a + b

    a plus b
    如果a和b是數(shù)就加運(yùn)算;如果a和b是字符串就連接起來;如果a和b是布爾量就等同于and運(yùn)算符;如果a是向量,b不是,它將擴(kuò)展長度但不改變方向。

    a - b
    a minus b
    如果a和b是數(shù)就減運(yùn)算;如果a和b是字符串就連接起來;如果a和b是布爾量就等同于and運(yùn)算符;如果a是向量,b不是,它將擴(kuò)展長度但不改變方向。

    a x b

    a * b

    a times b

    a multiplied by b

    a cross b
    乘運(yùn)算

    a . b

    a dot b
    如果a和b是向量就 點(diǎn)乘運(yùn)算,其他數(shù)則等同普通乘運(yùn)算。

    a% of b

    a % of b
    a%乘以b

    a / b

    a divided by b
    普通除法運(yùn)算。如果a和b是布爾量就等同于or運(yùn)算符

    a div b
    整數(shù)除法。(a或b可以是非整數(shù))

    a mod b

    a % b
    取模運(yùn)算。(注意這是可以非整取模。例如7.5 mod 3.5返回0.5)

    a ^ b

    a ** b
    指數(shù)運(yùn)算

    a ^^ b
    反復(fù)指數(shù)運(yùn)算。例如2^^4就是2^(2^(2^2))

    b!
    階乘

    b!!
    當(dāng)b為奇數(shù),則等于從1到b的所有奇數(shù)的乘積。當(dāng)b為偶數(shù),則等于從2到b的所有偶數(shù)的乘積

    a & b
    如果a和b是整數(shù),進(jìn)行逐位與運(yùn)算,如果是非整數(shù),先取整再運(yùn)算,如果是字符串則連接起來。

    a | b
    如果a和b是整數(shù),進(jìn)行逐位或運(yùn)算,如果是非整數(shù),先取整再運(yùn)算,如果是字符串則連接起來。

    a shl b

    a << b
    a左位移b位,等于a * (2^b)

    a shr b

    a >> b
    a右位移b位,等于a div (2^b)

    not b
    邏輯取反

    a and b

    a but b
    a和b都為真返回真(如果為數(shù),則>-0.5到<0.5的范圍內(nèi)算假)。這只是邏輯運(yùn)算,不是位運(yùn)算符。

    a or b

    either a or b
    a或b任意是真則返回真(如果為數(shù),則>-0.5到<0.5的范圍內(nèi)算假)。這只是邏輯運(yùn)算,不是位運(yùn)算符。

    neither a nor b
    a和b都為假返回真

    a xor b
    當(dāng)且僅當(dāng)a或b有一為真,則返回真。

    a = b

    a == b
    當(dāng)a等于b,則返回真

    a != b

    a <> b

    a isn't b

    a is not b
    當(dāng)a不等于b,則返回真

    a ~= b
    如果a近似等于b,則返回真。(近似相等就是,字符串字母和順序都一樣,除了大小寫和空格不算。數(shù)字就是當(dāng)把a(bǔ)轉(zhuǎn)化成b相同的單位制,兩者的差的絕對(duì)值小于一個(gè)很小的值。)

    a !~= b

    a ~!= b
    如果a不近似等于b,則返回真。

    a > b
    a大于b則返回真

    a < b
    a小于b則返回真

    a >= b
    a大于等于b則返回真

    a <= b
    a小于等于b則返回真

    b < a < c

    c > a > b
    如果a大于b并且小于c,則返回真

    b <= a < c

    c > a >= b
    如果a大于等于b并且小于c,則返回真

    b < a <= c

    c >= a > b
    如果a大于b并且小于等于c,則返回真

    b <= a <= c

    c >= a >= b
    如果a大于等于b并且小于等于c,則返回真
    ==================================================
    鍵盤

    直接鍵名就可以讀或設(shè)置。但不推薦
    例如F1有以下三種形式
    F1

    Key.F1 (推薦形式)

    Keyboard.F1

    還有控制鍵聯(lián)合用的寫法
    ^C
    Ctrl+C (推薦)
    Ctrl and C

    用Key.ScanCode或Key.VK讀取鍵掃描碼。
    Key.Row返回第幾行(鍵盤*上面為第一行)的按鍵被按下。無鍵被按時(shí)返回-1。
    任意鍵被按下Key.AnyKey返回true。
    設(shè)置Key.RawInput為true,用來強(qiáng)制GlovePIE使用RawInput直讀鍵盤,而非用默認(rèn)的DirectInput方式。

    當(dāng)有多個(gè)鍵盤,使用KeyN.鍵的形式會(huì)自動(dòng)強(qiáng)制使用RawInput直讀鍵盤。
    讀Key.Count的值可知正連著幾個(gè)鍵盤。
    讀KeyN.Exists的值可知第N號(hào)鍵盤是否連著。

    以下鍵不能在GlovePIE中使用
    F Lock;My Documents;Messenger;LogOff;Power。

    非標(biāo)準(zhǔn)的多媒體鍵和應(yīng)用程序鍵能使用,但不能知道被按下多久。

    GlovePIE也能模擬輸入U(xiǎn)nicode字符。Key.Unicode后跟4位16進(jìn)制數(shù)。如Key.Unicode03B1

    字母上方數(shù)字鍵除可以Key.1,Key.2,Key.3……(推薦形式),也可以Key.one,Key.two,Key.three……。數(shù)字小鍵盤用Key.NumPad1,Key.NumPad2,Key.NumPad3……形式。數(shù)字小鍵盤上的“+”用Key.NumPadPlus,“-”用 Key.NumPadMinus,“*”用Key.NumPadMultiply,“/”用Key.NumPadDivide,“.”用 Key.NumPadDot,回車用Key.NumPadEnter。

    “`”用Key.Console,“\”用Key.Backslash,“-”用Key.Minus,“=”用Key.Equals,“[”用 Key.LeftBracket,“]”用Key.RightBracket,“;”用Key.Semicolon,“'”用 Key.Apostrophe,左換檔鍵用Key.LeftShift,右換檔鍵用Key.RightShift,“,”用Key.Comma,“.”用 Key.Dot,“/”用Key.Slash,左Ctrl鍵用Key.LeftCtrl,左窗口鍵用Key.LeftWindows,左Alt鍵用 Key.LeftAlt,空格鍵用Key.Space,右Alt鍵用Key.RightAlt,右窗口鍵用Key.RightWindows,應(yīng)用菜單鍵用Key.AppMenu,右Ctrl鍵用Key.RightCtrl,上箭頭鍵用Key.Up,下箭頭鍵用Key.Down,左箭頭鍵用 Key.Left,右箭頭鍵用Key.Right。

    有左右兩鍵的Shift、Ctrl、Alt、Windows都可用Key.Shift,Key.Ctrl,Key.Alt,Key.Windows。

    鍵都可以用Key.Scan后跟十六進(jìn)制鍵掃描碼表示。例如Key.Scan5B。
    ==================================================
    鼠標(biāo)

    有點(diǎn)長,懶了。誰給補(bǔ)上吧。
    ==================================================
    Wiimote

    Wiimote支持8個(gè)Wiimote1到Wiimote8。用Wiimote等于默認(rèn)Wiimote1。

    支持除電源和同步按鈕以外的所有按鈕。如下:
    Wiimote.Up, Wiimote.Down, Wiimote.Left, Wiimote.Right,
    Wiimote.A, Wiimote.B,
    Wiimote.Minus, Wiimote.Home, Wiimote.Plus
    Wiimote.One, Wiimote.Two

    Wiimote的加速度測量,X軸向右,Y軸向上,Z軸向前。
    Wiimote.gx, Wiimote.gy, Wiimote.gz
    Wiimote.g的值是gx,gy,gz的集合。
    Wiimote.RawAccX, Wiimote.RawAccY, Wiimote.RawAccZ
    Wiimote.RelAccX, Wiimote.RelAccY, Wiimote.RelAccZ
    是帶單位的加速度值。
    Wiimote.RawForceX,Wiimote.RawForceY,Wiimote.RawForceZ是過時(shí)的函數(shù),只為向后兼容保留,不建議再用。RawForce可以用固定比例轉(zhuǎn)換到RawAcc。RawForce=RawAcc*2.633

    旋轉(zhuǎn)
    Wiimote.Pitch, Wiimote.Roll
    Wiimote.SmoothPitch, Wiimote.SmoothRoll(平滑值)
    Pitch是垂直的角度。正面向上水平放置數(shù)值是0,紅外頭垂直向天花板數(shù)值是90,紅外頭垂直向地面數(shù)值是-90。
    Roll是水平滾動(dòng)角度。正面向上水平放置數(shù)值是0,向+按鈕方向滾動(dòng)180度數(shù)值是180,向-按鈕方向滾動(dòng)180度數(shù)值是-180。

    定位條
    wiimote.dot1x, wiimote.dot1y

    wiimote.dot4x, wiimote.dot4y
    返回4個(gè)紅外燈的坐標(biāo)
    Wiimote.dot1vis, Wiimote.dot2vis, Wiimote.dot3vis, Wiimote.dot4vis
    返回4個(gè)紅外燈點(diǎn)是否被看到。
    Wiimote.dot1size, Wiimote.dot2size, Wiimote.dot3size, Wiimote.dot4size
    返回4個(gè)紅外燈點(diǎn)的大?。〝?shù)值0到15之間)

    Wiimote.Leds賦值0到15之間的數(shù),控制Wiimote上的4個(gè)LED燈亮滅。
    Wiimote.Led1, Wiimote.Led2, Wiimote.Led3, and Wiimote.Led4賦值true或false單獨(dú)控制Led燈亮滅。

    Wiimote.Rumble賦值true,Wiimote力反饋開始震動(dòng)。

    Wiimote.Frequency發(fā)出所賦值頻率的聲音。
    Wiimote.Volume賦值0到2之間數(shù)調(diào)節(jié)音量0%到200%。
    Wiimote.Speaker賦值true或false控制喇叭發(fā)聲與否。
    Wiimote.Mute賦值true或false,和Speaker功能一樣,只是邏輯值正好相反。
    Wiimote.SampleRate賦值采樣頻率。采樣率必須是280的整數(shù)倍。當(dāng)前GlovePIE僅支持3640Hz采樣率。

    Wiimote.Battery讀出電量(滿電是192)。

    讀Wiimote.Count的值可知正連著幾個(gè)Wiimote。
    讀WiimoteN.Exists的值可知WiimoteN是否連著。

    Wiimote中的存儲(chǔ)器部分
    Wiimote.InByteString讀出整個(gè)存儲(chǔ)器的串。
    或分別讀
    var.a = Wiimote.InReport
    var.b1 = Wiimote.InByte1
    ...
    var.bN = Wiimote.InByteN
    WiimotePoke([wiimote number], address, value)讀Wiimote中的存儲(chǔ)器部分
    WiimoteSend(wiimote number, report number, [p1, p2, p3…])存進(jìn)存儲(chǔ)器部分
    ================================================== 

    聲明:本文來自網(wǎng)絡(luò),版權(quán)屬于原作者。