Labyrinth of Wisdom

-This is My Archive-


AKAI MPC Softwareのデータ構成について

はじめに

HIPHOPでトラックメイキングするならAKAIのMPC!」とはよく言いますが、MPCって結構難しくて、正直よく分からないって人いませんか? 自分がそうだったのもあって少しづつ解説していこうと思い、記事を書くことにしました。

僕はMPC Softwareを使用しているので基本的にそのソフトの説明になりますが、ハードのMPCや他のサンプラーに関しても考え方の大枠は当てはまるかと思いますので、サンプラー初心者の方もよければ見てみてください。

MPCデータ構成

MPCは音楽を作る機材なので最終的には一つの楽曲になるわけですが、そこに至るまでに様々な形式のデータを作ります。

まずMPCで曲を作る時のデータ構成を図でざっくり表現してみました。

Song (曲)
  ├ Sequence (フレーズ)
  │     ├ Program (シンセサイザー)
  │     │     ├ サンプリングソース (音ネタ)
  │     │     └ サンプリングソース (音ネタ)
  │     └ Program (シンセサイザー)
  │           └ サンプリングソース (音ネタ)
  └ Sequence (フレーズ)
        └ Program (シンセサイザー)
              └ サンプリングソース (音ネタ)

楽曲は全部で4種類のデータ形式でできています。

Songは1個以上のSequenceで構成されており、Sequenceは1個以上のProgramで構成されており、Programは1個以上のサンプリングソースから構成されています。

一つ一つ説明していきましょう。

・サンプリングソース (音ネタ)

レコードやCDの一部分を録音して、曲の材料にするものです。いわゆる音ネタ。 一番ベタなのは「曲のイントロでギターが鳴ってる箇所」みたいな感じですが、極端な話音なら何でもOKです。

これをパッドにアサイン(割り振る)することでパッドを叩くと音が鳴るようになります。

・Program (シンセサイザー)

まずシンセサイザーについておさらいします。
シンセサイザーには大きく分けると二つ種類があります。

  • ハードウェア・シンセサイザー
    microKORG のようにキーボードの中に音源が複数入っているもの。
    ピアノやベースの音などが入っており、音源の切り替えを行って鳴らす音を変更できます。 電子ピアノとかを想像してもらうと分かりやすいです。

  • ソフトウェア・シンセサイザー
    PC内にソフトとして立ち上がり、PC画面の鍵盤をクリックすると音が鳴ります。
    MIDIキーボードなどを使えばハードシンセのような使用感で演奏することもできます。

どちらにも共通しているのは、シンセサイザーに入っている音はあらかじめ決まっており、基本的にシンセサイザーの中身をカスタムすることはできないということです。(パラメータをいじって音作りはできるけど)

これを可能にするのがMPCや他のサンプラー

先ほど紹介したサンプリングソースを使用して、オリジナルのシンセサイザーを作ることができます。 このオリジナルのシンセサイザーのことをMPCではProgramと呼びます。

複数のサンプリングソースを各パッドにアサインして、その状態を保存するとProgramデータが出来上がります。

KREVA氏はMPC4000でスネアだけ、クラップだけを集めたProgramとかを作っているみたいです。

自分の好きなようにProgramの中身をカスタムできるのがMPCをはじめとしたサンプラーの醍醐味の一つです。

ファイル拡張子:.xpm

・Sequence (フレーズ)

Programを使用してパッドでフレーズを打ち込みます。 一番MPCっぽいイメージの部分ですね。 この打ち込んだフレーズがSequenceデータになります。

ファイル拡張子:.xsq

・Song (曲)

Seuenceを複数並べたものがSongになります。
異なるSequenceを並べることにより、曲に変化が生まれ展開が作られていきます。

まとめ

以上、大きく分けると4つのデータ構造を組み合わせて初めてMPCで曲を作成することが出来ます。 もちろん各工程にはもっと細かなことが沢山あるのですが、ざっくり言うとこんな感じです。 イメージは湧いたでしょうか?

Akai Professional 音楽制作システム 7GB音源付き MPC Studio Black

Akai Professional 音楽制作システム 7GB音源付き MPC Studio Black

【Javascript】複数のチェックボックスの全選択・全解除

入力フォームでよくある、全選択・全解除のチェックボックスのサンプルです。

色んな方法がありますが、今回は<input>の属性nameが全て同じだった場合を記載しています。

参考ページに色んな方法が書いてあるので、状況に応じて使いこなしてみてください。


<form name="form">
  <label>
    <input type="checkbox" name="all" onClick="AllChecked();" />全て選択
  </label>
  <p>
    <label>
      <input type="checkbox" name="test" value="TEST1" onClick="DisChecked();" />TEST1
    </label>
    <label>
      <input type="checkbox" name="test" value="TEST2" onClick="DisChecked();" />TEST2
    </label>
    <label>
      <input type="checkbox" name="test" value="TEST3" onClick="DisChecked();" />TEST3
    </label>
    <label>
      <input type="checkbox" name="test" value="TEST4" onClick="DisChecked();" />TEST4
    </label>
  </p>
</form>

<script language="JavaScript" type="text/javascript">
<!--
  // 「全て選択」チェックで全てにチェック付く
  function AllChecked(){
    var all = document.form.all.checked;
    for (var i=0; i<document.form.test.length; i++){
      document.form.test[i].checked = all;
    }
  }

  // 一つでもチェックを外すと「全て選択」のチェック外れる
  function DisChecked(){
    var checks = document.form.test;
    var checksCount = 0;
    for (var i=0; i<checks.length; i++){
      if(checks[i].checked == false){
        document.form.all.checked = false;
      }else{
        checksCount += 1;
        if(checksCount == checks.length){
          document.form.all.checked = true;
        }
      }
    }
  }
// -->
</script>

参考

複数のチェックボックスを同時にチェックする 全選択チェックボックス - [サンプルコード /JavaScript] ぺんたん info

メールアドレス入力フォームでの値の比較・確認

「メールアドレス」と「確認用メールアドレス」の入力値を照らし合わせて、一致しなかった場合はエラーメッセージを出すという、入力フォームでよくある機能のサンプルを2パターン記載します。

どちらもJavaScriptを使用するんですが、エラーメッセージの出し方を変えています。 状況に応じて使い分けてみてください。

サンプル1

エラーメッセージをJavaScriptのアラートで表現したパターンです。 こっちの方がコード的には簡単です。

<form onSubmit="return CheckEmail_1()">
  <div>
    <label for="email_1">メール:</label>
  </div>
  <div>
    <input type="email" id="email_1" required>
  </div>
  <div>
    <label for="emailConfirm_1">メール確認用:</label>
  </div>
  <div>
    <input type="email" id="emailConfirm_1" required>
  </div>
  <p>
    <input type="submit" id="submit">
  </p>
</form>

<script language="JavaScript" type="text/javascript">
<!--
  function CheckEmail_1() {
    //IE対応の為変更
    //var mail = email_1.value; //メールフォームの値を取得
    //var mailConfirm = emailConfirm_1.value; //メール確認用フォームの値を取得
    var mail = document.getElementById("email_1").value; //メールフォームの値を取得
    var mailConfirm = document.getElementById("emailConfirm_1").value; //メール確認用フォームの値を取得
    // パスワードの一致確認
    if (mail != mailConfirm){
      alert("パスワードと確認用パスワードが一致しません"); // 一致していなかったら、エラーメッセージを表示する
      return false;
    }else{
      return true;
    }
  };
// -->
</script>

アラート表示-JavaScript入門

サンプル2

こちらはエラーメッセージをHTML5の入力チェック方式で表現したパターンです。 他の値もHTML5で入力チェックをしていた場合は、こちらの方がメッセージの形式に統一感があるので見栄えがいいです。

<form>
  <div>
    <label for="email_2">メール:</label>
  </div>
  <div>
    <input type="email" id="email_2" required />
  </div>
  <div>
    <label for="emailConfirm_2">メール確認用:</label>
  </div>
  <div>
    <input type="email" id="emailConfirm_2" required oninput="CheckEmail_2(this)" />
  </div>
  <p>
    <input type="submit" id="submit">
  </p>
</form>

<script language="JavaScript" type="text/javascript">
<!--
  function CheckEmail_2(input){
    //IE対応の為変更
    //var mail = email_2.value; //メールフォームの値を取得
    var mail = document.getElementById("email_2").value; //メールフォームの値を取得
    var mailConfirm = input.value; //メール確認用フォームの値を取得(引数input)

    // パスワードの一致確認
    if(mail != mailConfirm){
      input.setCustomValidity('メールアドレスが一致しません'); // エラーメッセージのセット
    }else{
      input.setCustomValidity(''); // エラーメッセージのクリア
    }
  }
// -->
</script>

制約 - フォーム - HTML要素 - HTML5 タグリファレンス - HTML5.JP

リードの取引開始時に取引先責任者でレコードタイプを引き継ぐ

リードオブジェクトのレコードタイプを、取引開始後の取引先責任者でも引き継ぎたくて下記の記事を参考にプロセスビルダーを触っていました。

www.systemforest.com

この記事の中で「18桁のレコードタイプIDを指定する」的なことが書いてあるんですけど、通常の画面からだとURLに記載されている15桁のレコードタイプIDしか参照できないのでそれでやってみました。 いちいちデータローダとか使うの面倒くさいし。

で、ちゃっちゃと真似てプロセスビルダーを作って、取引開始してみたんですけど、一向に指定したレコードタイプにならない。 何回やってもならない。

でちょっと面倒だけど18桁のレコードタイプIDを取得してみました。 レコードタイプを指定した適当なレコードを各オブジェクトに一つずつ作り、それを取り出します。

Lead[] lead = [SELECT Name, RecordTypeId FROM Lead WHERE name = 'xxx' LIMIT 1];

Contact[] contact = [SELECT Name, RecordTypeId FROM Contact WHERE name = 'xxx' LIMIT 1]

System.debug(lead);
System.debug(contact);

取得した18桁のレコードタイプIDを使ってプロセスビルダーを更新すると・・・

できた!

ちゃんと書いてあること守るべきでしたね。すいません。

同じところでハマってる人もいるかもなのでメモしときます。

パスワードの強度と桁数等の関係について

最近読んだコラムですごく為になったのでシェア。

WEBサービスで設定するパスワードって大体が6文字以上 or 8文字以上の半角英数字、中には大文字小文字識別記号も使えるみたいなところもありますね。

まあ複雑な方が当然見破られにくく、セキュリティは強いっていうのは誰でも想像つくんですけど、文字数や組み合わせでどれくらい強度が違うのかを示している記事がありました。

情報化推進レター

上記リンクより拝借

f:id:Labyrinth_of_Wisdom:20160607092656p:plain

6桁の英字(大文字小文字区別なし)だと、なんと37分!でパスワードを破られることがあるという驚きの結果!(PCの性能条件などは上記リンク参照)

Amazon楽天なんかの大手ショッピングサイトでも、パスワードの条件は6文字以上の英数字(大文字小文字区別なし)だったと思います。(違ってたらすいません)

もちろん簡単に破れないように何らかの対策をしているとは思いますが、やっぱり怖いですよね。 僕はこれを見て急いで全て8文字以上に変えました。

表を見る限り、最低でも8文字以上の英数字(大文字小文字区別あり)位にしとけば解析されるのに大体50年かかるみたいなので、今後のパスワード設定の基準にしてみてください。 もちろんどんなに強力なパスワードでも使いまわしは危険なのでそこも注意してください。

ランダムパスワード生成サービスなんてものもあります。

パスワード自動生成 (Automated Password Generator)

【Apex】取引開始をまとめて行う方法

Apexを使用して、リードから取引先責任者への移行(取引開始)をまとめて行うクラスのサンプルを作ってみました。

ただfor文の中でSOQL使用していたりするので、ガバナ制限には気を付けなければいけません。そこは注意してください。

// 取引開始メソッド
public void Convert(){

    // リード状況の「取引開始済み」に該当する値を取得(MasterLabel)
    LeadStatus convertStatus = [SELECT
                                    Id, MasterLabel
                                FROM
                                    LeadStatus
                                WHERE
                                    IsConverted = true
                                LIMIT
                                    1
                                ];

    // 取引開始していないリードを取得
    Lead[] leads = [SELECT
                        Id
                    FROM
                        Lead
                    WHERE
                        Status != :convertStatus.MasterLabel
                    ];

    // 取得したリードの数だけ取引開始を行う
    for(Lead lead : leads){
        Database.LeadConvert lc = new Database.LeadConvert(); //取引開始済みリードオブジェクトをNew

        Account account = [SELECT
                                Id
                            FROM
                                Account
                            WHERE
                                Name = :lead.Company
                            LIMIT
                                1
                            ];

        try{
            lc.setLeadId(lead.Id);
            lc.setConvertedStatus(convertStatus.MasterLabel);

            // 取引先に同じ会社名がある場合は既存のレコードを使用
            // 新しい取引先は作らない
            if(account != null){
                lc.setAccountId(account.Id);
            }

            lc.setDoNotCreateOpportunity(True); // 商談オブジェクトを作成しない
            Database.LeadConvertResult lcr = Database.convertLead(lc); // 取引開始
        }catch(DmlException e){
            System.debug('エラー:' + e);
        }

    }

}

参考

Web To リード(ケース)でレコードタイプを指定する

Web To リード(ケース)で生成したフォームからレコードタイプも同時に指定したいな、と思って調べたのでメモ。

Web to リード(ケース)で生成したHTMLに下記のコードを入れてやると指定できます。

フォームの生成方法は過去記事を参照。特にSandBox環境の人は読んでおいてください。

Value値にはレコードタイプのIDを入力。

  <input type="hidden" id="recordType" name="recordType" value="***************">

レコードタイプのID

レコードタイプのIDを知る方法を書いていきます。 とはいってもApexでどうこうする必要もなく、簡単にわかります。

まず下記のページに移動します。

  • 標準オブジェクト

設定 > カスタマイズ > 任意のオブジェクト(キャンペーン等) >レコードタイプ

  • カスタムオブジェクト

設定 > 作成 > オブジェクト >レコードタイプ

IDを知りたいレコードタイプをクリックして、個別ページに遷移。

そのページのURLにid=***************という形式で、15桁の英数字が並んでいる部分があります。それがIDです。(オブジェクトのレコード等と一緒ですね)

これを先ほどのコードに代入すれば、送信時にレコードタイプが入ります。

サンプルコード

最後にサンプルコードを書きます。

<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">

<form action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST">

  <input type=hidden name="oid" value="xxxxxxxxxxxxxxx">

  <!-- 送信後に遷移するページ -->
  <input type=hidden name="retURL" value="http://www.yahoo.co.jp/">

  <!-- レコードタイプのIDを指定 -->
  <input type="hidden" id="recordType" name="recordType" value="***************">

  <label for="name">名前</label>
  <input id="name" maxlength="80" name="name" size="20" type="text" />
  <br>

  <input type="submit" name="submit">

</form>

参考

How can I pass a record type through a Web to X form?