CoffeeCollider
CoffeeCollider copied to clipboard
[ja] chat
雑談用です
すばらしいと思います。
ありがとうございます。最低限欲しいUGenやメソッド等あればぜひ教えていただきたいです。
すみません、感想になってました...。
フィルター系のUGenがあると音作りの幅が出そうですね>UGen (またMultiOutUGenが実装されているので特に必要ないかもしれませんが、個人的にMixというUGenがとても重宝しています)
ところで、今シンセを生成するとInstanceManagerがNodeのインスタンスをタイムラインにpushする(と言う理解でいいのでしょうか、まちがってたらすみませn)構成のようですが、単にSynthDefファイルを吐き出すという構想はあるでしょうか。また、将来的にSynthDefオブジェクトをDBなどで管理するような機能は予定していますか。
シンセの生成ですが若干修正していて、以下のような流れになっています。
-
SynthDef
で SynthDef のテンプレートが作られる -
template.buid()
で SynthDefファイルに相当する JSONオブジェクト を生成してサーバーに送信 (省略可) .builded.play
で先に送った JSON からシンセノード生成してノードグラフに追加する (サーバー側の処理)
ファイル書き出しはブラウザの制約上むずかしいので考えていなかったですが、 確かになんらかの方法で外部にデータを置いたり読み込める仕組みは便利ですね。
i wanted to take advantage of your .js by directly pulling them from github and the test looks like this: http://sarigama.namaste.jp/cc.html but the result is "SecurityError: The operation is insecure. @ http://mohayonao.github.com/CoffeeCollider/build/coffee-collider.js:1" couldn't it be this easy?
It's impossible. CoffeeCollider use a WebWorker, and it requires same-origin policy. You should put coffee-collider.js into same place as html files.
o i c! would love to know which files i've got to ftp to my site... well will try anyway by putting the whole dir made by unzip ;p
ここjaなんすねw で、取り急ぎ(?)unzipしたものを丸ごとftpして、http://sarigama.namaste.jp/cc/cc.htmlにしてみましたが、SinOSCがcoffee-colliderの中でnot definedになってるかのように言われます。試しに指定パスを調整してhttp://sarigama.namaste.jp/cc/build/cc.html にしてみても、結果は同じですね ブートボタンとか無しに、そこくらいシンプルに鳴らせると、やりたいことは山ほど有るんだけど・・
var cc = new CoffeeCollider();
cc.execute(code).play();
こう書いた場合、確かにエラーでますね。サンプルコードとして書いてあるのに、、
new CoffeeCollider
が(内部的に)終わる前に execute
しているのが原因で、
とりあえずの解決方法としてはユーザーイベントや setTimeout などでワンクッションはさむ方法があります。
var cc = new CoffeeCollider();
button.onclick = function() {
cc.execute(code).play();
};
https://github.com/mohayonao/CoffeeCollider/issues/39
おお! でも、基本的な扱い方は、自分でも「そんな安易な・・」って思ってた方向で、実用出来そうなんですね! iPhoneにはロリポップftp用アプリが有るので、一旦セットアップが済んだら、coffeescriptを埋めた.htmlを編集するだけで、鳴るサイトが作れますね。そうなったら、ほとんどの音響アプリは捨てることになる気がする。制作と発表が直結するし・・ああ、サンプル・ページに既にtweetボタン有るから、素直にソレ使いなよ・・でもあるワケか・・ 取り敢えず、coffeescriptの調整で鳴るまでをやって、報告します
修正しましたPCでなら v0.1.3 で上記コードは実行できます。
しかし iOS の場合はユーザーイベント経由で再生を開始する必要あります。
https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html
Note: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action, such as a tap. Calling noteOn() from an onload event will not play sound.
鳴りました! ディレクトリのトップかbuildの下かは、関係ナイですね! テスト環境はhpのdm1の最安構成に 64ubuntu13.10をインストールしたのの firefox25.0.1とchrome31.0.1650.57です しかし、やはりiPhoneで鳴らないのはイタいので 画像クリックなり・・を追加してみます! 今度のwebaudio(midi)ハッカソンに殴り込む準備が出来た感じです! waitが嫌いなので、tweetからキッカケをもらう仕組みを考えたいです 多謝!
jsに直接、文字列としてccのコードを埋め込んでページにするのは http:///sarigama.namaste.jp/nipples/cctmp.html に、エラー出しまくりながらも出来 iPhoneでも内側の丸クリックで鳴るようになりました か、左右同時に走らせると音が割れますね 単にvolの合計値の影響なのか これから調べるところ
課題として 走らせた後に、外側丸クリックで変数のメッセージ送信したり クリック以前にもTask的な自動遷移もさせたいので もっとデカイ(複数行)文字列にしたいのだけど js的にどう書くのか悩んでいます
というのの解決と さらに 気が付いたら相手がccコード更新してた な、時間差インタープレイを実現するには 任意の外部urlの.coffeeを読むのが必須と思うのですが やっぱsame origin系の壁が有るので xmlHttpRequestなのかFileReaderなのか、jQueryの力を借りるのか 頭を抱えています
もっとデカイ(複数行)文字列にしたいのだけど js的にどう書くのか悩んでいます
JavaScriptで大きな文字列を作るときは
a = "";
a += "line1\n";
a += "line2\n";
b = [
"line1",
"line2"
].join("\n");
CoffeeScriptだと
a = """
line1
line2
"""
こういう書き方があります。
たしかにJavaScriptだと書きにくいので cc.load("test.coffee")
のような感じのファイル読み込み機能があったほうが便利そうですね。ただし、same-origin-policy に関してはウェブのセキュリティの問題なので、JavaScriptだけでは解決することはできません。基本的に同じドメイン下のファイルを読みにいく形になります。
http://gihyo.jp/dev/serial/01/web20sec/0002
デモページでは Gist から読み込みができるようになっていますが、これは GitHub の提供する API を利用することで実現しています。
有難うございます! これでjsでの埋め込み方式は目処が立ちました。 cc.load()にも、激しく期待ですw 「新しい.coffeeアップしたよー」なツイート見たら、 それを所定ディレクトリにwgetでもして、 ダクのリストに追加すれば、 逆に、404系になる危険も無く、 どの道そっちの方式に落ち着くかもですしね。 前回ドタ・キャンしたハッカソン、 参加資格取れたら、是非ともccで殴り込みたしw
UGen実装リクエストを出してみます。ReplaceOutがあれば良いなと思います。なくても大丈夫....
SuperCollider の examples を見ていると Klank
, ReplaceOut
, XOut
, LeakDC
, AudioIn
あたりが抜けているようなので早めに実装するようにします。
cc.load(path, callback)
追加しました。
https://github.com/mohayonao/CoffeeCollider/wiki/01-FrontEnd-Interface#loadpathstring-or-array-callbackfunction
さっそくcc.load()を使い、御thinking.coffeeをまんまパクって http://sarigama.namaste.jp/iDoze/2013122401.html にしてみましたが、chromeとfirefoxで鳴るもmobilesafariで鳴らなくなってしまいましたorz 原因の見当がつかないので、アレコレやってみます。まだまだ、最もシンプルな再生だけなのですがw
あー、load した後に run だとユーザーイベントが外れて下記の制約で動かないのかも..
https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html
Note: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action, such as a tap. Calling noteOn() from an onload event will not play sound.
これだとうまくいくと思うけど、ちょっと気持ち悪いなぁ..
button.onclick = function() {
cc.play().load("code.coffee", function(code) {
cc.run(code);
});
};
鳴りました! iPhoneでも、まだまだ処理パワーに余裕有りそうですね。 firefoxでも。しょっぱなの音の始まり方がスムーズになったよーな気がします。 単純な頭の者としては、 cc.load(code.coffee); cc.run() or cc.play(); だとモロモロと組み立て易いのだけど、 function()が続くのには、 何かjs流儀のワケが有るのでしょうねー。
次はメッセージ送信を含めてみます。
曖昧な表現に、なってしまいました cc.load("code.coffee"); func4click() { cc.play(); // or cc.run(); }; のイメージです
むむ! .play() はcc側を目覚ましてる.standby()みたいな意味なのかな? で.pause()して.reset()して、やっと再度.play()してから.load()で.run()かな?
連投すいません! メッセージ周りを開始しましたが (-> ).play() の中にいる$saに、js側からメッセージ送ったら Message.on "message", ({sa, ri, ga, ma, pa, da, ni})-> では $sa = sa なのでしようか? .set()みたいなのが有るバスですか?
質問がよく分からないですが、
https://github.com/mohayonao/CoffeeCollider/wiki/21-Message
このように動作します。
ダメだ、イロイロ試したのだけどmessage送信周りが上手く行きません
.coffee側で
synth = SynthDef (sa=0.5, ri=0.5, ga=0.5, ma=0.5, pa=0.5, da=0.5, ni=0.5)-> Out.ar(0, SinOsc.ar([50 + ri * 111 + ga * 123 + ma * 135, 50 + pa * 111 + da * 123 + ni * 135]) * (0.3 + 0.4 * sa)) .add()
noiz = Synth(synth).play()
Message.on "message", ({a1, a2, a3, a4, a5, a6, a7})-> noiz.set sa:a1 ri:a2 ga:a3 ma:a4 pa:a5 da:a6 ni:a7
と待機し、.js側から
function two_thang() { ri = ((ga + ma) * 87654) % 1.0; ppl.send("message", {a1:sa, a2:ri, a3:ga, a4:ma, a5:pa, a6:da, a7:ni}); }
とかすると
Uncaught TypeError: number is not a function
と、なってしまいます。 エラー内容からしてjsの基礎をハズしてるだけのようにも・・ですが 音は鳴ってます ここを通過できると.coffee側に集中できるので なんとも残念
引数はカンマで区切る必要があります。
Message.on "message", ({a1, a2, a3, a4, a5, a6, a7})->
noiz.set sa:a1, ri:a2, ga:a3, ma:a4, pa:a5, da:a6, ni:a7
CoffeeScript は a b
と書くと b
を引数に a
関数を呼びますので、a:1 b:2
となっている場合 a: 1({b:2})
と解釈されて "number is not a function" が出ていると思います。
お恥ずかしい! その修正でクリックによる周波数変更、出来るようになりました (-> ).play()の中で宣言した$sa-$niを Message.on "message"の中で $sa = a1 $ri = a2 とする方式でもエラー出ないも伝わらなかったので お手上げかと思いましたが 当面SynthDef方式で遊んでみます 有難うございました!
1/18のハッカソンにccで臨むべくマッシュアップ連携的なjsライブラリを探り始めてます。twitterからのプッシュをSynthDefの引数setに利用するのとかヤリたいものの、api1.1からは認証工程要みたいで、難しそうですね。プッシュされるコンテンツを単純表示更新しながらcoffeeの味も変わって行けばイイので、他のsnsでもイイんですけど・・って独り言を書いてるのは、何かそーゆーメソッドを作ってくれ・・催促してるワケではナイですよw 有ったらweb開発でのcc活用例が大爆発だなぁと・・思ってるだけです
Twitterとの連携のようなものはアプリケーションの例としては面白いかもしれませんが、本体の機能として追加されることはありません。