FamiStudio NES music editor

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
FamiStudio NES music editor
by on (#241435)
Hi!

I took some time in the last few weeks to make a simple NES music editor. It is intended to be more user-friendly than FamiTracker. Its feature set is designed to match FamiTone2, and even has native export to it.

  • Modern DAW-style UI with sequencer and piano roll, no hexadecimal anywhere
  • Full Undo/Redo support
  • Native export to FamiTone2 music format
  • Famitracker text import
  • Basic MIDI input support
  • Low CPU usage (Direct2D for graphics, XAudio2 for audio, fairly well threaded)
  • Runs on top of Blargg's Nes_Snd_Emu.

Update 1.2.0
  • macOS support
  • Extended note range to 8 octaves
  • Volume tracks support
  • Release envelopes & release notes
  • Hi-DPI support (100%, 150% and 200% scaling on Windows, Retina on macOS)
  • Config dialog
  • MIDI improvements (device selection and note release)
  • Improved NSF memory usage
  • Misc bug fixes

Update 1.1.0
  • New export dialog
  • Added WAV export
  • Added FamiTracker Text export (see the wiki for limitations)
  • Added NSF export (see the wiki for limitations)
  • Bug fixes and code refactoring

It is available on famistudio.org.

Here is a quick video tutorial to get you started.

Image

Let me know what you think.

-Mat
Re: FamiStudio NES music editor
by on (#241437)
Video, documentation, README.md, etc. do not do a good job explaining what file formats this thing *exports* to, nor does it mention what it natively saves as (searching the wiki for "save" turns up nothing, "export" only mentions Famitone2, but then the screenshots mentions NESASM, yet the docs say nothing about available choices). This is probably the most important piece of information, so its omission is kind of weird.

I have friends who are very interested in this -- they're folks who have a lot of difficulty comprehending the tracker-based interface of FamiTracker -- yet with omission of file format export seems like an oversight. They really want .NSF and .NES export capability, understandably.
Re: FamiStudio NES music editor
by on (#241438)
Quote:
do not do a good job explaining what file formats this thing *exports* to, nor does it mention what it natively saves as


Thanks for the feedback. Its very hard to decide which features to include in an initial release. You want to get a lot of features in, but you also want to get something out asap so that people can start giving you feedback. Its a trade off.

Right now, it saves as a proprietary file format (*.fms), and exports to FamiTone2 music format (ASM6, NESASM or CA65, does the exact same thing as the tools included with FT2). I plan to add FamiTracker TXT export soon (once you are in the FamiTracker ecosystem, you can export to anything). NSF is more of a long term goal, i wouldn't expect it in the next few weeks.

-Mat
Re: FamiStudio NES music editor
by on (#241448)
I'm trying to use your program on a PC running Debian GNU/Linux version 10, codename "buster". I have Wine to run Win32 applications, such as FamiTracker, OpenMPT, FCEUX debugger, and BGB, and Mono to run .NET applications, such as Mesen and Mesen-S. However, its MSI package appears to require the .NET Framework, and Wine doesn't appear to be able to use the system installation of Mono.

Code:
$ wine --version
wine-4.0 (Debian 4.0-2)
$ mono --version
Mono JIT compiler version 5.18.0.240 (Debian 5.18.0.240+dfsg-3 Wed Apr 17 16:37:36 UTC 2019)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
   TLS:           __thread
   SIGSEGV:       altstack
   Notifications: epoll
   Architecture:  amd64
   Disabled:      none
   Misc:          softdebug
   Interpreter:   yes
   LLVM:          supported, not enabled.
   Suspend:       preemptive
   GC:            sgen (concurrent by default)
$ wine msiexec /i ~/Downloads/FamiStudio1.0.0.msi
This setup requires the .NET Framework version v4.6.1.
Please install the .NET Framework and run this setup
again. The .NET Framework can be obtained from the
web. Would you like to do this now?
[ Yes ] [ No ]


I can run .NET Framework executables using Mono, but only if they're bare executables, not packed inside an MSI file. Google Search for mono msi file brought me the question "How does one use Mono if you have to install an MSI file first?" on Stack Overflow. Its answer recommends extracting the executables from the MSI file using 7-Zip:
Code:
$ mkdir ~/Downloads/famistudio
$ cd ~/Downloads/famistudio
$ 7z x ../FamiStudio1.0.0.msi
$ ls
'[5]SummaryInformation'             '!File'
'!AdminExecuteSequence'             '!Icon'
'!AdminUISequence'                   Icon._853F67D554F05449430E7E.exe
'!AdvtExecuteSequence'               Icon._C68722421FCC688B85FAE8.exe
'!Binary'                           '!InstallExecuteSequence'
 Binary.DefBannerBitmap             '!InstallUISequence'
 Binary.MSVBDPCADLL                 '!Media'
 Binary.NewFldrBtn                  '!ModuleSignature'
 Binary.UpFldrBtn                   '!MsiAssembly'
 Binary.VSDNETCFG                   '!MsiAssemblyName'
 _CFB98006EDAD3916AB3649C68FE29E89  '!ProgId'
'!_Columns'                         '!Property'
'!Component'                        '!RadioButton'
'!Control'                          '!Shortcut'
'!ControlCondition'                 '!_StringData'
'!ControlEvent'                     '!_StringPool'
'!CustomAction'                     '!_Tables'
'!Dialog'                           '!TextStyle'
'!Directory'                        '!UIText'
'!EventMapping'                     '!Upgrade'
'!Extension'                        '!_Validation'
'!Feature'                          '!Verb'
'!FeatureComponents'                '!_VsdLaunchCondition'


These opaque filenames don't help me understand the structure. I'll assume that one of the largest ones actually contains the executable:
Code:
$ ls -lS | head
-rw-r--r-- 1 pino pino 663000 Aug  4 08:36 _CFB98006EDAD3916AB3649C68FE29E89
-rw-r--r-- 1 pino pino 308480 Aug  4 08:36 Binary.MSVBDPCADLL
-rw-r--r-- 1 pino pino 105056 Aug  4 08:36 Binary.DefBannerBitmap
-rw-r--r-- 1 pino pino  45154 Aug  4 08:36 !_StringData
-rw-r--r-- 1 pino pino  11236 Aug  4 08:36 Binary.VSDNETCFG
-rw-r--r-- 1 pino pino  10248 Aug  4 08:36 !_Validation
-rw-r--r-- 1 pino pino   5356 Aug  4 08:36 !Control
-rw-r--r-- 1 pino pino   4952 Aug  4 08:36 !_StringPool
-rw-r--r-- 1 pino pino   4150 Aug  4 08:36 Icon._853F67D554F05449430E7E.exe
$ file _CFB98006EDAD3916AB3649C68FE29E89
_CFB98006EDAD3916AB3649C68FE29E89: Microsoft Cabinet archive data, 663000 bytes, 12 files, at 0x54 "_01299B527B5AC73A8726542470FB71CC", iFolder 0x1 "_05F2D34326FD7BA9900BC09042467735", 6 cffolders, number 1, 9 datablocks, 0x1 compression
$ 7z l _CFB98006EDAD3916AB3649C68FE29E89
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-08-24 05:58:52 .....       274944               _01299B527B5AC73A8726542470FB71CC
2018-08-24 05:59:14 .....        92160               _05F2D34326FD7BA9900BC09042467735
2019-08-04 08:50:44 .....         1113               _0E8D5BE6867142BA88C824E848A44DF4
2019-08-04 08:50:44 .....         7335               _2170D06C2813442491EACBF5C1BB3201
2019-08-04 08:50:44 .....         6764               _29A022B6EE314228BD07A95FFF02AAC0
2018-08-24 05:59:00 .....       148480               _5616854BA49B9742429146EEED13A3C6
2019-08-04 08:50:44 .....         7316               _6802629516074A218C72D553A3E74FED
2019-08-04 10:37:42 .....       388096               _9A90968E7DE1ED1BDE8FAAF5D985BF31
2019-08-04 08:50:44 .....        24576               _A9AC56D0A4C619C24D2B64784FFAB7DC
2018-08-24 05:59:04 .....       495616               _ADD4BCB9277D5C9E405EEAAF846FA4BE
2018-08-24 05:59:08 .....       283136               _DAED96EE0502954FBFAEFAFC2C7DF771
2019-08-04 08:50:44 .....          191               _F91C73742125D3078B90EA1D78DD9BA3
------------------- ----- ------------ ------------  ------------------------

Oh goody, more opaque filenames. Now I'm stuck.

I'd try dual booting into Windows, but this computer never came with an activated copy of Windows. I bought it used off-lease on eBay, and when it arrived, the included copy of Windows 10 could not connect to the volume activation server, presumably because said server wa on a corporate LAN. I looked at the bottom of the case to activate it but discovered that the Certificate of Authenticity containing the product key had been torn off. So on this computer, Debian is all I have. Even on another computer to which I have access, Windows 10 starts up and shuts down so slowly that dual-booting is an ordeal of several minutes. (If you want, I can time it for you.)

How do I go about extracting the executable from the MSI so that I can run it in Mono? Incidentally, I had the same problem of needing .NET Framework in the installer when trying to install Authy for Windows on Linux in order to set up 2-factor authentication on Twitch in order to get my Twitch stream key for use with OBS, and the end result was that I gave up trying to stream on Twitch.

Or how hard would it be to distribute a "portable application" version, which is just the executable in a zipfile? That way I could unzip it and run it using Mono.
Re: FamiStudio NES music editor
by on (#241450)
Look interesting (saw it on twitter too). Don't know about that way of making music compared to trackers but I hope to give it a try someday ;)
Re: FamiStudio NES music editor
by on (#241463)
Very cool. I'll play with it later, but it looks like a really nice addition to the tooling that's available. Thanks for releasing this.
Re: FamiStudio NES music editor
by on (#241464)
tepples wrote:
Or how hard would it be to distribute a "portable application" version, which is just the executable in a zipfile? That way I could unzip it and run it using Mono.


Hi!

I'll be honest I don't know any of the implications of trying to run this on anything other than Windows. Since it uses Direct2D and XAudio2, whcih is very much Windows-only tech, I'm not sure it will work.

That being said, I can definitely post a portable executable, the only thing the installer really does is copy the file, do the .fts file association and create a shortcut in your start menu, all of which you can do yourself.

I'll try to post a ZIP tonight.

-Mat
Re: FamiStudio NES music editor
by on (#241465)
Even though I use Windows, I consider a portable option very welcome, so thanks for doing that. I hope to give your program a try really soon, it looks pretty good!
Re: FamiStudio NES music editor
by on (#241466)
wine, wine, wine...
For when an editor of nes native GNU/linux
Re: FamiStudio NES music editor
by on (#241467)
This looks cool.
Re: FamiStudio NES music editor
by on (#241474)
Quote:
Or how hard would it be to distribute a "portable application" version, which is just the executable in a zipfile? That way I could unzip it and run it using Mono.


I added a Zip file with everything in it in the release section on GitHub (FamiStudio1.0.0-PortableExe.zip). Best of luck.

-Mat
Re: FamiStudio NES music editor
by on (#241855)
koitsu wrote:
do not do a good job explaining what file formats this thing *exports* to, nor does it mention what it natively saves as


Version 1.1.0 was just released with WAV, FamiTracker and (basic) NSF export support. I hope it addresses your concerns.

-Mat
Re: FamiStudio NES music editor
by on (#243115)
FamiStudio 1.2.0 was just released with macOS support and tons of other good stuff.

Image