cocolog:79037946
Firefox 系の Audio Data を使ってたのを Web Audio API 系にして、Chrome では出る音が鳴らない。mozWriteAudio にアプリが渡してたのが、Short 値で、それを 0x7fff で割って Float にしたら解決した。 (JRF 7528)
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。
JRF2014年2月25日2541
JSNES の元は↓。で、そこから行ける github から2014年2月13日にダウンロードしてきたものを grunt で make した jsnes.min.js を私のサイトに置いて使ってる。
《JSNES: A JavaScript NES emulator - Ben Firshman》
http://fir.sh/projects/jsnes/
JRF2014年2月25日7407
で↑では DynamicAudio っていう同じ Ben Firshman という人が作ったライブラリを使ってたんだけど、どうもそれが私の環境だとエラーを出すんで、JSNES で使ってる部分だけを私が作り直したのが、↓。
《pseudo_dynamicaudio.js》
http://jrf.cocolog-nifty.com/archive/javascript/pseudo_dynamicaudio.js
JRF2014年2月25日4769
(今回のバージョン固有のリンク。)
http://jrf.cocolog-nifty.com/archive/javascript/pseudo_dynamicaudio-20140225.js
オリジナルの github は↓。
《bfirsh/dynamicaudio.js - GitHub》
https://github.com/bfirsh/dynamicaudio.js/
JRF2014年2月25日3859
上の sample1.nes は基本↓から取ってきたのをかなりいじったもの。(現在製作中の「ブツ」のキャラとかも入ってたりする。)(^^;
《NES研究室》
http://hp.vector.co.jp/authors/VA042397/nes/sample.html
>基本的に著作権は放棄しています。好きなところを好きな分だけ利用してください。<
JRF2014年2月25日9239
で、psg_test.nes はほぼ完全に自作と言えるものだけど、JSNES 上でやるとキーがなかなか入力できなくて、そのあたり改善の余地がありそう。
上の jsnes_test.html とかも含めて、この先もいろいろテストのためにいじるつもりなので、来たときに動かなかったりしたらすみません。
いちおう、ローカルで開発するのがメインだけど、他のマシンとかネット上での JavaScript の違いとか見ないとダメだから…。個人開発してる「素人」の限界ってことで一つ赦してつかーさいということで…。
JRF2014年2月25日9194
修正 「出る音が鳴らない。」→「出る音が Firefox だと鳴らない。」
JRF2014年2月25日9690
……。
あと、今回の開発はまともにやったらロングスパンになり過ぎて辛いので、上みたいにできたものから基本的に公開していく方針。
「キャラを使ったブツ」もだいたいできてるんだけど、それは1Pと2Pのコントローラを同時に使う前提なので、それ用に JSNES の UI は最低もうちょっと作り込まないと公開しても意味ないだろうから…。
JRF2014年2月25日6374
sample1.nes のほうは微妙だけど、psg_test.nes のほうはソースの asm もその「ブツ」を公開するときに含めるつもり。そこに付けなかったら sample1.asm は、ここで後日公開すると思う。
JRF2014年2月25日7854
……。
おっと、最初の話、Chrome でも、もちろん 0x7fff で割る前は鳴りはしたけど、まともになってなかった。createGainNode でゲインを 0.1 とかにしても鳴り続けるのに 0 にすると鳴りがおさまることで原因に気付いた。
そもそも Chrome でもちゃんと鳴ってないのはエミュレータの問題だと思ってた。(もちろん、違った。)
JRF2014年2月25日7476
今ネットで読める Web Audio API の解説の多くは webkitAudioContext で説明してて、それが Firefox だと AudioContext 使わないとだめなのに、Chrome では AudioContext ではまだダメ。じゃあ、Firefox がまともな実装に改めたのかというと、createGainNode すら実装されてないらしい。
とてもメンドくさい。
JRF2014年2月25日4434
……。
いちおう sample1のソースは↓に上げておいた。(psg_test.nes はそうしないけど)これに関してはバイナリ面で、上のと同じになるようテストレベルで使った不必要なコードも残して今回はアーカイブした。
《sample1-20140225.shar》
http://jrf.cocolog-nifty.com/archive/collabo/meme/sample1-20140225.shar
JRF2014年2月25日8623
で、不必要なやつを削ったのも↓に用意しておいた。jsnes_test.html で使う sample1.nes もそちらに差し換えといた。
《sample1-20140225_2.shar》
http://jrf.cocolog-nifty.com/archive/collabo/meme/sample1-20140225_2.shar
JRF2014年2月25日2314
……。
あと、JSNES は GPL v3 なんだよね…。ちょっとライセンス的に厳しい面があるんだが、まぁ、pseudo_dynamicaudio.js 的なラッパーコードなら問題ないと思う。
ただ、jsnes.min.js については「バイナリ」と判断されるか微妙なとこなので、一応、私が持ってきたソースもこのサイトにアーカイブしておいた。
JRF2014年2月25日6480
《jsnes-master-20140213.zip》
http://jrf.cocolog-nifty.com/archive/collabo/gnu/jsnes-master-20140213.zip
JRF2014年2月25日3537
あとは、まぁ、一応、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
JRF2014年2月25日2429
本家の URI は↓。
《GNU一般公衆ライセンス v3.0 - GNUプロジェクト - フリーソフトウェアファウンデーション》
https://www.gnu.org/copyleft/gpl.html
JRF2014年2月25日5216
私は GPL に関して、v3 になる前ぐらいに意見を書いている。
《GPL のここが嫌い [ JRF の私見:雑記 ]》
http://jrf.cocolog-nifty.com/column/2006/02/post_36.html
JRF2014年2月25日8939
…たぶん。Short 値ってのはヤマカンで、どうも音量の問題らしいと気付いていろいろ試す中で、渡されてるデータの min と max を調べると Short の範囲になってたから、やってみたら、だいたいうまく鳴ってるようす。
JRF2014年2月25日0059