Audio

Audio

UI

index template

  • editor.template.componetns/pageX/index.lua

    {
        name = "pageX",
        components = {
          layers = {
            {background={}},
          },
          audios = {
            long = {"streamOne", "streamTwo"},
            short = {"shortOne", "shortTwo"}
          },
        },
        commands = {},
    }

template

  • editor.template.components.pageX.audios.aduio

    local props = {
      autoPlay = {{autoPlay}},
      channel  = {{channel}},
      delay    = {{delay}},
      filename = "{{filename}}",
      folder   = "{{folder}}",
      loops    = {{loops}}, -- 1 + 3 = 4 times
      name     = "{{name}}",
      type     = "{{type}}",
    }
    return require("components.kwik.page_audio").new(props)

module

  • components.kwik.page_audio

    function M:create(UI)
      ...
      ...
        if self.type == "stream" then
          self.loader = audio.loadStream
          self.filename = "long/"..self.filename
        else
          self.loader = audio.loadSound
          self.filename = "short/"..self.filename
        end
    
        local path =  App.getProps().audioDir..self.filename
        self.audioObj =  self.loader(path , App.getProps().systemDir)
        ...
        ...
    end
    
    function M:play()
      audio.setVolume(self.volume or 8, { channel=self.channel });
      if self.allowRepeat then
          self.repeatableChannel = audio.play(self.audioObj, {  channel=self.channel, loops=self.loops, fadein = self.fadein } )
      else
        audio.play(self.audioObj, {channel=self.channel, loops=self.loops, fadein = self.fadein } )
      end
    end
    ...
    ...

components.editor.audio

audio
├── audioTable.lua
├── buttons.lua
├── controlProps.lua
├── controller
│   ├── cancel.lua
│   └── save.lua
├── defaults
│   └── audio.lua
├── index.lua
  • comonents.editor.audio.index

    local model = {
      id ="audio",
      props = {
        {name="autoPlay", value=true},
        {name="channel", value = ""},
        {name="delay", value=0},
        {name="filename", value = ""},
        {name="folder", value=""},
        {name="loops", value = ""},
        {name="name", value = ""},
        {name="type", value = ""},
      }
    }
    ...
    ...
    function controller:render(book, page, type, name, model)
      local dst = "App/"..book.."/"..page .."/components/audios/"..type.."/"..name ..".lua"
      local tmplt =  "editor.template/components/pageX/audios/audio.lua"
      util.mkdir("App", book, page, "components", "audios", type)
      util.saveLua(tmplt, dst, model)
      return dst
    end
    
    function controller:save(book, page, type, name, model)
      local dst = "App/"..book.."/models/"..page .."/audios/"..type.."/"..name..".json"
      util.mkdir("App", book, "models", page, "audios", type)
      util.saveJson(dst, model)
      return dst
    end
  • components.editor.audio.defaults

    local M = {
      name = "audio_",
      class="audio",
      controls = {
        autoPlay=false,
        channel = 0,
        delay=0,
        filename = "",
        -- folder="",
        loops = 0,
        name = "",
        type = "",
      }
    }