Giter Club home page Giter Club logo

bemuse's Introduction

Bemuse 〜beat☆music☆sequence〜

open-source web-based online rhythm game

CircleCI Codecov twitter
Quality Gate Status Maintainability Rating
Docs

Bemuse is an open-source, online, web-based rhythm game. It plays songs in BMS format (See: Introduction to BMS).

It is recommended to play this game on Google Chrome.

Table of contents:

Video Demo

Video Demo

Quick Tour

Music selection

  • You can play online songs instantly in your browser.

  • You can play custom songs by dragging a folder containing BMS files into this screen. There are over 5,000 songs published in BMS format by the community worldwide. You can find them using BMS Search.

  • There’s an online internet ranking system. You can compete with other players and see your rank online.

  • It has an insane tutorial.

Gameplay

  • Keyboard mode (7-keys). Play along the music with your keyboard.

  • Fully key-sounded. Each note has its own sound. The music will be affected by your game play.

  • Player together with friends using party mode. It helps you start the game at the exact same time.

  • Multiple difficulties. Each song has multiple difficulties to accommodate every player skill levels.

  • Adjustable speed. You can adjust the speed (spacing) of the notes to make it easy-to-sightread. This does not affect the speed of the song; lowering the speed causes notes to become more dense on-screen.

  • Scoring and grading system. Master the song to get the S grade (score over 500000).

Gameplay

  • BMS mode (7-keys + turntable). You can play using an IIDX controller or MIDI controller.

  • HD video support. Some songs will have a background animation in high-definition (720p).

  • Adjustable play area size. If the gameplay area is too long, you can adjust the cover it to make the play area more easy-to-sightread.

  • Early/Late indicator. Bemuse will tell you if you press the note too early or too late.

Options

  • Adjustable panel position. You can position the note panel on either side of the screen, or put it at the center.

  • Adjustable turntable position. You can put turntable on the left or on the right (BMS mode only).

  • Audio latency compensation. Some systems may have audio latency. Bemuse contains a calibration system to compensate for the audio latency.

Play now at https://bemuse.ninja/.

Technology

  • The web application is powered by React and Redux.

  • The game engine is powered by PixiJS.

Development

Install Node.js

# Install Rush
npm install --global @microsoft/rush

# Clone Bemuse
git clone https://github.com/bemusic/bemuse.git

# Enter the main repository
cd bemuse

# Install the dependencies
rush update

# Prepare all sub-projects
rush build --to-except bemuse

# Start development server
rush dev

For more information, check out the Developer Guide.

Note: Online ranking features are not available.

Sub-projects

This repository holds the code for other sub-projects, which are available for use on npm.

Project name Badge Description
bms npm JavaScript BMS parser
bmson npm JavaScript bmson parser
bemuse-tools npm Tools for hosting your own music server.
bemuse-indexer npm Library for scanning a directory for BMS/bmson files and generate a metadata.
bemuse-notechart npm Library for loading a notechart for use in game.

How to contribute

Our amazing contributors🌟

License

AGPLv3. Note that this license only applies to the main Bemuse project, not the sub-projects, which has its own license terms (mostly MIT).

bemuse's People

Contributors

aboudicheng avatar aj-ya avatar akibot avatar alhimik45 avatar azhang66 avatar cenox avatar coppertine avatar cxong avatar dependabot[bot] avatar dimitrov-d avatar doublevcodes avatar dtinth avatar fresult avatar greenkeeperio-bot avatar jkemperman avatar mikuroxina avatar mslourens avatar mugabe avatar nachanok avatar pnkapadia64 avatar release-train[bot] avatar resir014 avatar sb-decoder avatar sikgyu avatar thakkaryash94 avatar todo-actions[bot] avatar tsfreddie avatar vishal5251 avatar vtno avatar yahooeny 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bemuse's Issues

Logo

Need some logo for the game…

CONTRIBUTING.md

With commit message format. For good example, see Angular's CONTRIBUTING.md.

io.js

Wow! io.js comes with many ES6 features by default. When it's released let's try switching to io.js!

Versioning

Let's start with v0.0.0 and follow semantic versioning!

Add CLAHub

To prevent legal issues in contributed code.

prfun

prfun add bunches of useful methods to promises, so I can be less verbose.

The sampling master

Existing Web Audio API abstractions I found (SoundJS used in the prototype version, and blip) are not fit for the use case of BEMUSE. Therefore, a custom sampler is needed.

Ideas:

Unloading Sounds

In the prototype version, the game is a separate page, therefore there is no problem when about unloading sound.

However, in this version, it will be a single-page application. Samples from BMS files should be unloaded in order to save memory.

Playing Blobs

Existing solutions mainly plays sounds from URLs. Since we will be loading samples from .bemuse files, they are embedded in blobs.

Contexts

To easily load and garbage collect sounds, a notion of contexts is introduced. A context can hold samples, and all audio nodes associated with it. When it is destroyed, all samples loaded inside that context are released. All audio nodes are disconnected.

The sampling master

Eventually, this Web Audio abstraction shall be extracted into its own project, maybe call it "sampling-master".

Fix bug with Travis

Currently travis doesn't build bemuse because of some problem with Esprima parser.

Have to update deps and try building locally.

Production build testing

Since we have different environment for unit tests (NODE_ENV=test) and building for production (NODE_ENV=production), we should also test if the production build works.

Ditch Jasmine and use Mocha

Jasmine's asynchonous tests support, even though it is improved in 2.0 (I'm very excited about that: no more runs and waitFor mess), but compared to Mocha, is still horrible.

We generally have two ways of signifying asynchronous operation state (successful or failure)…

The first is Node-style callback — callback(err) with null err to signify successful state. The second is to return a Promise.

Well, Jasmine uses neither! It expects you to call Jasmine's expect() function, and then call a callback. This is just unintuitive.

Therefore, it will be replaced with Mocha. Since Mocha is also more friendly towards Node.js.

Publish to GitHub pages!

Make the default route "coming-soon" and display coming soon message. And publish it to GitHub pages.

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.