種別[statuses] cocolog:79037946
セクションJRF のひとこと
日時2014年02月25日
元URLhttp://jrf.cocolog-nifty.com/statuses/2014/02/firef.html

Firefox 系の Audio Data を使ってたのを Web Audio…

Firefox 系の Audio Data を使ってたのを Web Audio API 系にして、Chrome では出る音が鳴らない。mozWriteAudio にアプリが渡してたのが、Short 値で、それを 0x7fff で割って Float にしたら解決した。
JRF 2014年2月25日

…たぶん。Short 値ってのはヤマカンで、どうも音量の問題らしいと気付いていろいろ試す中で、渡されてるデータの min と max を調べると Short の範囲になってたから、やってみたら、だいたいうまく鳴ってるようす。

JRF 2014年2月25日

「アプリ」は、ファミコンのエミュレータなんでちょっと問題があるかもしれないけど、でも、サンプルの ROM は私が 作ったやつなんで、OK だと思う。

《JSNES: A JavaScript NES emulator》
http://jrf.cocolog-nifty.com/archive/test/jsnes_test.html

↑の Sample1 のほうは、"HELLO, WORLD!" と表示して 800Hz ぐらいの音(三角波)を断続的に鳴らすだけの NES ROM。

JRF 2014年2月25日

JSNES の元は↓。で、そこから行ける github から2014年2月13日にダウンロードしてきたものを grunt で make した jsnes.min.js を私のサイトに置いて使ってる。

《JSNES: A JavaScript NES emulator - Ben Firshman》
http://fir.sh/projects/jsnes/
JRF 2014年2月25日

で↑では DynamicAudio っていう同じ Ben Firshman という人が作ったライブラリを使ってたんだけど、どうもそれが私の環境だとエラーを出すんで、JSNES で使ってる部分だけを私が作り直したのが、↓。

《pseudo_dynamicaudio.js》
http://jrf.cocolog-nifty.com/archive/javascript/pseudo_dynamicaudio.js

JRF 2014年2月25日

(今回のバージョン固有のリンク。)
http://jrf.cocolog-nifty.com/archive/javascript/pseudo_dynamicaudio-20140225.js

オリジナルの github は↓。

《bfirsh/dynamicaudio.js - GitHub》
https://github.com/bfirsh/dynamicaudio.js/

JRF 2014年2月25日

上の sample1.nes は基本↓から取ってきたのをかなりいじったもの。(現在製作中の「ブツ」のキャラとかも入ってたりする。)(^^;

《NES研究室》
http://hp.vector.co.jp/authors/VA042397/nes/sample.html
>基本的に著作権は放棄しています。好きなところを好きな分だけ利用してください。<
JRF 2014年2月25日

で、psg_test.nes はほぼ完全に自作と言えるものだけど、JSNES 上でやるとキーがなかなか入力できなくて、そのあたり改善の余地がありそう。

上の jsnes_test.html とかも含めて、この先もいろいろテストのためにいじるつもりなので、来たときに動かなかったりしたらすみません。

いちおう、ローカルで開発するのがメインだけど、他のマシンとかネット上での JavaScript の違いとか見ないとダメだから…。個人開発してる「素人」の限界ってことで一つ赦してつかーさいということで…。

JRF 2014年2月25日

修正 「出る音が鳴らない。」→「出る音が Firefox だと鳴らない。」

JRF 2014年2月25日

……。

あと、今回の開発はまともにやったらロングスパンになり過ぎて辛いので、上みたいにできたものから基本的に公開していく方針。

「キャラを使ったブツ」もだいたいできてるんだけど、それは1Pと2Pのコントローラを同時に使う前提なので、それ用に JSNES の UI は最低もうちょっと作り込まないと公開しても意味ないだろうから…。

JRF 2014年2月25日

sample1.nes のほうは微妙だけど、psg_test.nes のほうはソースの asm もその「ブツ」を公開するときに含めるつもり。そこに付けなかったら sample1.asm は、ここで後日公開すると思う。

JRF 2014年2月25日

……。

おっと、最初の話、Chrome でも、もちろん 0x7fff で割る前は鳴りはしたけど、まともになってなかった。createGainNode でゲインを 0.1 とかにしても鳴り続けるのに 0 にすると鳴りがおさまることで原因に気付いた。

そもそも Chrome でもちゃんと鳴ってないのはエミュレータの問題だと思ってた。(もちろん、違った。)

JRF 2014年2月25日

今ネットで読める Web Audio API の解説の多くは webkitAudioContext で説明してて、それが Firefox だと AudioContext 使わないとだめなのに、Chrome では AudioContext ではまだダメ。じゃあ、Firefox がまともな実装に改めたのかというと、createGainNode すら実装されてないらしい。

とてもメンドくさい。

JRF 2014年2月25日

……。

いちおう sample1のソースは↓に上げておいた。(psg_test.nes はそうしないけど)これに関してはバイナリ面で、上のと同じになるようテストレベルで使った不必要なコードも残して今回はアーカイブした。

《sample1-20140225.shar》
http://jrf.cocolog-nifty.com/archive/collabo/meme/sample1-20140225.shar

JRF 2014年2月25日

で、不必要なやつを削ったのも↓に用意しておいた。jsnes_test.html で使う sample1.nes もそちらに差し換えといた。

《sample1-20140225_2.shar》
http://jrf.cocolog-nifty.com/archive/collabo/meme/sample1-20140225_2.shar

JRF 2014年2月25日

……。

あと、JSNES は GPL v3 なんだよね…。ちょっとライセンス的に厳しい面があるんだが、まぁ、pseudo_dynamicaudio.js 的なラッパーコードなら問題ないと思う。

ただ、jsnes.min.js については「バイナリ」と判断されるか微妙なとこなので、一応、私が持ってきたソースもこのサイトにアーカイブしておいた。

JRF 2014年2月25日

《jsnes-master-20140213.zip》
http://jrf.cocolog-nifty.com/archive/collabo/gnu/jsnes-master-20140213.zip

JRF 2014年2月25日

あとは、まぁ、一応、GPL の原文もアーカイブ。

《GNU GENERAL PUBLIC LICENSE Version 3》
http://jrf.cocolog-nifty.com/archive/collabo/gnu/gpl-3.0.txt

《Version 2》
http://jrf.cocolog-nifty.com/archive/collabo/gnu/gpl-2.0.txt

《GNU 一般公衆利用許諾契約書 v2 (UTF8化)》
http://jrf.cocolog-nifty.com/archive/collabo/gnu/gpl-2.0.ja.utf8.txt

JRF 2014年2月25日

本家の URI は↓。

《GNU一般公衆ライセンス v3.0 - GNUプロジェクト - フリーソフトウェアファウンデーション》
https://www.gnu.org/copyleft/gpl.html

JRF 2014年2月25日

私は GPL に関して、v3 になる前ぐらいに意見を書いている。

《GPL のここが嫌い [ JRF の私見:雑記 ]》
http://jrf.cocolog-nifty.com/column/2006/02/post_36.html

JRF 2014年2月25日

Trackbacks:

《cocolog:79241255》 from JRF のひとこと
http://jrf.cocolog-nifty.com/statuses/2014/03/post-6a9b.html

ファミコン版『手旗信号』。ネット配布中。 

受信: 2014-03-30 23:35:40 (JST)

後方参照 (2 件)