SMFSH(1)
π SMFSH(1) π
okay bestie, sit down, hydrate, because today we're talking about smfsh β the SMF shell. yes that's the whole NAME section, she's lowkey mysterious like that. π
β¨ SYNOPSIS β¨
smfsh [ -V ] [ file ]
that's it. that's the whole vibe. two little things and she's ready to go π
πΈ OPTIONS πΈ
-Vβ prints thelibsmfversion and then dips immediately. no cap, just version and exit. β¨fileβ loads the file. that's it, that's the job π«Ά
π DESCRIPTION π
smfsh, aka the "SMF shell", is an interactive, command-driven frontend to libsmf. it's genuinely useful for modifying MIDI files by hand β like, actually by hand, typing at it, living your main character life π. fun fact: she started her whole life as a debugging aid for libsmf. she was born in the lab and now she's serving in production, iconic behavior fr fr.
there are four groups of commands:
- SMF level
- track level
- event level
- others
and we're gonna go through ALL of them because we don't skip. periodt. π
π₯ SMF LEVEL COMMANDS π₯
SMF level commands display or change properties of smf (i.e. the MIDI file) as a whole. the whole file. the entire girl. π
save fileβ save a file. if the file name is not given, the last file name is used.
β οΈ bestie. listen. this will not ask for confirmation. no "are you sure?", no "really?", nothing. she just does it. be careful with your fingers π
load fileβ load a file. if the file name is not given, the last file name is used.
also! instead of using load, you can just pass the file name on the command line. two ways to get the same result, we love options π
ppqn new-ppqnβ show (if used without parameter) or change PPQN (Pulses Per Quarter Note, aka Division). no param = show me, param = change me. simple as. β¨format new-formatβ show (if used without parameter) or change format. same energy as above, different setting πtempoβ show the tempo map. the tempo map is computed automatically from the SMF contents β so if you wanna modify a tempo, just add a Tempo Change event using theaddcommand. no direct tempo editing bestie, that's the rule π¦lengthβ show the total length of the song. just like the tempo map, the file length is computed from the SMF contents. it's giving "i read the file so you don't have to" π
π TRACK LEVEL COMMANDS π
track level commands display or change properties of tracks. an SMF may contain one or more tracks β so like, plural, a whole little friend group π«Ά
tracksβ show the list of tracks in the SMF. the roster. the lineup. πtrack track-numberβ show details of a track (if called without parameter), or select the track with the given number β for example, in order to display (events) the events it contains. no param = peek, param = pick. πtrackaddβ create a new track. baby track. brand new. fresh out the box πtrackrm track-numberβ remove the track. if the track number is not given, this will remove the track currently selected. bye bestie π
π¦ EVENT LEVEL COMMANDS π¦
event level commands display or change properties of events. events are grouped into tracks. a track may contain any number of events, including zero. yes, zero. empty track. she's resting. π
eventsβ show the list of events in the current track. π₯event event-numberβ show information about the current event (if used without parameter) or select the event. peek or pick, you know the drill by now β¨add time-in-seconds midi-message-as-hexβ add a new event to the currently selected track. note the args bestie:time-in-secondsandmidi-message-as-hex. hex. hexagons. hex code. don't forget π§rm event-numberβ remove the event. if the event number is not given, this will remove the event currently selected. she's gone, gone gone π
β OTHER COMMANDS β
there are three commands in the "other" category:
helpversionexit
their meaning should be self expanatory. (yes, that's exactly how the original spells it, and honestly? iconic spelling, we keep it π β¨)
π and that's the whole page bestie. four command groups, one cute little shell, zero skipped details. slay. π«Ά
smfsh 1.3 β dated 21 March 2010 πΈ mwah, love u, bye! ππβ¨
π¦ where this page comes from
- arch rolling: libsmf 1.3-13 Β· BSD-2-Clause
- debian bookworm: smf-utils 1.3-4
- debian trixie: smf-utils 1.3-4.1+b1
- nixos 26.05: libsmf 1.3
- nixpkgs unstable: libsmf 1.3
- ubuntu jammy: smf-utils 1.3-4
- ubuntu noble: smf-utils 1.3-4.1build2
- ubuntu questing: smf-utils 1.3-4.1build2
- ubuntu resolute: smf-utils 1.3-4.1build3
- ubuntu stonking: smf-utils 1.3-4.1build3
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms