月別アーカイブ: 2011年6月

六角大王的な技術は流行らないのか

六角大王とかPICMOとかの、補間技術を使ったツールが流行らないのはなぜなんだろう。

多分、アウトプットの質が保たれていなかったのが理由なのではないか。精細な作品を作るのが難しいため、結局おもちゃになるだけで道具たりえなかったのでは。

DOGA-L1もどうなったやら…

この手のツールで成功例を聴かない。 普段使いするものを技術で作り出すのがブレークスルーなのかもしれない。 はじめは力業的に見えるけれど、そのうちに洗練されて、 ある閾値を超えると、一斉にユーザが増える。

デジタルカメラやコミスタへの移行は急激に起こったらしい。

間口を広げることも大事だけれど、アウトプットの質さえ高ければみんなが使い出す。質にフォーカスした製品を考える。

Xara欲しい

今のところ、体験版を使っている。値段はIllustratorの2割以下だし軽い。ただし色々と機能が足らない。

$89 ≒ \7100

足りない機能

  • Pen Toolが貧弱
  • キーボードアサインが出来ない
  • ビットマップのエンベロープ適用ができない→GIMPでやれるか?もしくは、トレースしてから適用
  • 縦組み
  • トリムマークの作成

使いたいもの

  • ponokoやレーザー加工の入稿
  • 下絵の作成
  • ちょっとしたWebグラフィックの作成
  • 判子の入稿

すたどんたん2の構想

若干興味が薄れてきている。まだやれることは残っているのにかかわらず、すぐに飽きて捨ててしまうのが悪い癖だ。 ひとまずコンピレーションが作れたのはよかったと思うけれど、遣り残したことはたくさんある。

・WAV書き出し

「テキスト音楽サクラ」に替わるものが必要だろうとは考えている。今の時代にMidi作曲でいい、というのは、CG作りたい人に六角大王を薦めるようなものだ。 今、最もローテクにハイエンドな楽曲を作ろうとするなら、ループベースの作曲か、カットアップによる作曲だろう。そのパーツをすたどんたんで作れるようにする。

もちろん懸案もあって、デスクトップで提供するならさすがにサンプルを自前録音にリプレースしないといけないだろうな…。今はまだオモチャだけど、本格的に始めるとライセンス違反に直撃するだろうし。

・Vocaloid Job Plugin

Vocaloid3からAPIが提供される。WAVインポートまでスクリプトから行えるなら、Vocaloidに組み込むことで「テキストだけで1曲作れる環境」を作ることが出来る。本書けるでこれ。 ただし、APIがまだ公開されてないので、まだ皮算用に過ぎないよね。

・オノマトペマッピング

この名称で行くのかもはっきりしないし、自分一人だとモチベが続かなそうな気がもりもりしている。

・んぺんぺベース

オノマトペマッピングを使って、例えばSlapBassフレーズの生成をデモすれば派手だと思う。

・MML削減ツイート対応

ツイートしづらい件に対応したい。

・コラボ出来るようにする

引用や伴奏の付加など。ツリー形式にする?現状の形態でも全く出来ないわけではない。

・トリビュートアルバムを作る

Vocaloidやラップですたどんたんこんの楽曲をカヴァー出来るといいねー

システムよりも、お祭り感覚。 可能性を感じさせるデザイン。可能性の為のデザイン。

◆楽しそう!感の演出 ・かわいいぴょこぴょこアイコン(パターンの長さをアイコンで表示) それぞれの音にふき出し http://www.vertigo-project.com/development/jquery-ui-tooltip-plugin

Onomappingアルゴリズム(Java)

泥臭い方法なんだと思うけれど、文字列同士の部分一致検索を行うロジックを書いた。 以前書いた「オノマトペマッピング」に使うアルゴリズムで、文字列をインデックスに書き換える。

理想的にはWindowを広めに取る必要があるんだろうけど、パフォーマンスどうなるんだろうね。 SiONを使う場合はJavascriptで書き直さないといけないし。

package sion.test;

import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.logging.Logger;

public class StringMatch2 {

private void log(String str){
    Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).info(str);
}

/**
 * 4文字までの辞書を作成する
 *
 * @return
 */
private LinkedHashMap<String, ArrayList<Integer>> makeHash(String source,
        int window) {
    LinkedHashMap<String, ArrayList<Integer>> map = new LinkedHashMap<String, ArrayList<Integer>>();

    while (window > 0) {
        log("window = " + window);
        for (int i = 0; i < source.length() - window + 1; i++) {
            // i: index
            // window: length
            String sub = (source.substring(i, i + window));

            // play offset list
            ArrayList<Integer> list = new ArrayList<Integer>();
            for (int j = 0; j < window; j++) {
                list.add(i + j);
            }
            map.put(sub, list);
        }
        window--;
    }
    return map;
}

public static void main(String[] args) {
    int window = 4;
    String input = "dnsttnststdnstdndndndnsttnststdd";
    String source = "ststdntnstdntnststststdnstndtntr";

    ArrayList<Integer> test = new StringMatch2().replaceByStringFlagments(input, source, window);
    System.out.println(test);
}

/**
 * 文字列inputを、source内の文字列で置き換え、index配列表現で返す
 * @param input
 * @param source
 * @param window 置換文字列単位の最大長
 * @return
 */
private ArrayList<Integer> replaceByStringFlagments(String input, String source, int window) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    //初期化
    for (int i = 0; i < input.length(); i++) {
        list.add(new Integer(-1));
    }

    //辞書の作成
    LinkedHashMap<String, ArrayList<Integer>> makeHash = makeHash(source,
            window);

    //置き換え
    while (window > 0) {
        log("window = " + window);
        for (int i = 0; i < input.length() - window + 1; i++) {
            // i: index
            // window: length
            String sub = (input.substring(i, i + window));
            log(sub);
            if (makeHash.containsKey(sub)) {
                log(" -- Match");
                StringBuffer sb = new StringBuffer();
                for (int count = 0; count < window; count++) {
                    sb.append("@");
                }
                input = input.replaceFirst(sub, sb.toString());
                ArrayList<Integer> repList = makeHash.get(sub);
                for (int aryIdx = 0; aryIdx < window; aryIdx++) {
                    list.set(i + aryIdx, repList.get(aryIdx));
                }
            } else {
                log("");
            }
        }
        window--;
    }
    return list;
}

}

MMLTalksと棲み分けは可能か

思いっきりコピーを打ち込みに来ている人も居るわけで、そういう人は(PCMは使えないけど)MMLTalksに誘導するのが筋なんだろうと思う。今のところKeimさんがRTしてるからそれでいいといえばいいのかも知れないけれど。

MMLTalksはコピー文化で、すたどんたんやSiON140は書き散らしだ。考えたのは、一定の文字数を超えるとMMLTalksへのリンクを表示するようにする。こっちがすたどんたんProですよ的な。

ただMMLTalksにはアーメンがない。MMLでパーカス書くって苦行だよなあ。そこだけ、うまく連携できないだろうか。コンバータを用意すればいいのか。さすがにそこまでの余裕は…

マイクロコンテンツを創作言語と見なしたとき、何を作ることが出来るか

すたどんたんはやっぱり一発で終わる気がするなあ。オモチャ扱いされてて、特に期待されてもなければ、成長に向けてのサポートが得られそうにもない。などと作った側が絶望しててどうすんだろう。いろんなコンセプトはあるんだけど、どれも人が求めるものかというと、どうかなあ…。リアルタイムコラボとか考えたけど、利用者が居ない未来が見える。つうかそれマビノギなんじゃないの。

すたどんたんはそもそもマイクロコンテンツ向きのシステムなので、そこからどんな可能性があるか。

創作をコミュニケーションとして使うのであれば、「創作言語」が必要。

時間をかけて何かを積み上げるのではなく、 その場で粘土をこねくり回すように「でっち上げ」、 その場のノリでアドリブ的に作品を作っていく。

作品で会話をする。それくらいスピード感がある世界になったらどうなるか。 (個人的には、使い捨ての作品が増え、弊害がでかい気がするが…)

ともかく、今までそれ程までにスピード感がある経験は、リアルタイムのお絵かきチャットか、はてなハイクやはてなワールドぐらいしか知らない。それをWebの慣習に従って展開したらどうなるか。

コンセプト

Twitterの窓で色々なことをやる。Microformat時代の遊びの標準を提唱する。 * 800×160px ぐらいで表示出来るマイクロコンテンツ。 * 作曲(→すたどんたんで十分) * うごメモ的なもの(→ドット絵で十分) * どれも「遊び」であって、真面目さを感じさせないUIにする * ワンアクションでのすげー感を大事にする。

基盤技術

  • マイクロフォーマット
  • RSS
  • MML
  • SVG
  • HTML5 Canvas

競合

  • はてな(なにげに、やろうとすることは大抵はてながやっている。geek的すぎて失敗してるけど)

妄想

  • 自分の「アルバム」を作成出来るようにする
  • 他のユーザの作品から「セレクション」を作ることが出来る(→tumblrに保存出来ればいいんだけど)

以上のコンセプトを考えたけど、これを使ってビジネスしたいとかは全然思わない。思いつくには思いつくけど、全然目標がない。ハイクのパクリになりそうだしなあ。パクリを回避するには、オリジナルを超えればいい話だけど。

オリジナル楽器でライブをしたかった話

16次元ベースという楽器を作っていた。 このプロジェクトは手放した方がいいような気がする(=先がないと思う)ので、 ここに書いてしまう。

コンセプト

ファミコン三角波(16bit三角波)のベースが好きなので、 その音がでる電子楽器を作る

予定

  • 試作品の作成
  • 販売

予算

  • Arduino UNO \3200
  • ponoko加工
    • オパールのアクリルで0.5cm x 78cm x 38cm = $28
    • 加工代が不明… 簡単な形状なら安いか?
    • 送料が$58.20(US Ponoko)
    • UKからでも$40以上かかる… *自前加工
    • ジグソー(\3,000~) or 糸のこ盤(\20,000~)
    • ジグソーなら斜め加工も問題なく出来そう。
  • 50mm softpot potentiometer \3000
  • アクリル黒に白色LED間接照明
  • 銃器をイメージ

製品仕様

製品名:16D-Monolith パフォーマンスできる楽器にする * 肩から提げる * ボタンのクリック感を意識 * プロトタイプでエルゴノミクス研究 * 握りやすいサイズ * 手首を曲げずに演奏できること

参考

http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090716_302590.html

WebMML Alliance

すたどんたんが一発当たったようだけれど どうせなら、単なる一発ネタではなく、 持続的に、普通に音楽メモとして使われる 普遍的なツール/手法として育てたい。 (出来れば教育用途にも使ってもらいたい)

例えば、SiON系列とFlMML系列のサイトが全て相互リンクしたとして、 シナジーって生まれるのだろうか。

文法も違うし、文化も違う訳だけれども…

例えばあるMMLサービスを使っている時に、 音作りをしたい、簡単にドラムを鳴らしたい、楽譜を作りたい と思ったその時、ボタン一つでMMLを別のサービス上にペーストできる ような機能があれば、便利かもしれない。

すたどんたんは独自部分が多いので、自分がそういうのを提案するのはどうかと思うけれど… やるのであれば、GETパラメータにMML本体を含める形のインターフェースを 各サービスで提供すれば、相互運用性は確保出来るはず。

オノマトペに関する調査

「ぽてぽて」「ほむほむ」などの擬音語をオノマトペという。

昔からオノマトペ記述は利用されている。 http://www.vesta.dti.ne.jp/~hokaboko/ohayasi.html

http://abesha.sns.fc2.com/exec/member/blog/view/9426/?sid=3a1dca5cd672b6314cadbd2673aa4fa46589dba3

http://homepage3.nifty.com/k_tomita~s/romarin/data/Onomatope/Onomatope_04_ta.htm

2011.06.01に人工知能学会で行われたオノマトペセッションの論文一覧。 https://kaigi.org/jsai/webprogram/2011/session-144.html

英語圏だと、繰り返しを使ったオノマトペは赤ちゃん言葉と認識されていると聞いたことがある。

Onomatope Mapping

すたどんたんは当初から、2文字以上のサンプル置換を検討していて、 背景には「オトマノペマッピング」と命名したアイデアがある。

これは、ベースやパーカッションを一通り録音しておいて、 その録音に対し、オトマノペでふりがなを振っておく。

ベースだったら「べーーべっべっぺんべっべぺっぺえ」のような形。 それを延々とベーシストに演奏してもらい、ふりがなを振っておく。

振ったふりがなを辞書として使い、 例えばユーザが「ぺっぺぺっぺ」と入力したら、 「べーーべっべっぺん【べっべぺっぺ】え」 の部分を抜き出して再生するようにする。

この方法による利点は、 ・ベーシストの手癖を素人が利用できる ・タメやスライドなどを反映でき、自然な演奏感を得られる

問題点。 ・最長一致検索のコスト(方法もよくわからない) ・データを用意する手間 ・辞書で重複部分が多発 ・ユーザが音程を制御できない ・スラップベースぐらいにしか適用できない?

問題点を無視するためには、 ・そもそもユーザに音程を制御させない(ベースの場合、音程感がない低域で演奏してもらう) ・リズムとクリシェのみで楽しんでもらう

そもそも、実働サンプルなどで検証しないことには、効果の程も分からない。 手で辞書を作成した簡易版を作ろうかと検討中。 (ハンマリングは普段1度か2度のインターバルでしか行われないことを考えると  クリシェのパターンは限られているような気がしてる)

そもそもtabla bolやらディドルやらストトン記法やらは既知のアイデアなんだから オノマトペマッピングそのものが既知のアイデアの可能性はあるけど…