Package: tja2fumen
tja2fumen is a tool that allows you to convert TJA charts (.tja) to fumen charts (.bin).[!IMPORTANT]
tja2fumen is a tool designed formod developers. It allows developers to import TJA charts into official games using Taiko's binary file format (.bin). If you are not a mod developer, and you simply want to play TJAs on Taiko no Tatsujin PC, please install and runTakoTako.[!NOTE]
TakoTako 3.2.0 includes an older, flawed tool calledtja2bin.exe. If you have downloaded TakoTako 3.2.0, you should replace the oldtja2bin.exewith the newtja2fumen.exe. This will ensure that your TJAs get converted accurately.Featurestja2fumen is designed to be an open source alternative to the closed source tja2bin tool that has been floating around various Discord servers. tja2fumen fixes several outstanding tja2bin issues, while providing an open source codebase to modify and learn from.Command line tool to convert.tjachart files to official fumen.binfiles.Decodes official fumen.binfiles (to inspect metadata and note data).Fix.binfiles that were previously converted bytja2bin(WIP, see#65).Uses strong development practices (thorough test suite with example charts, type checking).Provides an open source resource for the Taiko no Tatsujin fumen file format.UsageTJA conversionTo convert a.tjafile to.binfiles, simply downloadtja2fumen.exeand run:tja2fumen.exe file.tjaDecoding fumen charts in Python scriptsIf you want to explore the song structure of existing.binfiles or.tjafiles using Python scripts, run:pip install tja2fumenThen, you can use tja2fumen's Python API as follows:fromtja2fumen.parsersimportparse_fumen,parse_tjafumen=parse_fumen("path/to/fumen_file.bin")tja=parse_tja("path/to/tja_file.tja")Please refer tosrc/__init__.pyfor further example usage of the Python API.TJA SupportIf there is an unsupported feature that you would like support for, please make a request byopening a new issue.Supported file formatsLegend:✅= Fully supported,❌= Not supportedtja 2 fumentja 2 binCommentUTF-8 (with BOM)✅❌UTF-8 (without BOM)✅️✅Shift-JIS✅✅Supported metadataLegend:✅= Fully supported,⚪️= Ignored,⚠️= Incorrect behavior,❌= Not supportedtja 2 fumentja 2 binCommentBPM:,OFFSET:✅✅TITLE:,SUBTITLE:,WAVE:,DEMOSTART:, etc.⚪️⚪️The only global metadata needed areBPM:andOFFSET:.COURSE:,LEVEL:,BALLOON:,SCOREINIT:,SCOREDIFF:✅✅STYLE:(Single,Double)✅❌EXAM1:,GAUGEINCR:,TOTAL:, etc.⚪️⚪️Other simulator-specific metadata fields are currently ignored.Supported notes/commandsLegend:✅= Fully supported,⚪️= Ignored,⚠️= Incorrect behavior,❌= Not supportedtja 2 fumentja 2 binComment0,1,2,3,4✅⚠️tja2fumen will write proper SENOTES (ド, コ, ドン, カ, カッ), see#41.5008,,6008,,7008,✅✅9008,✅⚠️9000,9008,⚪️⚠️Double Kusudama note treated as 1 drumroll by tja2fumen, but 2 overlapping drumrolls by tja2bin.A,B✅❌Multiplayer "hands" notes are valid in fumens, but unrecognized by tja2bin.C,D,E,F,G,H,I⚠️❌Replaced by normal notes/rolls in tja2fumen.#START,#END✅✅#START P1,#START P2✅❌#BPMCHANGE✅⚠️See#16#MEASURE✅✅#SCROLL✅✅#GOGOSTART,#GOGOEND✅✅#BARLINEOFF,#BARLINEON✅✅#DELAY✅❌See#27#BRANCHSTART,#BRANCHEND✅✅#N,#E,#M✅✅#SECTION⚠️❌See#53,#27#LEVELHOLD✅❌#BMSCROLL,#LYRIC,#DIRECTION, etc.⚪️❌Other simulator-specific chart commands are currently ignored.Reporting bugsIf you've found a.tjafile that tja2fumen converts incorrectly, pleaseopen a new issueon the tja2fumen repo.It is especially important that you attach the song files to the issue. You can do this by adding the song files to a.zip(Select files -> Right click -> "Send to" -> "Compressed (zipped) folder"), and then uploading the.zipto the issue. This greatly helps me to reproduce and fix any issues.You can also message me directly on Discord (_vivaria) if you don't have a GitHub account, and I will take care of making an issue for you. :)Building on top of tja2fumenIf you are a developer looking to add tja2fumen to your project, you have two options:For non-Python projects, you can downloadtja2fumen.exeand call it via a system call.For Python projects, you can install tja2fumen viapip install tja2fumen.tja2fumen uses a very permissable license (MIT License). You are free to distribute and modify tja2fumen, but please include a copy of the MIT License alongside thetja2fumen.exeexecutable if you copy it into your project.AttributionThe fumen-parsing code in this project is based off of a modified copy of thereadFumen()function from thefumen2osu.pyfound in @KatieFrogs'fumen-toolsproject.The TJA-parsing code in this project is a Python translation of theparseTJA.jsfile from @WHMHammer'stja-tools.sakurada0291, DDDDDD, U-ros, and others in the Discord for helping to test tja2fumen. :)