Giter VIP home page Giter VIP logo

saa1099tracker's Introduction

SAA1099Tracker

SAA1099Tracker is a progressive web application of chiptune music tracker for Philips SAA 1099 soundchip with 6 channels which was used in these 8bit computers:

  • integrated in Sam Coupรฉ
  • sound interface MIF 85 for Tesla PMD 85 (an 8-bit personal micro-computer produced in eighties of twentieth century in former Czechoslovakia)
  • few sound interfaces for ZX-Spectrum

NOTE: for more info, please see doc folder or wiki-pages...

Version

2.0.6

Tech

  • VSCode - code editing redefined
  • Electron - cross platform desktop apps with JavaScript, HTML, and CSS
  • TypeScript - syntactic sugar for JavaScript
  • Bootstrap - great UI boilerplate for modern web apps
  • jQuery - you know... write less, do more

License

MIT

saa1099tracker's People

Contributors

dependabot[bot] avatar mborik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

saa1099tracker's Issues

Implement Undo operations

๐Ÿ“ Feature description

  • Module change history operations are still missing

๐Ÿ’ก Expectations

  • Undo & Redo operations should work properly

โš’๏ธ Solution

  • Depends on results of #14

๐Ÿ”ฆ Additional context

Revisit implementation of commands `7`, `8` and `9`

๐Ÿ“ Feature description

  • Tracker internal Player has very unclear and questionable implementation of 7xx and 9xx commands.
  • Shockingly, it doesn't support command 8xx.
[7xx] - ORNAMENT OFFSET
        xx - offset (in ticks)

[8xx] - DELAY SAMPLE
        xx - delay (in ticks)

[9xx] - SAMPLE OFFSET
        xx - offset (in ticks)

๐Ÿ’ก Expectations

  • Player should behave 8xx command just by delaying of Sample & Ornament activation by given ticks.
  • 7xx and 9xx commands should re-read values after offsetting in Sample or Ornament.

โš’๏ธ Solution

  • All Player state registers from previous line(s) should continue without any changes (like on empty line) until the command phase counter will round to zero. Then it activates given Sample or Ornament.

๐Ÿ”ฆ Additional context

  • Results and implementation of this issue defines how it should be implemented in compiled player.

BUG: Input validation fatal errors

๐Ÿ› Describe the bug

  • Unclear why but all number inputs hasn't secured and validated entered values!

๐Ÿ•น Steps to reproduce the behavior

  1. Go to any number input, f.e. Sample number in Sample editor
  2. Blur or enter
  3. See error

๐Ÿค– Expected behavior

  • There should be unified input validation, with fallbacks and expected range of value
  • Ordinary parseInt or +X is definitely not enough!

๐Ÿ“ Additional context

Improve clipboard functions

๐Ÿ“ Feature description

  • Clipboard functions in tracklist should be improved to increase the comfort of chiptuners.

๐Ÿ’ก Expectations

  • New keyboard shortcut Mod+Shift+V should be introduced to paste a clipboard partially
  • Small dialog would be opened where user chooses between note, sample number, ornament number, command or command data
  • Paste will replace only chosen portions of each trackline in clipboard

โš’๏ธ Solution

  • Implement Paste selection dialog:
    image

๐Ÿ”ฆ Additional context

  • refactor manager.ts to navigator.clipboard API with ClipboardItem in already defined format

TECH: Research diff in module

๐Ÿ“ Description

  • Research a way how to store something like diff for any change in module

๐Ÿ’ก Benefits

  • Preparation for implementation of Undo/Redo operations

โš’๏ธ Solution and additional context

BUG: Songs made in 2021 and earlier fail to open

All of the old songs I've made on an older version of SAA1099Tracker no longer open at all, with the newest file being from the 5th of January 2021.
In addition, I get an error:
Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded contains characters outside of the Latin1 range.

I looked in the Local Storage via Google Chrome's DevTools and noticed that the stmf***-dat keys contain a bunch of weird gibberish characters, mostly squares, Chinese characters and other miscellaneous symbols. I compared it to a much newer song file and it looks to be Base64 encoded instead.

I tried converting one of the old files to Base64 to no avail, getting an incorrect header check error instead. I also have no idea where the Local Storage is stored on my computer so that I could back them up elsewhere.

๐Ÿ–ฅ Desktop

  • OS: Windows 10
  • Browser: Chrome
  • Version: 109.0.5414.74 (Official Build)

BUG: Fix keyboard malfunction

๐Ÿ› Describe the bug

  • Keyboard reactions are stuck after leaving documentation modal dialog

๐Ÿ•น Steps to reproduce the behavior

  1. Go to 'Help' menu, choose some documentation
  2. Click and open modal dialog
  3. Leave dialog and try to use keyboard shortcuts to navigate in tracklist or windows
  4. Broke ๐Ÿ˜ตโ€๐Ÿ’ซ

โš’๏ธ Solution and additional context

  • Check globalKeyState.inDialog state in onCmdShowDocumentation

BUG: Storing/reverting undo in pattern after delete/insert trackline is buggy

๐Ÿ› Describe the bug

  • Stored Undo states containing pattern fragments has some bug when reading/writing that data from/to pattern. Some notes resulting into R-- instead of given note.
  • After deeper investigation there are some notes vs. releases displaced so undo is very dangerous.

๐Ÿ“ Additional context

๐Ÿ”ฆ Screenshots

image

BUG: import E-Tracker file issues

๐Ÿ› Describe the bug

Using 2.03, when importing Ocean Loader V1, the decompiled and compiled tunes have (different) issues

๐Ÿ•น Steps to reproduce the behavior

  1. import Ocean Loader v1
  2. play
  3. around position 22 the arpeggios are incorrect

If the .cop file is first decompiled with SimCoupe and the resulting .m file is imported, that has different issues. I have attached both files in the zip.
Ocean Loader v1.zip

Implement B-command

๐Ÿ“ Feature description

  • Tracker internal Player doesn't support command B:
[Bxx] - BREAK CURRENT CHANNEL-PATTERN AND LOOP FROM LINE
        xx - trackline of current channel-pattern
             (less than current trackline)

๐Ÿ’ก Expectations

  • Player should behave on B-command as was defined (repeat within the channel-pattern)
  • Compiler is able to interpret Bxx command already. #10

โš’๏ธ Solution

  • Implement B-command here
  • Figure out how to interpret repeating of data within channel-pattern visually (greyed out?)

๐Ÿ”ฆ Additional context

Implement import of E-Tracker format

๐Ÿ“ Feature description

  • E-Tracker is well known music tracker on Sam Coupรฉ and there are still active composers.

๐Ÿ’ก Expectations

  • To support a migration of composers to our SAA1099Tracker we should implement import of their modules.

โš’๏ธ Solution

  • E-Tracker module import was already implemented in early iteration of this project (then called MIF85Tracker) here.
  • We should just rewrite it into TypeScript and enable the menu item.
  • Refactor all imports into src/tracker/file.import.ts

๐Ÿ”ฆ Additional context

BUG: Refresh Load/Save dialog file list after save operation

๐Ÿ› Describe the bug

  • After the new file was created, Load/Save dialogs didn't show it

๐Ÿ•น Steps to reproduce the behavior

  1. Open Tracker
  2. Click on New and make some song or import
  3. Click on Save As, fill the File name and apply to save
  4. Click on Open and file not exists
  5. After refresh file appears

๐Ÿค– Expected behavior

  • Do the refresh of files in local storage after save

Implement Redo operations

๐Ÿ“ Feature description

  • follow up task to #15 to implement Redo operations

๐Ÿ’ก Expectations

  • Redo button and shortcuts should work

โš’๏ธ Solution

  • Every undoing should generate redo() function into historyEntry which revert changes to state before undo.

๐Ÿ”ฆ Additional context

Install dependencies

Hi,
(Sorry for the newbie question - I mostly work in c++ and don't do a lot of user interface coding.)

I've downloaded the source, with a view towards possibly having a go at some file import/export functions. I have run 'npm install' and 'bower install' - are these the correct steps and sufficient? Unfortunately I get errors when I try to build with 'grunt':

Running "less:styles" (less) task
>> NameError: variable @dl-horizontal-breakpoint is undefined in bower_components/bootstrap/less/type.less on line 214, column 22:
>> 213 
>> 214   @media (min-width: @dl-horizontal-breakpoint) {
>> 215     dt {
Warning: Error compiling styles/bootstrap.less Use --force to continue.

Aborted due to warnings.

Have I got an appropriate version of the dependencies?

Alternatively, the ReadMe mentions you use IDE from Cloud9 - do you have a workspace there that I could just clone?

BUG: Paste special - Notes doesn't work

๐Ÿ› Describe the bug

  • Unable to paste just notes from clipboard via "Paste Special" (Ctrl+Shift+V)

๐Ÿ•น Steps to reproduce the behavior

  1. Select block
  2. Copy to clipboard (Ctrl+C)
  3. Move to different column/pattern/channel/position (doesn't matter)
  4. Double click for deselect (for sure)
  5. Activate "Paste Special" function (Ctrl+Shift+V)
  6. Select only Notes column
  7. Nothing happen

๐Ÿค– Expected behavior

  • Notes should be replaced by content of clipboard

๐Ÿ”ฆ Screenshots

  • N/A

๐Ÿ“ Additional context

VGM export

.VGM is my favorite soundchip-logging format of all time, and I want a VGM export so I can listen to the demo songs with foo_gep.

TECH: Players `v1`, `v2` and `v3`

โ˜๏ธ Placeholder task for rombor who working on all players for Z80 and i8080 architectures.

๐Ÿ“ Description

  • Finishing players of type:
    • v1 - missing command A (volume slide)
    • v2 - missing command 3 (glissando to given note) and all delay/offset sample/ornament commands (6..9)
    • v3 - lowest priority due to lenghty player with vibrato table
  • Implement another optimization for data size when nothing just note was changed
    (using the last free bit in pattern-line data)
  • Fixed bug in release of releasable sample

๐Ÿ’ก Benefits

  • All commands would be supported and all compiler options enabled.

demosong Maaorava

I'm happy for this to stay in here, but can you put "(MNEMOtech)" after the filename of demosong Maaorava - I believe this version originated as my conversion of a MOD file which I uploaded to sam-users a while back.
Also I think "Lizard" is by Ziutek.

TECH: Refactor Player related files

๐Ÿ“ Description

  • src/player directory containing files which were not properly formatted yet
  • Some of the files was not properly named to capital-case

๐Ÿ’ก Benefits

  • Readability
  • Clean code
  • Uniform code style

โš’๏ธ Solution and additional context

  • Convert indentation to 2-space
  • Try to properly rename the files within git repo
    (git config core.ignorecase false + git mv)

TECH: Refactor keyboard handling

๐Ÿ“ Description

  • Take an inspiration from Bassoon tracker key-handling here, to fix all inconveniences while controlling of our tracker.

๐Ÿ’ก Benefits

  • Stable and fully responsible keyboard in any situation.

โš’๏ธ Solution and additional context

  • Test all Cmd/Ctrl/Alt keys as single modifier to get rid of all issues on Mac.
  • Add fallback to Insert key as Ctrl+I and figure out on how to fallback Numpad shortkeys.

Implement Export song as text

๐Ÿ“ Feature description

  • Tracker could has a function to export whole song data to plain text formatted in same way how tracklist is rendered.

๐Ÿ’ก Expectations

  • There would be new item in Export menu "Export to plain text...".

โš’๏ธ Solution

  • Commit 6abc50c enables us to make this export feasible and very easy to implement because of text representation of tracklines within the Pattern object.

๐Ÿ”ฆ Additional context

Suggested format:

SAA1099Tracker export of song "MAAORAVA" by "MNEMOtech":

Position 1, speed: 6
                                                                                        
  00  C-4 I.22 ...  A-1 2.11 ...  A-2 1.11 ...  A-3 G388 ...  --- .... ...  --- .... ...
  01  --- .... ...  --- .... ...  --- .... ...  --- ..AA ...  --- .... ...  --- .... ...
  02  --- .... ...  A-1 2.22 ...  A-2 1.22 ...  --- ..AA ...  --- .... ...  --- .... ...
  03  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  04  C-4 I.44 ...  A-1 2.33 ...  A-2 1.33 ...  --- ..BB ...  --- .... ...  --- .... ...
  05  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  06  --- .... ...  A-1 2.44 ...  A-2 1.44 ...  --- .... ...  --- .... ...  --- .... ...
  07  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  08  C-4 I.66 ...  A-1 2.55 ...  A-2 1.55 ...  --- ..CC ...  --- .... ...  --- .... ...
  09  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  0A  --- .... ...  A-1 2.66 ...  A-2 1.66 ...  --- .... ...  --- .... ...  --- .... ...
  0B  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  0C  C-4 I.88 ...  A-1 2.77 ...  A-2 1.77 ...  --- ..DD ...  --- .... ...  --- .... ...
  0D  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  0E  --- .... ...  A-1 2.88 ...  A-2 1.88 ...  --- .... ...  --- .... ...  --- .... ...
  0F  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  10  C-4 I.AA ...  A-1 2.99 ...  A-2 1.99 ...  --- ..EE ...  --- .... ...  --- .... ...
  11  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  12  --- .... ...  A-1 2.AA ...  A-2 1.AA ...  --- .... ...  --- .... ...  --- .... ...
  13  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  14  C-4 I.CC ...  A-1 2.BB ...  A-2 1.BB ...  --- .... ...  --- .... ...  --- .... ...
  15  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  16  --- .... ...  A-1 2.CC ...  A-2 1.CC ...  --- .... ...  --- .... ...  --- .... ...
  17  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  18  C-4 I.EE ...  A-1 2.DD ...  A-2 1.DD ...  --- .... ...  --- .... ...  --- .... ...
  19  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  1A  C-4 I.77 ...  A-1 2.EE ...  A-2 1.EE ...  --- .... ...  --- .... ...  --- .... ...
  1B  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...
  1C  C-4 H.FF ...  G-1 6.FF ...  G-2 5.FF ...  G-4 G4FF ...  G-7 8.FF E16  G-7 8.BB ...
  1D  C-4 H.AA ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- ..CC ...
  1E  C-4 H.FF ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- ..DD ...
  1F  C-4 H... ...  --- .... ...  --- .... ...  --- .... ...  --- .... ...  --- ..EE ...

Export byte data for SAATunes project

๐Ÿ“ Feature description

There is no clear or concise way to export data such that it can be imported and played with the following SAA1099 + Arduino DIY project:

๐Ÿ’ก Expectations

It would be great if it were possible to export audio data in this format as it is an excellent first step project to creating hardware that includes the SAA1099 audio chip. Since this format is effectively a simple mapping, the technical complexity aught to be less than that of a file format such as vgm.

โš’๏ธ Solution

Creating an additional export method would allow the data to be exported from SAA1099Tracker and added to a header file, to be included via compilation and upload to the Arduino project.

๐Ÿ”ฆ Additional context

The SAA1099 sound chip has been selected to be used for an upcoming Z80 homebrew project: https://github.com/gpaluk/pip80 The ability to export data from SAA1099Tracker to be included in the pip80 project would make it an invaluable production tool for pip80 and other new hardware projects and would also create a foundation for a pip80 export target, once the hardware is fully defined.

[EDIT]
Upon further inspection, I notice that the player code of SAATunes is working more like a simple Midi player with no support for instruments/envelopes etc. At this point, it might be worth stating my original goal: 'To get a Demo track such as "High color" to play on the SAATunes DIY device'.

I would be happy enough to write the necessary Sketch code to make this work but now it's clear that code could / should handle an already existing file format and therefore not a responsibility of SAA1099Tracker. Help with understanding the file formats exported by SAA1099Tracker would be very useful and therefore I wonder if these are documented somewhere?

[EXTRA] The pip80 project will use a Z80 CPU (clocked at 16 MHz). I did notice that SAA1099Tracker comes with binary export support for Z80 based devices such as the Sam Coupe and so binary export support for the pip80 could still remain relevant.

BUG: Closing tab during playback loops playback buffer

Using Chrome 56 on Windows 10.

  1. import any demo song
  2. start playback
  3. close tab

-> the "Do you want to leave this site? Changes you made may not be saved." dialog pops up and playback loops on the contents of the playback buffer.

Update of handling on other browsers:

Edge: wow! - playback and tracker continue in background
Firefox: nice - playback continues, tracker does not
Internet Explorer: I can't even start... :-)

BUG: Export native STMF exports JSON file

๐Ÿ› Describe the bug

Exported STMF file is not binary, but JSON file with title, author, samples, etc. fields.

๐Ÿ•น Steps to reproduce the behavior

  1. Go to https://saa1099tracker.borik.net/
  2. Load demosong, i.e. Orava II
  3. Export to native STMF format and save file
  4. View saved file - it's JSON file.

๐Ÿค– Expected behavior

Saved STMF is binary file described in Help > Export data format.

๐Ÿ–ฅ Desktop

  • Browser: Chrome 108.0.5359.125
  • Version: 2.0.4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.