Skip to content

API Modplayer

Keith McGahey edited this page Apr 8, 2026 · 1 revision

API Mod Player

Tracker module music playback (MOD, XM, S3M formats). The mod player runs on Core 1 alongside other audio.

picocalc.modplayer

Functions

picocalc.modplayer.create()

Create a new mod player instance.

  • Parameters: None
  • Returns: (userdata) Player object, or nil, errorString on failure
local player, err = picocalc.modplayer.create()
if not player then
    picocalc.repl.print("Error: " .. err)
end

Player Methods

Objects returned by picocalc.modplayer.create(). The player is automatically cleaned up by the garbage collector when it goes out of scope.

player:load(path)

Load a tracker module file from the SD card.

  • Parameters:
    • path (string): Path to a MOD, XM, or S3M file
  • Returns: (boolean) true if the file was loaded successfully
local ok = player:load("/apps/myapp/music.mod")

player:play([loop])

Start playback of the loaded module.

  • Parameters:
    • loop (boolean, optional): Whether to loop playback. Default false.
  • Returns: None
player:play(true)  -- play with looping

player:stop()

Stop playback.

  • Parameters: None
  • Returns: None
player:stop()

player:pause()

Pause playback at the current position.

  • Parameters: None
  • Returns: None
player:pause()

player:resume()

Resume paused playback.

  • Parameters: None
  • Returns: None
player:resume()

player:isPlaying()

Check whether the player is currently playing.

  • Parameters: None
  • Returns: (boolean) true if playback is active
if player:isPlaying() then
    picocalc.repl.print("Playing...")
end

player:setVolume(vol)

Set the playback volume.

  • Parameters:
    • vol (number): Volume level from 0 (silent) to 100 (maximum)
  • Returns: None
player:setVolume(75)

player:getVolume()

Get the current playback volume.

  • Parameters: None
  • Returns: (number) Current volume level (0-100)
local vol = player:getVolume()

player:setLoop(enabled)

Enable or disable looping on the current module.

  • Parameters:
    • enabled (boolean): true to loop, false to play once
  • Returns: None
player:setLoop(true)

Clone this wiki locally