2013/06/19
Renoid Player でWavExport
RenoidPlayerで作った曲をWAVファイルとしてエクスポートできるようになりました。[WavExport]ボタンを押すと[.wavへのリンク]が表示されますので右クリックメニューなどで保存してください。
※ただし、MacのSafariだと通常の編集や再生はできるのですがWavExport機能が動きません。MacでWavファイル化したい場合はChromeやFirefoxを使用してください。
保存形式は44.1kHzモノラルのWAVファイルです。
これでRenoidPlayerは一応完結したツールとしてボーカルトラック制作に使えない事もなくなったのですが、需要はありますか?

Posted by g200kg : 5:14 PM : PermaLink
2013/06/16
RenoidPlayer GUI更新
RenoidPlayerのGUIを一新して、ピアノロールの編集関係の機能をいろいろ追加しました。とりあえずそれほど不自由なく使える状態になったと思います。後、本当なら英語版とかを準備したい所だけど、この手のやつは簡単には言語展開できないのがこまったもんです。
RenoidPlayerがやってるのは単なる音韻の切り貼りなのでレベルは違いますが、このところCeVIOが話題になったりと歌唱合成関係も賑やかな感じになってきましたけど、その分ちょっとコモディティ感もでてきた気がします。差別化のためにリアルな人間を目指すという方向性はわかりやすくてまだまだやるべき事はあるのだと思いますが、その内人間と判別がつかない所まで来た時にどんな使い方ができるかというのは意外と難しかったりするんじゃないかと思ったり。
てか、歌唱合成って「不気味の谷」的にはどういうフェーズなんだろうね。これから谷に差し掛かるのか既に谷の中でその違和感が個性として受け入れられているのかすら良くわからん。

Posted by g200kg : 8:30 AM : PermaLink
2013/06/13
RenoidPlayerアップデート
見てのとおりですが、RenoidPlayerをピアノロールで編集できるようにしました。
MMLとピアノロールを切り替えてどちらでも使えます。
なんか結構使いやすいのではないかという気がします。オーディオで書き出せたりすると本格的に使えるかも知れませんが需要はあるのでしょうか? ブラウザ上で動いて何がうれしいのかという問題はあるかも知れませんが、今のところはこういうものがブラウザ上で動く、という事自体が面白いですよね。
※ こちらの環境だけの問題かも知れませんが、Chromeでブラウザのハードウェアアクセラレーションを有効していると稀にピアノロールが表示されないという現象が起こる事がありました。アクセラレーションを切ると起こらなくなりますので、ビデオドライバー周りなどかも知れませんが、回避策を模索中です。おかしくなった時はとりあえずページをリロードすると回復します。
Posted by g200kg : 6:22 PM : PermaLink
2013/06/10
WebSequencerがボーカルを手に入れた!
さて、ここんところいじりまわしているRenoid Playerですが、WebSequencer上で使えるようになりました。
本当はピアノロールエディタを使えるようにしようかと思ったのだけど、いろいろ面倒な事になりそうなのでその前段階として、WebSequencerからWebMidiLink経由でRenoidプレーヤにMIDIシンクを送って同期させています。WebSequencerにRenoidをロードしてメロディを歌詞付きMMLで入力すると、WebSequencerの演奏に同期してRenoidが歌います。
Renoidの方はボイスファイルとしてRenoise-gateのサトーさん制作の4種類に加えてUTAU音源にもボイスデータを提供されている「朝音ボウ」がメニューから選択できるようになっています。(追記:許諾をいただきましたので更に「ほのか鳴(めい)」ボイスも追加しました)。
(実はMIDIのStart/Continue/StopとSongPositionPointerだけ見ててMIDIクロックは送るだけは送っているのだけど見てません。その内実装するかも知れませんが両方とも1台のPC内で動作しているので、サンプルを数えていればずれていく事も無いしそれほど意味がないかも、と思ったりしています)
※Chrome/Firefox/Safariで動作します。IEだと動作しません。

Posted by g200kg : 2:22 PM : PermaLink
2013/06/07
Renoid Player on Browser
今年の年明けに一度書いたのですが、Renoise-gateのサトーさんが、バーチャルシンガー「Renoid」という仕組みを提案されています。
簡単に言えばひらがなの各音を収録してドラムマップのようにMIDIの各ノートに割り当て、発音した音は別トラックのMIDIからピッチコレクターを使ってメロディーを付けるという方法で、特別なソフトがなくてもバーチャルシンガーに歌を歌わせる事ができる、というものです。
現在、Renoidのページではサトーさん自身制作の4種類のボイスのほかにUTAU向けの音源を提供されている方による音源も公開されています。
RenoidのフォーマットはRenoise専用のフォーマットであるXRNIだけでなく、SoundFont (SF2) 形式のものも準備されていますので、Renoiseに限らずサウンドフォントプレーヤーとピッチコレクターさえあれば歌わせる事ができます。
とここまでが前回も書いた事なのですが、今回このRenoidファイルを使ってブラウザ上で音を出すテストページを作りました。
まだ実験的なものですがとりあえず触って音が出るようにはなっています。残念ながらフォルマント修正の処理ができていないためピッチの変化によってかなり妙な音になりますが、今後の課題という事にしておきます (対応しました)。
この「Renoid Player」は「歌詞付きMML」でメロディを指定します。例えば「O3T120ABCDE」のようなMMLにひらがなを埋め込んで「O3T120あAいBうCえDおE」という風に指定します。ひらがなはMMLの音色切り替えコマンドだと考えれば良いです。(追記:また、ひらがなはまとめて「O3T120あいうえおABCDE」という風にあらかじめ指定する事もできます)
Renoid Playerが使用しているのは サトーさん制作の SoundFont形式のRenoidファイルです。また、UTAU音源の「ほのか鳴」「朝音ボウ」をRenoid化したものもRenoise-gateで配布されていますのでダウンロードすればローカルファイルを指定して読み込ませる事ができます。
SoundFontのパーサーはRenoid専用で最小限の項目しか読んでいません。ちゃんとSoundFontを扱いたい場合は先日@y_imaya氏が発表されたサウンドフォントプレーヤーの方が良いかと思います。
Renoid Player サンプル曲

Posted by g200kg : 8:59 AM : PermaLink
2013/06/03
JavaScriptによるSFプレーヤー・ソース公開
@y_imaya氏のJavaScriptによるサウンドフォントプレーヤーのソースが公開されました。
先日アナウンスされた時にはまだ一部デバッグの途中という事でminifyされた状態だったのですが、今回は完全な形での公開です。WebMidiLinkにも対応しています。これでブラウザでサウンドフォントを扱う道が開けた感じですねー。
@y_imaya氏の該当ブログ記事
Web Audio API で Sound Font を使った標準 MIDI ファイルの再生
GitHub
プレーヤー部分:https://github.com/gree/smfplayer.js
シンセ部分:https://github.com/gree/sf2synth.js

Posted by g200kg : 7:24 PM : PermaLink
2013/05/31
百裂拳カメラ
WebRTCをいじってて凄くくだらないものを作ってしまった。
百裂拳カメラ
下のような画像が作成できます。千手観音やエグザイルでも可。
* WebRTCのgetUserMediaでPCに接続されているカメラの画像を取り込みます。
* 今の所サポートされているブラウザはChromeまたはFirefoxのみです。
* PCにカメラが接続されている事が必要です(最近のノートPCだと大抵内蔵されています)。
* 起動するとカメラを使用してよいかメッセージが出ますので「許可」(Firefoxでは「デバイスの共有」)を選択してください。
* [Start] ボタンを押すと2秒毎に写真を取って合成します(デフォルトでは6枚)。
* 作成した画像は[Download]のリンクからJPEG形式で保存できます。

Posted by g200kg : 8:17 AM : PermaLink
2013/05/27
asm.js は本当に速いのか?
現在 Firefox aurora に搭載されている asm.js についてとにかく「爆速」というような記事を良く見かけるのですが、asm.js を使ったFFTモジュールを書いてみたのだけどどうも思ったような性能が出ないなあ、という事で先日記事を書きました。
asm.jsでFFTしてみた、のだが。その時の結果がこちら
| 時間 | |
|---|---|
| Firefox ASM,10000回 | 4156 |
| Firefox NoASM,10000回 | 6009 |
| Chrome 10000回 | 4859 |
| IE10 10000回 | 12164 |
この結果から、確かにFirefoxとしてはasm.jsが有効になる事で速くはなっているのだけど、asm.js 非対応のChromeと大して変わらない(場合によっては負ける)、というのがわざわざ文法を変えてまで改善した結果としては物足りない、という所ですね。
なお、このテストは実用的なFFTモジュールを目指していてデータの入出力部に通常のJavascriptとのインターフェースのために非asm.jsの処理が多少残っていますので、純粋なベンチマークならばもう少しasm.jsでの改善具合は良くなると思います。
しかしながら、触ってみた実感と世の中の爆速という評判との乖離に釈然としないものを感じていたわけです。1つは比較対象が何であるかという点だと思います。これは数日前の記事。
Surprise! Mozilla can produce near-native performance on the Web
ここに出ている数値自体は割合納得できました。near-nativeという言い方ですが、通常のJavaScriptに対して2倍程度の性能って所でしょうか。ただ比較対象の他のブラウザとしては現時点明らかに勝てるであろうIEしか出ていません。
という事で、今回は竹内関数(Tarai Function)でのベンチマークをとってみます。Tarai Function は下のリストのような関数で、数値演算でもなくほとんどが関数呼び出しの速度に依存するのですが、これはFirefoxにとってはかなり有利な条件だと思います。
function tarai_n(x,y,z) {
if(x <= y)
return y;
return tarai_n(tarai_n(x-1,y,z),tarai_n(y-1,z,x),tarai_n(z-1,x,y));
}
JavaScriptエンジンにはそれぞれ得意不得意があります。私が使っている限りでの一般的な使用においては、平均的にはFirefoxよりChromeの方がちょっと速いかなと思っているのですが、関数呼び出しについてはFirefoxが速いです。
使用したバージョンは:
Firefox は 23.0a2(2013-05-26)
Chrome は 28.0.1500.20
IEは10.0.9200.16576
です。

使用したベンチマークはこちら:Tarai function benchmark
- RegularJS : 通常のJavaScript文法で書いたもの
- ASM/NoASM int : asm.js文法でintに型付けして書いたもの (x|0 という奴)
- ASM/NoASM double : asm.js文法でdoubleに型付けして書いたもの (+x という奴)
- NoASM は "use asm"; を付けていないので asm.js が有効になっていません
| 時間 | ||
|---|---|---|
| Firefox | RegularJS tarai(14,7,0) | 3131 |
| ASM double tarai(14,7,0) | 6027 | |
| ASM int tarai(14,7,0) | 3312 | |
| NoASM double tarai(14,7,0) | 8312 | |
| NoASM int tarai(14,7,0) | 8333 | |
| Chrome | RegularJS tarai(14,7,0) | 4745 |
| NoASM double tarai(14,7,0) | 6101 | |
| NoASM int tarai(14,7,0) | 6004 | |
| IE10 | RegularJS tarai(14,7,0) | 7681 |
| NoASM double tarai(14,7,0) | 8138 | |
| NoASM int tarai(14,7,0) | 9339 | |
こんな感じになりました。まず、RegularJSで比べるとFirefox 3131、Chrome 4745。やっぱりFirefoxは関数呼び出しに強いです。そして、asm.js の文法に沿った書き方にしてみると、NoASM double Firefox 8312、Chrome 6101。あれ、逆転しちゃいました。+ 演算子とかに対するペナルティがFirefoxだと結構大きいですね。しかしここから、Firefoxは asm.js によるパフォーマンス改善があって ASM double で6027まで改善します。
つまり
Chrome 4745 => 6101 に対し、Firefoxは 3131 => 8312 => 6027
という推移。ほぼChromeに並びます。
そして更に、asm.jsでintに型付けすると
Chromeは 4745 => 6004、に対しFirefoxは 3131 => 8333 => 3312
という推移。asm.js対応ソースでChromeの倍くらいの速度が出ます。
とは言うものの、これではFirefox自身のRegularJSの数値と変わらんではないか...。asm.js文法によるペナルティを取り戻しただけという...。
文法に制約を設けて最適化するのだから競争するべき相手は、「他のブラウザ」と「本来の文法」という2つがありますよね。今このあたりがごっちゃになっているような気がします。対Chromeで考えるとFirefoxがもともと優位な傾向だった処理で優位。しかし本来のJavaScriptと比べるともともと優位だった処理ではあまり優位性が出ない、という板ばさみ的状況。
asm.jsが明らかに優位性を発揮できるのは C++をemscriptenで変換したコードだけって言う事なのかなあ。元がC++とかなら元々JavaScriptでゴリゴリにチューンしたコードと比較される事はないし元のネイティブに対して何倍という言い方になるものね。emscriptenが吐くコードを精査したわけではないけど無駄があってそのオーバーヘッドを解消する、みたいなストーリーは成立しやすそうです。メインターゲットは確かにそこだとは思うのだけどね。
とりあえずわかった事は asm.js の double/int 間の差は結構大きい。可能なかぎりintに型付けすべし、という事。
手書きasm.jsに爆速の道は残されているのか!? (続く...のか?)Posted by g200kg : 6:52 AM : PermaLink
2013/05/25
書道やろうぜ(Fakeだけどな!)
Twitterの方とかで時々落書きしているFake書道のやり方をデモビデオにしてみた。
Windows標準のペイントだけでできるよ。
(FakeShodoのテーマ曲つくりました)
http://www.youtube.com/watch?v=SV4c3KT82Yo
Posted by g200kg : 10:46 PM : PermaLink
2013/05/23
Javascriptで書かれたSoundFontプレーヤー + WebMidiLink
数日前、@y_imaya氏がJavascriptで書かれたSoundFontによるMIDIプレーヤーを発表したのですが、これが実はシーケンサーとプレーヤーが独立していてWebMidiLinkでドライブしているという素晴らしい構造でした。という事でプレーヤー部は単独でWebMidiLink対応シンセとしてWebMidiLinkのシンセリストに登録させていただきました。
WebSequencer でリストから[SoundFont Player]を選んで[Synth-1]~[Synth-4]のどこかに読み込むと使用できるようになります。
なお、SoundFont自体が結構なサイズですので読み込みに多少時間がかかります。
JavascriptベースのアプリでSoundFontも使えるっていうのは、結構強力な武器を手に入れた感じです。今はまだコードを少し整理している途中だそうですが、近々SoundFont周りもライブラリとして公開を考えているとの事で期待期待。
WebSequencerで適当に打ち込んだデモ (Chrome推奨、url長いです):
SoundFont Player + WebSequencer デモ
@y_imaya氏のページはこちら:
http://blog.livedoor.jp/imaya_js/
Posted by g200kg : 12:14 AM : PermaLink
2013/05/21
FirefoxのWebAudioAPIのサポート状況
現在 Firefox Aurora にデフォルトでオンの状態で入っています。
もうすぐFirefoxでも普通にWebAudioAPIが使えるようになるのは喜ばしい事なのですが、サポート状況が完全ではないため、問題が発生するケースがありそうです。
そんなに完全にチェックしたわけではないのですが、ちょっと触ってみた所、次のような気を付けるべき点があります。
こんな感じですので、今の所ノードの機能を色々使った複雑なアプリを作るのは少し厳しいかも知れませんが、とりあえずBufferにデータを読み込んでBufferSourceで鳴らしてフィルターを掛けてみる、などさわりの部分を確認するくらいは可能かと思います。
WebAudioAPI解説のページのサンプルは残念ながらFirefoxでまだサポートされていないOscillatorを各所で使っている事もあって、ほとんどがそのままでは動きませんでした。
やっかいなのはAudioContextがプリフィックスなしで入っているため、そのままではpolyfillにフォールバックしない事です。折角有効になったFirefoxのWebAudioAPIを使いたいのはやまやまですが、Firefoxの場合は強制的にフォールバックしてWAAPISimで動かすような変更を現在加えています。
WAAPISimの読み込みの前に次の1行を指定します。これでAudioContextが生きていてもオシレーターが使えない環境の場合には強制的にPolyfillで置き換えを行います。
<script type="text/javascript">waapisimForceSimWhenLackOsc=1;</script>
Posted by g200kg : 9:19 PM : PermaLink
2013/05/20
asm.jsでFFTしてみた、のだが。
最近一部で話題の"asm.js"。
GIGAZINE:「JavaScriptがネイティブアプリに近い実行速度まで高速化」
たとえばこんな記事があります↑。すんごく期待してしまったわけですよ、これがFirefox22で搭載されると。
特徴としては
- Nativeで書いた時の1/2程度の速度になる
- Javascriptのサブセットなので非対応ブラウザでもそのまま動く
- DOM関連は駄目だけど純粋な数値計算で威力を発揮する
既存のコードが恩恵を受けられる事はほとんどないだろう、とか使い道には色々議論があるようなんですが、これはWebAudio関連の処理と相性が良いに違いない!
て事で正式には6月リリースですがNightlyビルドではもう使えるらしいので、試してみました。ある程度実用になりそうなあたりを狙ってFFTをやらせてみます。
で、書いたのがこちら:asmjstest.html
2048ポイントのFFTを変換/逆変換を繰り返して速度を見ます。元波形は矩形波で変換後の波形(緑、元の矩形波と同じはず)とスペクトル(赤)が表示されます。 FirefoxのNightly以外のブラウザはasm.js非対応なので [ASM]と[NoASM]は同じ結果になります。
結果:
| 時間 | |
|---|---|
| Firefox ASM,10000回 | 4156 |
| Firefox NoASM,10000回 | 6009 |
| Chrome 10000回 | 4859 |
| IE10 10000回 | 12164 |
あれ、うん...。速い事は速いのだけど。なんかもっとこう爆速な感じを期待してたのだが?
処理にもよるでしょうけど、せいぜい通常のJavascriptの2倍程度の速度を狙う感じでしょうか。stdlib経由で数値関数なんかも使えるのですが、オーバーヘッドが大きいようでできれば使用を避けた方が良いように思います。こうやれば、もっと速くなるよ!! 的なノウハウがないものかと模索してるんですが、なかなかうまくいかんです。
爆速だったら入出力の方法とか色々整備したい所だけど、ちょっとモチベーションが下がりました。せっかく書いたのでおいておきますけど。複素数入力で、正規化する/しないのフラグがあります。汎用性を持たせようとしてたので通常の配列からデータを渡せるようにして、ついでにここでスクランブルまでやっています。
https://github.com/g200kg/Fft-asm.js
なお、asm.jsの仕様はここ http://asmjs.org/spec/latest/
正直結構書くにくいです。簡単に説明すると、
- asm.js化したい関数やファイルに "use asm"; と書く
- 変数は数値のみで文字列やオブジェクトは使えない
- 数値は var i=0; var r=0.0; のように常に型を意識しながら書く
- 配列は通常コードと共有するArrayBuffer、1つのみを使いまわす
他にもたくさん制限があるのでコンソールでasm.js化のエラーが出てないか確認しながら書く感じになります。
「結局 asm.js は名前のせいで過大な期待を煽りすぎなのだと思う。冷静に考えれば、普通のJSの2倍くらいの速度が出るのは凄い事かも知れん」、となんとなくフォローしておく。嫌いじゃないんだよ、この手のやつ。
Posted by g200kg : 3:03 PM : PermaLink
2013/05/15
WebAudioAPI解説:convolver編、panner編
WebAudioAPI解説に「コンボルバーの使い方」と「パンナーの使い方」を追加しました。


Posted by g200kg : 2:26 PM : PermaLink
g200kg


Jpn
Eng
RSS Feed (日本語エントリ)
g200kg on Twitter
g200kg on Facebook



