Posted at

ブラウザで動くBMSプレイヤーBemuseのサーバを建てる

More than 1 year has passed since last update.

MacでもBMSがやりたーい!でもWineは面倒だ…というときに便利なのが、ブラウザで動くBMSプレイヤー Bemuse です。ブラウザ上とは思えないほどぬるぬる動いてくれます。

しかし、ブラウザ上であるが故に ローカルに保存してあるBMS譜面が使えない というのが大きな欠点です。ChromeであればBMSフォルダをドロップしてプレイすることも可能とはいえ、Bemuseを開くたびにドロップするのはつらい。面倒。

そこでBemuseにもともと入っているプリセット曲について調べると、プリセット曲の譜面は公式サーバから配信されているようです。zipやrarをいちいち落とさせるわけにもいかないので、.bemuseというフォーマットでサイズを抑えているとか。なんだかすごそう(小並感)

ソースを見ると 自分でサーバを指定することもできる とわかったので、好きな曲だけを入れたサーバを建ててやりましょう!!

公式のドキュメント(英語)

読める人はこれで十分だと思います。以下はここに書いてあることに少しメモを加えただけです。

ここからはMacを対象にしますが、Windowsでの方法も上記URLにあります。Linuxでも普通にできるはずです。


準備


  1. Homebrew, Node.jsをインストールする

  2. SoX(音声フォーマットの変換に使うライブラリ)のインストール



    1. $ brew remove sox (すでにインストールしていた場合)


    2. $ brew install sox --with-libvorbis (oggファイルを再生できるようにvorbisをつける)




譜面の変換

サーバから配信したい譜面をまとめて1つのディレクトリ(bmsとします)に入れておきます。そして以下を実行すると、bemuse-tools packでフォルダ内の譜面を変換してくれます。

$ npm install -g bemuse-tools

$ cd (bmsディレクトリ)

$ for di in `find . -maxdepth 1 -type d`; do
bemuse-tools pack $di
done

$ bemuse-tools index #=> 楽曲のインデックスを作成します


サーバの起動

公式プレイヤーのからローカルの譜面/jsonを読ませるためには CORS の設定をしておきます。ヘッダにAccess-Control-Allow-Origin: *を付けておきましょう。

とりあえず動かすだけならこれを動かしてください(Pythonわからないから適当にググッて書いたしそもそも3系ですらない)。

#!/usr/bin/env python

import SimpleHTTPServer
import SocketServer

class CORSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def end_headers(self):
self.send_header("Access-Control-Allow-Origin", "*")
SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)

if __name__ == '__main__':
SocketServer.TCPServer(("", 8081), CORSHTTPRequestHandler).serve_forever()

(サーバのURLは localhost:8081 になります)


遊ぶ!!

http://bemuse.ninja/?BEMUSE_MUSIC_SERVER=(サーバのURL)にアクセスすると自分の追加した譜面がドロップ操作なしで遊べます!