33
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebAudio APIを使ったオーディオアプリを開発・配布する便利な方法

Last updated at Posted at 2014-12-19

この記事は、Node.js Advent Calendar 2014 - Qiitaの19日目です。

はじめに

最近はWebAudio APIによってJavaScriptで簡単にオーディオアプリが作れるようになりましたが、最終的なアプリ配布を考えるといろいろと面倒です。

  • 複数ブラウザやブラウザバージョンの差異吸収が面倒(開発者サイド)
    • 一時期のdeprecatedなAPI大量発生前後のような現象
    • prefix付きのAudioContext()に対応しないといけない場合がある
    • 同じAudioContextでもブラウザによって挙動が異なる
  • アプリの実行が面倒(利用者サイド)

このような場合に、node.jsChromiumベースのデスクトップアプリ用フレームワークAtom-Shellを使うと、以下なようなメリットがあって楽でした。

  • 環境が固定できて複数ブラウザに対応しなくていいので楽
    • AudioContext()だけを考えればよい
    • atom-shellのweb-kitだけを考えればよい
    • 実行環境に関する面倒な説明が不要
  • node-webkitよりオーディオファイル(.mp3等)の扱いが楽
  • パッケージングも比較的楽
    • 簡単な起動用ファイルを書く程度
  • 起動が楽
    • 実行ファイル(Atom.appなど)を叩くだけ

ということで、以下で簡単に方法を説明します。

Atom-shellダウンロード

  1. npmでatom-shellをダウンロードします。

    mkdir myproj && cd myproj
    npm install atom-shell
    

    公式バイナリをダウンロードしてきても構いません。

アプリ開発

  1. package.jsonを作成します。

    cd node_modules/atom-shell/dist/Atom.app/Contents/Resources
    mkdir app && cd app
    npm init
    

    適当にリターンを押し続けます。

    ※OSXのケースです。WindowsとLinuxはApplication distributionを参照してください。

  2. アプリ起動用ファイルを作成します。

    Atom-shellを起動した時に最初に呼ばれるJavaScriptファイルを作成します。ファイル名はpackage.jsonの中のmainに書かれています。npm initの際に適当にリターンを押していると初期値にindex.jsが入るので、index.jsとします。

    vim index.js
    

    [1]を参考に、index.jsを以下のように編集します。

    var app = require('app'); 
    var BrowserWindow = require('browser-window');  
    
    var mainWindow = null;
    
    app.on('window-all-closed', function() {
    	if (process.platform != 'darwin') {
    		app.quit();
    	}
    });
    
    app.on('ready', function() {
    	// メインウィンドウを作成
    	mainWindow = new BrowserWindow({width: 1000, height: 600});
    	// index.html を読み込む
    	mainWindow.loadUrl('file://' + __dirname + '/index.html');
    	mainWindow.on('closed', function() {
    		mainWindow = null;
    	});
    });
    

    [1]:atom/atom-shell -> Quick start

  3. アプリ格納

    package.jsonと同じディレクトリにindex.htmlを配置します。.js.cssなど関連するファイルも配下のディレクトリに格納します。

    例:

    ├── css
    │   └── xxx.css
    ├── img
    │   └── xxx.png
    ├── js
    │   └── xxx.js
    ├── index.html
    ├── index.js
    └── package.json
    
  4. 以上で終わりです。

アプリ配布

  1. node_modules/atom-shell/dist配下のAtom.appを配布します。OSXとLinuxなら実行ファイルをリネームすることができます。

アプリ実行

  1. Atom.appを起動します。

その他

サンプル

オフラインで動作するJS製のDJミキサーです。atom-shellのおかげで、AudioContext()だけに対応すればよくなりました。

screen1.png

バイナリ

クリスマスも近いということでどうぞ。

追記(12/21): バグ修正 & WinとLinux版も配布しました。

リポジトリ

追記: gulpによる自動化

gulpを使うことでAtom-shellのダウンロードやOSX, Linux, Windows用のバイナリ生成を簡単に自動化できます。新たに記事を投稿したのでgulpを使う場合は以下を見てください。


明日のNode.js Advent Calendar 2014 - Qiitaphiさんです。

33
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?