CoffeeCollider icon indicating copy to clipboard operation
CoffeeCollider copied to clipboard

[ja] chat

Open mohayonao opened this issue 11 years ago • 35 comments

雑談用です

mohayonao avatar Oct 28 '13 00:10 mohayonao

すばらしいと思います。

moxuse avatar Nov 02 '13 02:11 moxuse

ありがとうございます。最低限欲しいUGenやメソッド等あればぜひ教えていただきたいです。

mohayonao avatar Nov 02 '13 03:11 mohayonao

すみません、感想になってました...。

フィルター系のUGenがあると音作りの幅が出そうですね>UGen (またMultiOutUGenが実装されているので特に必要ないかもしれませんが、個人的にMixというUGenがとても重宝しています)

ところで、今シンセを生成するとInstanceManagerがNodeのインスタンスをタイムラインにpushする(と言う理解でいいのでしょうか、まちがってたらすみませn)構成のようですが、単にSynthDefファイルを吐き出すという構想はあるでしょうか。また、将来的にSynthDefオブジェクトをDBなどで管理するような機能は予定していますか。

moxuse avatar Nov 06 '13 02:11 moxuse

シンセの生成ですが若干修正していて、以下のような流れになっています。

  • SynthDef で SynthDef のテンプレートが作られる
  • template.buid() で SynthDefファイルに相当する JSONオブジェクト を生成してサーバーに送信 (省略可) . builded.play で先に送った JSON からシンセノード生成してノードグラフに追加する (サーバー側の処理)

ファイル書き出しはブラウザの制約上むずかしいので考えていなかったですが、 確かになんらかの方法で外部にデータを置いたり読み込める仕組みは便利ですね。

mohayonao avatar Nov 07 '13 08:11 mohayonao

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?

sarigama avatar Dec 11 '13 02:12 sarigama

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.

mohayonao avatar Dec 11 '13 05:12 mohayonao

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

sarigama avatar Dec 11 '13 06:12 sarigama

ここjaなんすねw で、取り急ぎ(?)unzipしたものを丸ごとftpして、http://sarigama.namaste.jp/cc/cc.htmlにしてみましたが、SinOSCがcoffee-colliderの中でnot definedになってるかのように言われます。試しに指定パスを調整してhttp://sarigama.namaste.jp/cc/build/cc.html にしてみても、結果は同じですね ブートボタンとか無しに、そこくらいシンプルに鳴らせると、やりたいことは山ほど有るんだけど・・

sarigama avatar Dec 12 '13 04:12 sarigama

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

mohayonao avatar Dec 12 '13 04:12 mohayonao

おお! でも、基本的な扱い方は、自分でも「そんな安易な・・」って思ってた方向で、実用出来そうなんですね! iPhoneにはロリポップftp用アプリが有るので、一旦セットアップが済んだら、coffeescriptを埋めた.htmlを編集するだけで、鳴るサイトが作れますね。そうなったら、ほとんどの音響アプリは捨てることになる気がする。制作と発表が直結するし・・ああ、サンプル・ページに既にtweetボタン有るから、素直にソレ使いなよ・・でもあるワケか・・ 取り敢えず、coffeescriptの調整で鳴るまでをやって、報告します

sarigama avatar Dec 12 '13 05:12 sarigama

修正しました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.

mohayonao avatar Dec 12 '13 05:12 mohayonao

鳴りました! ディレクトリのトップかbuildの下かは、関係ナイですね! テスト環境はhpのdm1の最安構成に 64ubuntu13.10をインストールしたのの firefox25.0.1とchrome31.0.1650.57です しかし、やはりiPhoneで鳴らないのはイタいので 画像クリックなり・・を追加してみます! 今度のwebaudio(midi)ハッカソンに殴り込む準備が出来た感じです! waitが嫌いなので、tweetからキッカケをもらう仕組みを考えたいです 多謝!

sarigama avatar Dec 12 '13 06:12 sarigama

jsに直接、文字列としてccのコードを埋め込んでページにするのは http:///sarigama.namaste.jp/nipples/cctmp.html に、エラー出しまくりながらも出来 iPhoneでも内側の丸クリックで鳴るようになりました か、左右同時に走らせると音が割れますね 単にvolの合計値の影響なのか これから調べるところ

課題として 走らせた後に、外側丸クリックで変数のメッセージ送信したり クリック以前にもTask的な自動遷移もさせたいので もっとデカイ(複数行)文字列にしたいのだけど js的にどう書くのか悩んでいます

というのの解決と さらに 気が付いたら相手がccコード更新してた な、時間差インタープレイを実現するには 任意の外部urlの.coffeeを読むのが必須と思うのですが やっぱsame origin系の壁が有るので xmlHttpRequestなのかFileReaderなのか、jQueryの力を借りるのか 頭を抱えています

sarigama avatar Dec 21 '13 15:12 sarigama

もっとデカイ(複数行)文字列にしたいのだけど 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 を利用することで実現しています。

mohayonao avatar Dec 21 '13 21:12 mohayonao

有難うございます! これでjsでの埋め込み方式は目処が立ちました。 cc.load()にも、激しく期待ですw 「新しい.coffeeアップしたよー」なツイート見たら、 それを所定ディレクトリにwgetでもして、 ダクのリストに追加すれば、 逆に、404系になる危険も無く、 どの道そっちの方式に落ち着くかもですしね。 前回ドタ・キャンしたハッカソン、 参加資格取れたら、是非ともccで殴り込みたしw

sarigama avatar Dec 21 '13 23:12 sarigama

UGen実装リクエストを出してみます。ReplaceOutがあれば良いなと思います。なくても大丈夫....

tn800 avatar Dec 22 '13 13:12 tn800

SuperCollider の examples を見ていると Klank, ReplaceOut, XOut, LeakDC, AudioIn あたりが抜けているようなので早めに実装するようにします。

mohayonao avatar Dec 23 '13 06:12 mohayonao

cc.load(path, callback) 追加しました。

https://github.com/mohayonao/CoffeeCollider/wiki/01-FrontEnd-Interface#loadpathstring-or-array-callbackfunction

mohayonao avatar Dec 24 '13 07:12 mohayonao

さっそくcc.load()を使い、御thinking.coffeeをまんまパクって http://sarigama.namaste.jp/iDoze/2013122401.html にしてみましたが、chromeとfirefoxで鳴るもmobilesafariで鳴らなくなってしまいましたorz 原因の見当がつかないので、アレコレやってみます。まだまだ、最もシンプルな再生だけなのですがw

sarigama avatar Dec 25 '13 00:12 sarigama

あー、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);
  });
};

mohayonao avatar Dec 25 '13 00:12 mohayonao

鳴りました! iPhoneでも、まだまだ処理パワーに余裕有りそうですね。 firefoxでも。しょっぱなの音の始まり方がスムーズになったよーな気がします。 単純な頭の者としては、 cc.load(code.coffee); cc.run() or cc.play(); だとモロモロと組み立て易いのだけど、 function()が続くのには、 何かjs流儀のワケが有るのでしょうねー。

次はメッセージ送信を含めてみます。

sarigama avatar Dec 25 '13 01:12 sarigama

曖昧な表現に、なってしまいました cc.load("code.coffee"); func4click() { cc.play(); // or cc.run(); }; のイメージです

sarigama avatar Dec 25 '13 01:12 sarigama

むむ! .play() はcc側を目覚ましてる.standby()みたいな意味なのかな? で.pause()して.reset()して、やっと再度.play()してから.load()で.run()かな?

sarigama avatar Dec 25 '13 02:12 sarigama

連投すいません! メッセージ周りを開始しましたが (-> ).play() の中にいる$saに、js側からメッセージ送ったら Message.on "message", ({sa, ri, ga, ma, pa, da, ni})-> では $sa = sa なのでしようか? .set()みたいなのが有るバスですか?

sarigama avatar Dec 25 '13 12:12 sarigama

質問がよく分からないですが、

https://github.com/mohayonao/CoffeeCollider/wiki/21-Message

このように動作します。

mohayonao avatar Dec 25 '13 12:12 mohayonao

ダメだ、イロイロ試したのだけど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側に集中できるので なんとも残念

sarigama avatar Dec 28 '13 01:12 sarigama

引数はカンマで区切る必要があります。

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" が出ていると思います。

mohayonao avatar Dec 28 '13 02:12 mohayonao

お恥ずかしい! その修正でクリックによる周波数変更、出来るようになりました (-> ).play()の中で宣言した$sa-$niを Message.on "message"の中で $sa = a1 $ri = a2 とする方式でもエラー出ないも伝わらなかったので お手上げかと思いましたが 当面SynthDef方式で遊んでみます 有難うございました!

sarigama avatar Dec 28 '13 02:12 sarigama

1/18のハッカソンにccで臨むべくマッシュアップ連携的なjsライブラリを探り始めてます。twitterからのプッシュをSynthDefの引数setに利用するのとかヤリたいものの、api1.1からは認証工程要みたいで、難しそうですね。プッシュされるコンテンツを単純表示更新しながらcoffeeの味も変わって行けばイイので、他のsnsでもイイんですけど・・って独り言を書いてるのは、何かそーゆーメソッドを作ってくれ・・催促してるワケではナイですよw 有ったらweb開発でのcc活用例が大爆発だなぁと・・思ってるだけです

sarigama avatar Jan 11 '14 21:01 sarigama

Twitterとの連携のようなものはアプリケーションの例としては面白いかもしれませんが、本体の機能として追加されることはありません。

mohayonao avatar Jan 12 '14 01:01 mohayonao