Добавил крутилочку гейна и чувствительности джога

This commit is contained in:
IgorTimofeev 2023-12-30 23:22:05 +03:00
parent 470bff63e7
commit fe8c26fc38
2 changed files with 54 additions and 39 deletions

View File

@ -15,22 +15,29 @@ local event = require("Event")
local currentScriptDirectory = filesystem.path(system.getCurrentScript()) local currentScriptDirectory = filesystem.path(system.getCurrentScript())
local configPath = paths.user.applicationData .. "Pioneer/Config.cfg" local configPath = paths.user.applicationData .. "Pioneer/Config.cfg"
local config
if filesystem.exists(configPath) then local config = {
config = filesystem.readTable(configPath)
-- Older versions support
config.timeMode = config.timeMode or 0
config.jogSpeed = config.jogSpeed or 0
else
config = {
tapes = { tapes = {
}, },
timeMode = 0, timeMode = 0,
jogSpeed = 0 jogSpeed = 0,
gain = 1,
speed = 0.5,
speedIndex = 0,
} }
if filesystem.exists(configPath) then
local loadedConfig = filesystem.readTable(configPath)
-- Older versions support
for key, value in pairs(config) do
if not loadedConfig[key] then
loadedConfig[key] = value
end
end
config = loadedConfig
end end
local function saveConfig() local function saveConfig()
@ -46,7 +53,6 @@ local blinkState = false
local blinkUptime = 0 local blinkUptime = 0
local blinkInterval = 0.5 local blinkInterval = 0.5
local speedSlider
local powerButton local powerButton
local tapes local tapes
@ -61,14 +67,16 @@ local function setPosition(value)
invoke("seek", value - invoke("getPosition")) invoke("seek", value - invoke("getPosition"))
end end
local function getCurrentTapeSpeed() local function getTapeSpeed()
local speed = 2 * speedSlider.value - 1 local speed = 2 * config.speed - 1
if tapeConfig.speedIndex == 0 then if config.speedIndex == 0 then
speed = speed * 0.25 speed = speed * 0.25
elseif tapeConfig.speedIndex == 1 then
elseif config.speedIndex == 1 then
speed = speed * 0.5 speed = speed * 0.5
elseif tapeConfig.speedIndex == 2 then
elseif config.speedIndex == 2 then
speed = speed * 0.75 speed = speed * 0.75
end end
@ -76,17 +84,16 @@ local function getCurrentTapeSpeed()
end end
local function updateCurrentTapeSpeed() local function updateCurrentTapeSpeed()
local speed = getCurrentTapeSpeed() invoke("setSpeed", 1 + getTapeSpeed() * 0.75)
invoke("setSpeed", 1 + speed * 0.75)
end end
local function updateCurrentTape() local function updateCurrentTape()
tape = tapes[tapeIndex] tape = tapes[tapeIndex]
tapeConfig = config.tapes[tape.address] tapeConfig = config.tapes[tape.address]
speedSlider.value = tapeConfig.speed
config.lastTape = tape.address config.lastTape = tape.address
-- Because there's no "getSpeed" function...
updateCurrentTapeSpeed() updateCurrentTapeSpeed()
end end
@ -106,8 +113,6 @@ local function updateTapes()
if not config.tapes[address] then if not config.tapes[address] then
config.tapes[address] = { config.tapes[address] = {
speed = 0.5,
speedIndex = 0,
cue = 0, cue = 0,
cues = {}, cues = {},
cueIndex = 1, cueIndex = 1,
@ -247,7 +252,7 @@ local function incrementJogIndex(value)
end end
local function invalidateJogIncrementUptime(uptime) local function invalidateJogIncrementUptime(uptime)
jogIncrementUptime = uptime + (1 - speedSlider.value) * (jogIncrementSpeedMax - jogIncrementSpeedMin) jogIncrementUptime = uptime + (1 - config.speed) * (jogIncrementSpeedMax - jogIncrementSpeedMin)
end end
local function displayDrawProgressBar(x, y, width, progress) local function displayDrawProgressBar(x, y, width, progress)
@ -306,7 +311,7 @@ overlay.draw = function(overlay)
-- Tempo -- Tempo
screen.drawText(statsX + 24, statsY, 0xE1E1E1, "Tempo") screen.drawText(statsX + 24, statsY, 0xE1E1E1, "Tempo")
screen.drawText(statsX + 26, statsY + 1, 0xE1E1E1, string.format("%02d", math.floor(getCurrentTapeSpeed() * 100)) .. "%") screen.drawText(statsX + 26, statsY + 1, 0xE1E1E1, string.format("%02d", math.floor(getTapeSpeed() * 100)) .. "%")
-- Tempo index -- Tempo index
@ -415,10 +420,10 @@ end
-------------------------------- Speed slider ------------------------------------------------ -------------------------------- Speed slider ------------------------------------------------
local speedSlider = window:addChild(GUI.object(71, 33, 5, 15))
local speedSliderImage = loadImage("SpeedSlider") local speedSliderImage = loadImage("SpeedSlider")
speedSlider = window:addChild(GUI.object(71, 33, 5, 15)) speedSlider.value = config.speed
speedSlider.value = 0.5
speedSlider.draw = function(speedSlider) speedSlider.draw = function(speedSlider)
-- screen.drawRectangle(speedSlider.x, speedSlider.y, speedSlider.width, speedSlider.height, 0xFF0000, 0x0, " ") -- screen.drawRectangle(speedSlider.x, speedSlider.y, speedSlider.width, speedSlider.height, 0xFF0000, 0x0, " ")
@ -440,7 +445,7 @@ speedSlider.eventHandler = function(workspace, speedSlider, e1, e2, e3, e4)
end end
if tape and powerButton.pressed then if tape and powerButton.pressed then
tapeConfig.speed = speedSlider.value config.speed = speedSlider.value
updateCurrentTapeSpeed() updateCurrentTapeSpeed()
end end
@ -769,7 +774,7 @@ jog.eventHandler = function(workspace, jog, e1, e2, e3, e4, ...)
invalidateJogIncrementUptime(computer.uptime()) invalidateJogIncrementUptime(computer.uptime())
-- Min seek speed is 100 msec & max is 10 sec -- Min seek speed is 100 msec & max is 10 sec
invoke("seek", math.floor((0.1 + (10 * (1 - config.jogSpeed))) * sampleRate * direction)) invoke("seek", math.floor((0.1 + (10 * config.jogSpeed)) * sampleRate * direction))
workspace:draw() workspace:draw()
end end
@ -827,20 +832,30 @@ local function newKnob(x, y, value)
return knob return knob
end end
-- Jog adjust
local jogAdjustKnob = window:addChild(newKnob(61, 21, 0))
-- Gain
gainKnob = window:addChild(newKnob(72, 12, config.gain))
gainKnob.onValueChanged = function()
if not tape or not powerButton.pressed then
return
end
config.gain = gainKnob.value
invoke("setVolume", config.gain)
saveConfig()
end
-- Jog speed -- Jog speed
local jogSpeedKnob = window:addChild(newKnob(61, 21, config.jogSpeed)) local jogSpeedKnob = window:addChild(newKnob(72, 16, config.jogSpeed))
jogSpeedKnob.onValueChanged = function() jogSpeedKnob.onValueChanged = function()
config.jogSpeed = jogSpeedKnob.value config.jogSpeed = jogSpeedKnob.value
saveConfig() saveConfig()
end end
-- Speed adjust
local speedAdjustKnob = window:addChild(newKnob(72, 12, 0))
-- Release start
local releaseStartKnob = window:addChild(newKnob(72, 16, 0))
-------------------------------- Pref/next tape button ------------------------------------------------ -------------------------------- Pref/next tape button ------------------------------------------------
local tapePrevButton = window:addChild(newRoundMiniButton(2, 30, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, "<<")) local tapePrevButton = window:addChild(newRoundMiniButton(2, 30, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, "<<"))
@ -1202,10 +1217,10 @@ masterTempoButton.switchMode = true
masterTempoButton:press() masterTempoButton:press()
tempoButton.onTouch = function() tempoButton.onTouch = function()
tapeConfig.speedIndex = tapeConfig.speedIndex + 1 config.speedIndex = config.speedIndex + 1
if tapeConfig.speedIndex > 3 then if config.speedIndex > 3 then
tapeConfig.speedIndex = 1 config.speedIndex = 1
end end
updateCurrentTapeSpeed() updateCurrentTapeSpeed()