FamiStudio NES music editor

Discuss NSF files, FamiTracker, MML tools, or anything else related to NES music.

Moderator: Moderators

User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

FamiStudio NES music editor

Post by bleubleu »

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
Last edited by bleubleu on Fri Oct 18, 2019 8:22 am, edited 6 times in total.
User avatar
koitsu
Posts: 4201
Joined: Sun Sep 19, 2004 9:28 pm
Location: A world gone mad

Re: FamiStudio NES music editor

Post by koitsu »

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.
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

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
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: FamiStudio NES music editor

Post by tepples »

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: Select all

$ 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: Select all

$ 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: Select all

$ 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.
User avatar
Banshaku
Posts: 2417
Joined: Tue Jun 24, 2008 8:38 pm
Location: Japan
Contact:

Re: FamiStudio NES music editor

Post by Banshaku »

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 ;)
User avatar
gauauu
Posts: 779
Joined: Sat Jan 09, 2016 9:21 pm
Location: Central Illinois, USA
Contact:

Re: FamiStudio NES music editor

Post by gauauu »

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.
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

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
User avatar
tokumaru
Posts: 12427
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: FamiStudio NES music editor

Post by tokumaru »

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!
User avatar
bazza
Posts: 94
Joined: Fri Nov 24, 2017 1:36 pm
Location: Argentina
Contact:

Re: FamiStudio NES music editor

Post by bazza »

wine, wine, wine...
For when an editor of nes native GNU/linux
User avatar
rainwarrior
Posts: 8731
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: FamiStudio NES music editor

Post by rainwarrior »

This looks cool.
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

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
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

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
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

FamiStudio 1.2.0 was just released with macOS support and tons of other good stuff.

Image
User avatar
the_zi
Posts: 8
Joined: Thu Mar 22, 2018 5:44 am
Location: New York
Contact:

Re: FamiStudio NES music editor

Post by the_zi »

Love it- thank you for all of your work! It's nice to be able to work on my mac and not parallels/famitracker... :evil:

It's amazing you have the same export functionality as FT, but can I put in an import request? Even if it's from a .txt file?

Thanks again and keep up the great work!
Bleep Bop Records
8 Bit Music For The 21st Century
User avatar
bleubleu
Posts: 108
Joined: Wed Apr 04, 2018 7:29 pm
Location: Montreal, Canada

Re: FamiStudio NES music editor

Post by bleubleu »

Haha thanks for the support.

At the risk of sounding arrogant, have you tried to simply open a Famitracker TXT file? ;) It's been supported since the very first version! To be fair, the Mac version makes it a little less clear since you don't see the list of supported extensions.

That being said, keep in mind that it will only import things that it knows about. If you use a strange effect FamiStudio doesn't yet support it will simply ignore it. But for basic stuff (notes, instruments) it will work. At every version more things will be supported.

Let me know if you run into any issues. There aren't a lot of Mac users out there and I'm sure there are tons of bugs to fix.

-Mat
Post Reply