taut: sample RAM numbers

This commit is contained in:
minjaesong
2026-06-02 19:41:44 +09:00
parent 2045da0286
commit dad345c027
2 changed files with 60 additions and 18 deletions

View File

@@ -1048,6 +1048,7 @@ const colTabBarBack2 = 136
const colTabBarOrn = 136 const colTabBarOrn = 136
const colBrand = 211 const colBrand = 211
const colPopupBack = 244 const colPopupBack = 244
const colPopupBack2 = 243
const colTabActive = 239 const colTabActive = 239
const colTabInactive = 45 const colTabInactive = 45
@@ -2909,9 +2910,9 @@ function makeExternalPanelDraw(progName) {
} }
// Row offsets (within the meta block at the top of the Project panel) of the editable rows. // Row offsets (within the meta block at the top of the Project panel) of the editable rows.
const PROJ_META_ROW_FLAGS = 5 const PROJ_META_ROW_FLAGS = 6
const PROJ_META_ROW_GVOL = 6 const PROJ_META_ROW_GVOL = 7
const PROJ_META_ROW_MVOL = 7 const PROJ_META_ROW_MVOL = 8
const PROJ_META_VALUE_X = 12 const PROJ_META_VALUE_X = 12
function drawProjectContents(wo) { function drawProjectContents(wo) {
@@ -2922,6 +2923,8 @@ function drawProjectContents(wo) {
let toneModeStr = ['Linear pitch','Amiga pitch','Linear freq',''][mixerflag & 3] let toneModeStr = ['Linear pitch','Amiga pitch','Linear freq',''][mixerflag & 3]
let intpModeStr = ['Default','None','A500','A1200','SNES','DPCM','',''][(mixerflag >>> 2) & 7] let intpModeStr = ['Default','None','A500','A1200','SNES','DPCM','',''][(mixerflag >>> 2) & 7]
let flagStrSelected = [toneModeStr, intpModeStr] let flagStrSelected = [toneModeStr, intpModeStr]
const sampleCount = (samplesCache || []).length
const sampleKStr = formatSampleRamK(computeSampleRAMBytes())
let projMeta = { let projMeta = {
@@ -2929,6 +2932,7 @@ function drawProjectContents(wo) {
ProjName: songsMeta.projectName || '(unnamed)', ProjName: songsMeta.projectName || '(unnamed)',
Patterns: `${song.numPats}/4095 ($${song.numPats.hex03()})`, Patterns: `${song.numPats}/4095 ($${song.numPats.hex03()})`,
Cues: `${song.lastActiveCue}/1024 ($${song.lastActiveCue.hex03()})`, Cues: `${song.lastActiveCue}/1024 ($${song.lastActiveCue.hex03()})`,
Samples: `${sampleCount} (${sampleKStr}k/${SMP_RAM_MAX_K}k)`,
Notation: pitchTablePresets[PITCH_PRESET_IDX].name, Notation: pitchTablePresets[PITCH_PRESET_IDX].name,
Flags: `${flagStrSelected.join(', ')} ($${mixerflag.hex02()})`, Flags: `${flagStrSelected.join(', ')} ($${mixerflag.hex02()})`,
GlobalVol: `$${initialGlobalVolume.hex02()}`, GlobalVol: `$${initialGlobalVolume.hex02()}`,
@@ -2961,7 +2965,7 @@ function drawProjectContents(wo) {
con.color_pair(colStatus, 255) // reset colour con.color_pair(colStatus, 255) // reset colour
} }
const PROJ_SONGLIST_Y = PTNVIEW_OFFSET_Y + 9 // header row of the song list const PROJ_SONGLIST_Y = PTNVIEW_OFFSET_Y + 10 // header row of the song list
const PROJ_SONGLIST_X = 2 const PROJ_SONGLIST_X = 2
function projectSongListRowsVisible() { function projectSongListRowsVisible() {
@@ -3548,6 +3552,34 @@ function tickFunkWaveform() {
if (funking || funkWaveLast) drawSampleWaveform() if (funking || funkWaveLast) drawSampleWaveform()
} }
function computeSampleRAMBytes() {
if (!samplesCache) return 0
let total = 0
for (let i = 0; i < samplesCache.length; i++) total += samplesCache[i].len
return total
}
// 16 banks x 524288 = 8 MB = 8192k. Hardcoded to match the user-visible budget.
const SMP_RAM_MAX_K = 8192
function formatSampleRamK(bytes) {
const k = bytes / 1024
return (k < 10 ? k.toFixed(2)
: k < 100 ? k.toFixed(1)
: Math.round(k).toString())
}
function drawSamplesRamFooter() {
const bytes = computeSampleRAMBytes()
const ramStr = formatSampleRamK(bytes) + 'k / ' + SMP_RAM_MAX_K + 'k'
const y = PTNVIEW_OFFSET_Y//SMP_RIGHT_Y + SMP_PROP_H - 1
con.move(y, SCRW - 13)
// con.color_pair(colSmpPropLabel, colBackPtn)
// print(('Sample RAM' + ' ').substring(0, 10))
con.color_pair(colSmpPropValue, colBackPtn)
print(ramStr)
}
function drawSamplesEditButton() { function drawSamplesEditButton() {
const y = SMP_BTN_Y const y = SMP_BTN_Y
con.move(y, SMP_RIGHT_X) con.move(y, SMP_RIGHT_X)
@@ -3572,6 +3604,7 @@ function drawSamplesContents(wo) {
drawSamplesListColumn() drawSamplesListColumn()
drawSamplesSeparator() drawSamplesSeparator()
drawSamplesProperties() drawSamplesProperties()
drawSamplesRamFooter()
drawSamplesUsedBy() drawSamplesUsedBy()
drawSampleWaveform() drawSampleWaveform()
drawSamplesEditButton() drawSamplesEditButton()
@@ -5327,6 +5360,7 @@ function openFlagsPopup() {
items: items, items: items,
height: items.length, height: items.length,
width: 22, width: 22,
drawWell: false,
showScrollbar: false, showScrollbar: false,
selectable: (it) => it.kind === 'tone' || it.kind === 'intp', selectable: (it) => it.kind === 'tone' || it.kind === 'intp',
renderItem: (ctx) => { renderItem: (ctx) => {

View File

@@ -217,6 +217,7 @@ function scrollHorz(dx, stringSize, stringViewSize, currentCursorPos, currentScr
// action string to close the dialog, // action string to close the dialog,
// or null to stay open. // or null to stay open.
// showScrollbar: bool?, -- default: auto (true when overflowing). // showScrollbar: bool?, -- default: auto (true when overflowing).
// drawWell: bool?, -- draw the list background
// bg: number?, -- list background colour (default 242). // bg: number?, -- list background colour (default 242).
// }, // },
// //
@@ -287,6 +288,8 @@ function showDialog(opts) {
: Array.isArray(message) ? message : Array.isArray(message) ? message
: ('' + message).split('\n') : ('' + message).split('\n')
const list = opts.list || null
const drawWell = list?.drawWell ?? true
const c = opts.colours || {} const c = opts.colours || {}
const fg = (c.fg != null) ? c.fg : 254 const fg = (c.fg != null) ? c.fg : 254
const bg = (c.bg != null) ? c.bg : 244 const bg = (c.bg != null) ? c.bg : 244
@@ -294,11 +297,10 @@ function showDialog(opts) {
const dimFg = (c.dimFg != null) ? c.dimFg : 249 const dimFg = (c.dimFg != null) ? c.dimFg : 249
const hlFg = (c.hlFg != null) ? c.hlFg : 240 const hlFg = (c.hlFg != null) ? c.hlFg : 240
const focusBg = (c.focusBg != null) ? c.focusBg : 253 const focusBg = (c.focusBg != null) ? c.focusBg : 253
const listBg = (c.listBg != null) ? c.listBg : 243 const listBg = (c.listBg != null) ? c.listBg : (drawWell) ? 243 : bg
const listSelBg = (c.listSelBg != null) ? c.listSelBg : focusBg const listSelBg = (c.listSelBg != null) ? c.listSelBg : focusBg
// List state // List state
const list = opts.list || null
const listItems = list ? (list.items || []) : [] const listItems = list ? (list.items || []) : []
const listSelectable = list && list.selectable ? list.selectable : (() => true) const listSelectable = list && list.selectable ? list.selectable : (() => true)
const listHeight = list ? (list.height || Math.min(8, listItems.length)) : 0 const listHeight = list ? (list.height || Math.min(8, listItems.length)) : 0
@@ -474,17 +476,21 @@ function showDialog(opts) {
const sbar = listScrollbarNeeded() const sbar = listScrollbarNeeded()
// Top border (drawField style) // Top border (drawField style)
con.color_pair(listBgColour, bg) if (drawWell) {
con.move(lbRow, lbCol) con.color_pair(listBgColour, bg)
print('\u00EC' + '\u00A9'.repeat(lw - 2) + '\u00ED') con.move(lbRow, lbCol)
print('\u00EC' + '\u00A9'.repeat(lw - 2) + '\u00ED')
}
// Side borders + rows // Side borders + rows
for (let r = 0; r < listHeight; r++) { for (let r = 0; r < listHeight; r++) {
con.color_pair(listBgColour, bg) if (drawWell) {
con.move(lbRow + 1 + r, lbCol) con.color_pair(listBgColour, bg)
print('\u00AB') con.move(lbRow + 1 + r, lbCol)
con.move(lbRow + 1 + r, lbCol + lw - 1) print('\u00AB')
print('\u00AA') con.move(lbRow + 1 + r, lbCol + lw - 1)
print('\u00AA')
}
const idx = listScroll + r const idx = listScroll + r
con.move(lbRow + 1 + r, lbCol + 1) con.move(lbRow + 1 + r, lbCol + 1)
@@ -531,10 +537,12 @@ function showDialog(opts) {
} }
// Bottom border // Bottom border
con.color_pair(listBgColour, bg) if (drawWell) {
con.move(lbRow + 1 + listHeight, lbCol) con.color_pair(listBgColour, bg)
print('\u00F4' + '\u00AC'.repeat(lw - 2) + '\u00F5') con.move(lbRow + 1 + listHeight, lbCol)
con.color_pair(fg, bg) print('\u00F4' + '\u00AC'.repeat(lw - 2) + '\u00F5')
con.color_pair(fg, bg)
}
} }
function drawButton(i, regions) { function drawButton(i, regions) {