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 the libsmf version 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 the add command. 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-seconds and midi-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:

  1. help
  2. version
  3. exit

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! πŸ’œπŸŽ€βœ¨