iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Software Development

在麥塊的農場裡寫 Lua系列 第 13

Day13 用磁碟機播放唱片

上次在研究 CC: Tweaked 電腦磁碟機的時候
在 /rom/apis/disk.lua 發現一個有趣的函數

function playAudio(name)
    if isDrive(name) then
        peripheral.call(name, "playAudio")
    end
end

這不就是播放音樂嗎?
也就是說磁碟機也可以播放音樂
先來看看不依靠模組,原本就支援的播放唱片
只要對著唱片機「使用」唱片即可
minecraft 播放唱片

而如果用磁碟機,則一樣要把唱片放入磁碟機裡頭
minecraft cc: tweaked disk playaudio

接著用 Lua 寫這一行即可
輸入為 'left' 是因為磁碟機在我電腦左方
其他的方位則是 'right', 'top', 'bottom', 'front', 'back'
就看你磁碟機怎麼安裝

disk.playAudio('left')

另外,我還在 /rom/programs/fun 找到了一個有趣的 script
dj.lua

local sCommand = tArgs[1]
if sCommand == "stop" then
    -- Stop audio
    disk.stopAudio()

elseif sCommand == "play" or sCommand == nil then
    -- Play audio
    local sName = tArgs[2]
    if sName == nil then
        -- No disc specified, pick one at random
        local tNames = {}
        for _, sName in ipairs(peripheral.getNames()) do
            if disk.isPresent(sName) and disk.hasAudio(sName) then
                table.insert(tNames, sName)
            end
        end
        if #tNames == 0 then
            print("No Music Discs in attached disk drives")
            return
        end
        sName = tNames[math.random(1, #tNames)]
    end

    -- Play the disc
    if disk.isPresent(sName) and disk.hasAudio(sName) then
        print("Playing " .. disk.getAudioTitle(sName))
        disk.playAudio(sName)
    else
        print("No Music Disc in disk drive: " .. sName)
        return
    end

else
    printUsage()

end

看起來 dj 的用法就是以下幾種,大家可以試試
停止播放唱片

dj stop

播放左邊磁碟機的唱片

dj play left

自動從所有的唱片中隨機挑選播放

dj play

因為是 Command line 的方式,而且還會自動挑選唱片,比起我們自己寫 Lua 是有稍微方便一點~

peripheral.getNames() 是取得所有電腦外接的設備位置
例如 { 'left', 'top' }
disk.isPresent(sName) 則是判斷該位置的磁碟機內是否有東西

磁碟機的研究就到這裡,下回我會開始讓電腦外接大螢幕!
敬請期待~


上一篇
Day12 安裝外接磁碟機與磁碟片 - 取得 Lua shell script 的參數列
下一篇
Day14 用 100 吋超大螢幕寫 Code 的感覺 - 用 metatable 改變預設行為
系列文
在麥塊的農場裡寫 Lua30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言