Git Product home page Git Product logo

jam.net's People

Contributors

junielkatarn avatar maxton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

jam.net's Issues

Audio exporting

Now that the ADPCM is decoding properly, there should be audio export features. I have some ideas:

  • Right click a song/songs in the library -> Export audio as -> (FLAC / WAV / AIFF / OGG)
  • In the Score window, add a menubar, which has an Export option

Change contentCache and settings locations.

Current location for the contentCache file is %LOCALAPPDATA%., which is too generic.

Move it to %LOCALAPPDATA%\Jam.NET\contentCache.xml

Additionally, the User settings (currently only the location of the content folder) should be moved to the same place instead of using the built-in user settings functionality.

So,

  • %LOCALAPPDATA%\Jam.NET\contentCache.xml
    and
  • %LOCALAPPDATA%\Jam.NET\settings.xml

Add speed control

SoundTouch is a great library for this - it's LGPL licensed, and has .NET bindings available.

Fix wave stream cutoff

If a song plays to the end and goes back to the start, (or if you seek near the end, seek back, and wait for however many seconds the end would have arrived in), no data seems to be coming out of the wave streams anymore (the click track is still generating clicks, though). Look into why this is happening (maybe the ADPCM decoders aren't getting re-wound for some strange reason)?

Server connectivity

Could be useful to be able to connect to a Jammit server should it or a clone ever re-appear.

Some API endpoints:

Username/device check

https://[store.server]/scripts/ddidcheck.php?uname=[username]&evje=[device id]
Called before getting user info.
Returns: 0, 1, or 2.
0 : success.
1 : Incorrect username
2 : Account has been deauthorized for the device

Get user info

https://[store.server]/jammit_app_data?username=[username]&password=[password]
Returns a bunch of stuff separated by ~~ (at least 31 items). If that's not what is returned, then the password was invalid.
Subtract 32 from the 31st item to get the Jammit ID (account ID).

Login?

https://[store.server]/ddmailregister.php?jammitid=[account id]
Called after getting user info but the return value, if any, doesn't seem to be used at all.

Deauthorization

https://[store.server]/scripts/ddtkill.php?vje=[account id]&evje=[device id]

List of content UUIDS

https://[server]/scripts/ddtv1.php?vje=[account id]&evje=[device id]&bld=[build]&typ=[os version]
Returns uuids for the given account/device combo, separated by ^^ for some reason. These are then downloaded from https://[store.server]/sites/default/files/[uuid].zip.
After the uuids, there is %% followed by something else.
If there are none(?), it returns "noid". If there are too many authorized devices, it returns "*3max"

Add mobile support.

It would be very convenient for the app to run in mobile platforms, such as Windows Universal iOS and Android.
I already have ongoing work on this at https://github.com/JunielKatarn/Jam.NET/tree/mobile.

Considerations:

  • The UI must be fully re-implemented. The current .NET Desktop (Windows.Forms) code can't be reused on mobile.
  • Xamarin.Forms provides a viable framework to code once and deploy to the three mobile platforms.
  • Xamarin.Forms relies on PCLs (stripped-down .NET framework libraries, which have many limitations in terms of API access as opposed to regular .NET).

Parse section data and beat map

I think the Song class should handle this when you instantiate it.

Beatmap can probably just be parsed to a list of beats.
Beat structure:

  • Time (double)
  • IsDownbeat (bool)
  • IsGhostbeat (bool)

Sections to a list of sections:

  • Beat index (or better, a reference to the beat)
  • Number (int) -- what is this?
  • Type (parsed to a string).

Add peak meters to the faders.

I imagine this will be done by the mixer keeping track of the peak voltage per track over some interval, and the fader polling that the same way the transport polls the current time.

Allow selection of sheetmusic

Right now only the first notation file is displayed. As a user I want to be able to select between parts and between notation and tablature. I guess this can be done in the score control itself, or maybe in the containing form.

Add Linux/OSX support

This should run in Mono, in theory, except for the audio API. NAudio relies on WASAPI and/or other windows-only libraries to get audio out of the speakers. Look into another audio library. I think maybe PortAudio would be best, I think it has .NET bindings somewhere, otherwise, possible BASS.NET, although that is non-free. If anyone knows of some other audio APIs, I am all ears.

Add looping

Once #7 and #8 are implemented we can add looping to the app.

Show info at top of score

In the original client, the title of the song, the songwriters, the tempo, and the copyright are displayed at the top of the score.

This should be pretty simple to add in now that the score is centered both vertically and horizontally in the window.

Screenshot from the C++ windows client:
image

Refactor Song* classes and related items

In order to allow for different formats (i.e., loose files as well as .zip content files), there needs to be loose coupling between Song and its interface.

  • Create ISong with Song's public interface
  • Move Song to ZipSong
  • Create FolderSong for extracted files
  • Change SongMeta and the Library to refer to songs by their filename/path in addition to their GUID
  • Create a SongLoader static factory class that will return an ISong for a given SongMeta

Add click track

As far as I can tell, this is generated using the info from beats.plist. So, once #7 is implemented it should be pretty simple?

Score view: Animation!

This is a large feature. The end result is that we have an animated score like the original app.

  • Reverse-engineer the format of nowline.nodes
  • Write a parser
  • Implement scrolling
  • Implement the "now line" on the score

I'm not sure how well this will end up working, as it depends on the latency of NAudio. Probably some latency compensation will be required. Although, the original app was pretty bad at this anyway...

Make it less ugly

It's pretty ugly overall right now. It would be nice if it were not so ugly.

Improve transport controls

  • Fix the time slider to allow seeking while the song is playing.
  • Add jump forward/backward buttons to move quickly between sections.

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.