CONNOR HARRIS：こんにちは。
私はコナー・ハリスです。
私はハーバード大学のCS50のCAです。
STEPHENクルーソン：私はスティーブンクルーソンです。
私はエールでCS50のためのTFです。
CONNOR HARRIS：そして、我々は話をするつもりです そのあなたがかもしれないいくつかの技術について
もし興味があるなら使用したいです 最終的なプロジェクトをやってや本当に
音楽で何か。
まずAに焦点を当てたことになるだろう ハスケルと呼ばれるプログラミング言語。
これは、機能的な 言語、そうパラダイム
CやPHPは非常に異なっています または他の命令型言語
あなたは既に使用したこと、および特に Haskellで書かれたライブラリに
人々を助けることができる、Euterpeaと呼ばれます 機能的に音楽を書き込むと、
基本的には。
そして、スティーブンはあなたを歩いていきます その良い例を通して。
>> この後、私はにご紹介します LillyPondと呼ばれるもの、これ
組版の音楽のための技術です。
それは一種のLaTeXのようなものです 音楽のためのあなたのいずれかの場合
数学のクラスのためのLaTeXを使用していますか 他のPセットクラスまたは何があなたを持っています。
だから私は再び、あなたを与えるだろう、 そのいくつかの簡単な例
一般的にあなたを指します いくつかの優れたリソースの方向。
>> STEPHENクルーソン：で さらに、我々はそれを考えました
セットアップするためにクールになります ヒントを少し
間のパイプラインに向けて Euterpeaで生成されたMIDIファイル
LillyPondに、私たちは提供します スクリプトのいくつかの命令
それをするであること LillyPondで提供
ただそれにオープンソースを維持します そしてパイプラインが軌道に乗ります。
CONNOR HARRIS：再び、 我々は、重視すべき
この2つの技術、あなた それらを一緒に使用する必要はありません。
これらは、動作するように設計されていません 一緒に、彼らは非常にうまくやるのに。
>> STEPHENクルーソン：右。
そして、完全に無料。
CONNOR HARRIS：だから 確認応答は、まさにそれをお読みください。
STEPHENクルーソン：正式には指摘しました。
これらの人々に感謝します。
これは、私は一瞬のためだけに残るでしょう。
インストールプロセス 少しトリッキーです。
私たちは、GitHubの上で私を読んでいます あなたが見てみることができます。
ご質問があれば私にメールしてください。
しかし、我々は仮定の下で、これを実行します これは誰のために働いていること。
CONNOR HARRIS：そして、あなたができない場合 LillyPondは、大した仕事をしないことを得ます。
ライブコンパイルはありません 少なくとも私の端に、関わることになります。
STEPHENクルーソン：ハスケルと LillyPondは、両方のインストーラを持つ必要があります。
Euterpeaは次のようにダウンロードされます パッケージ、というようになど。
だから我々は、コンピュータ音楽の話をしています。
そして、これはただであります 非常に50,000フィートのビュー。
それのいくつかの異なる側面があります。
そして、これは粗く、あります いくつかの詳細を曖昧に行きます。
しかし、我々は何かを考えることができ アルゴリズム作曲のように、
アルゴリズムを使用して、 生成するために、コードを使用して
いくつかのタイプof--多分自己相似 ノートのシーケンス、または多分ノート
いくつかの制約の下で。
そして、それらは次のようになり 行ったり解釈
アナログ機器と またはそのような何か。
しかし、組成が アルゴリズム的に行わ。
>> しかし、もちろん、多分のエリア コンピュータ音楽やデジタル音楽
我々はデジタルであるより精通しています 音の合成やデジタルサンプリング
そして、デジタル録音。
デジタル機器の多くは、 デジタルサンプリングを介して行わ。
実際には、我々はそれらの中のいずれかを使用することがあります サウンドフォントライブラリの形以降。
>> しかし、と呼ばれるものもあります 出てきたデジタル合成
70年代後期とに」の持つ80年代 スタンフォード大学のヤマハとジョンチョウニング
FM合成を行いますか、 FM音源、
どこにキャリアを持っていました 信号と変調信号
音声スペクトルの両方。
しかし、我々は着目しているもの 今日は、MIDIと呼ばれるもので、
そしてもちろん、アルゴリズム作曲。
>> 私たちは楽器をするつもりはなく、しています 我々は、代わりにいくつかの音楽を作るつもりです、
およびその解釈を取得します いくつかの機器によってその
に適合しています 一般的なMIDI規格。
だから、MIDIは何ですか？
私は、あまりにも深くそれに入るつもりはありません しかし、MIDIデータ転送プロトコルです。
これは、全体のガイドのようなものです さまざまな企業や産業
音やパッチを整理するため。
だから我々はそれを参照してくださいよ MIDI規格があります
すべての異なる打楽器のための 音とMIDIの提言
シンセのすべての異なるタイプのためか すべての器具の異なるタイプ
オーケストラ内のグループは、言います。
>> あなたは、おそらく精通しています 0から127のMIDIメッセージ。
MIDI信号は、典型的には 1ビットを示します
それは、データまたはですか ステータスパケットは、その後あり
信号の7ビット。
そして、これらを制御することができます ボリュームからすべて
アクションや圧力に 特定のキーに
あなたは、MIDIで実行している場合 コントローラと同様に、当然のことながら、
ノート。
そしてもちろん、MIDIが持っています 非常に有用でした、
それは、ワイヤへの道だから 一緒に、またはデイジーチェーン
MIDIハードウェアデバイスの束。
私は自分の家で七、八のバックを持っています。
それは本当に複雑になります、 しかし、それは本当に強力です。
そして、それは本当に古いです。
それは1980年代初頭からだし、 それは本当に素晴らしく、小さいです。
CONNOR HARRIS：うん。
すべての古典的な任天堂 ビデオゲームは、おそらくだろう
例えば、音楽のMIDIファイルを持っています。
>> STEPHENクルーソン：ここです 一般的なMIDIの例、
種類としてMIDIを示します 一般的なプロトコルの。
そして、私たちが考えることができると思います 仕様の違い
以下のようなものがあるべきこと これらの楽器の音と実際
これらの楽器の音の実現 サウンドフォントまたは特定のMIDI IN
差であるとしてシンセサイザー 言うかもしれないtypeface--の間、
一般的に、これはのデザインです 表現するこの特定の方法
characters--および特定のフォント すなわち、特定のサイズおよび音色を有し、
そして、the--の実現があります
>> CONNOR HARRIS：たぶん より良い比較だろう
それが与えるsays-- Unicode標準であります すべての文字に番号、本当に
世界のすべての言語、 言語のスクリプトの広大なセット
世界では、その後のものです 何かグラフィカルにレンダリング
様々なフォント・パッケージによって。
そして、明らかに、あなたは考えることができ 音のUnicodeとしてMIDI。
そして、それは大きな流れof--リストだけです イベントや楽器やその他もろもろの、
あなたは、別のを持っている必要があります プログラム、書体のように、
それをレンダリングします 可聴何か。
>> STEPHENクルーソン：なぜHaskellの？
Haskellは関数型プログラミングで 言語、非常に高度な、
Cからの非常に異なります、 PHPとは非常に異なります。
そして、私たちがありますことを確認するつもりです Haskellでは関数合成のしやすさ
それは、私たちが通過そよ風することができます 構成またはアップ入力し、転写、
フレールジャックのようなもの、 このシンプルな曲その
その中に部品をたくさん持っていること 自己相似または繰り返しています。
だから、これはいくつかのことになります 理由のための動機
我々はここで、Haskellのを使用しています 関数は、ファーストクラスの市民です。
>> そして、私は延長したかったです この少し。
それはに少し簡単です Haskellでフレールジャックを記譜。
しかし、我々はしたい場合はどのような それにドラムパートを追加しますか？
私たちが作るために試してみたかった場合はどう ローランド808または909ドラムのようなもの
あなたが持っているマシン 約16の異なるステップ？
通常、これらのされています 16分音符と考えます。
そして、あなたは世界的に制御することができます テンポ、あなたが選ぶことができます
別のパーカッションパートの束 バスドラム、クラップ、異なるスネアの、
オープンとクローズハイハット チャンネルのこれらの並べ替えに、
そして、あなたはEQやすることができます 彼らの音量を調整します。
>> そして、我々は良い方法でが表示されます このステップを表すのハスケル
すべてとシーケンサ Haskellでは、様々なクールなもの
我々は発生して行うことができます リストの上のリストとフィルタリング、
リストの上にマッピング、マッピング リストに対して機能します。
そして迅速な謝罪。
これは非常に一遍です そして、過度に迅速なスケッチ
態様のいくつかの ハスケルとEuterpeaの、
ドメイン固有これは 埋め込み言語は、書かれました
Haskellでは音楽のタイプについて。
だから、オンラインコードをチェックアウトください。
グラスゴーで起動するGHCiの、 Haskellのコンパイラインタプリタ。
そして、私はいくつかをやっていますよ 少しでこれを
あなたはどのように行うのを見ることができます。
>> そして、これはあなたがで読み込むことができます 構文the--コロンとあります
コマンド。
あなたは、ファイルをロードすることができます。
あなたは、これらのファイルにブラウズを使用することができます そのすべての機能を表示するには
特定のモジュールに存在しています。
そして、として、我々は、タイプとタイプが表示されます クラスは、Haskellでとても重要であり、
あなたは常に、特にcheck--ことができます 新しいDSCLで作業している場合
このように、音楽の種類は何ですか？
私は、数値の方法について知っています タイプは、Haskellで働きます
しかし、私は音楽についてはあまり知りません。
しかし、あなたは彼らがしている方法を探索することができます このTまたはタイプのコマンドを使用して定義
して、特に呼び出し 関数やデータオブジェクト。
CONNOR HARRIS：うん。
あなたは、Cやクランを考えた場合 種類についてhardassました、
あなたはハスケルについては考えています。
ハスケルの良いところは、ということです あなたはあなたのコードをコンパイルするために得ることができる場合
そして、Haskellの型かどうかをチェックし、 それはおそらく正しいです、
型システムはそれほど厳格であるためです。
>> STEPHENクルーソン：うん。
だから、僕は行きたいです 再びthrough--と、
これは、数justice--やっていません ハスケルの特徴は、その少なくとも
そのcreators--に、それが作成されました 大勢の人たちによって、1980年代後半に、
約20の委員会 people--重要だと思っていました。
そして、最初に彼ら この論文に記載されています
ハスケルの起源を説明 最初の20年ほどにわたって
それは怠惰なことでした。
だから、これは何を意味するのでしょうか？
>> 我々はいくつかの種類を持っている場合まあ、それは意味します 式の、我々はそれを評価する必要があります。
そして、Haskellは呼び出しでこれを行います 必要な方法または非厳密な方法によって。
私たちはの束を持っている場合つまり、 私たちの表現の構成要素、
我々は、評価を遅らせることを試みます それらのサブコンポーネント
絶対最後までminute-- 私たちは実際にそれらを必要とするまで、それはです。
>> したがって、このmeans--あります 特に、本当にクール
我々は抽象化を考えている場合 音楽ステップシーケンサーの。
あなたはそれをオンにし、次のサービスを開始します ステップsequence--を実行しています
あなたは今までドラムに働いていた場合 machine--、それだけで永遠に行きます。
私たちのであれば、それは本当にいいだろう Haskellでそれをエミュレートすることができます。
そして、私たちは無限でそれを行うことができます 特に無限リストの値、。
これは、入力するのは非常に簡単です Haskellでは無限リスト。
あなただけのダウン構文を使用することができます ここでは、1〜3を参照してください場合は、
3 1ドットのドットを削除し、 それは無限のリストです
すべての自然数の拡張 限り、あなたが想像できるように。
>> 私が紹介したいです すぐに折り目の概念。
そして再び、目的 本セミナーではありません
Haskellでは折り目について学ぶために 以上の高次関数。
しかし、私はちょうどそれを紹介したいです どのように奇妙なの正確な意味を与えます
Haskellはあり、それはどのように強力な。
特に、我々はbe--するつもりです 私たちは別のドラムパートを行うとき、
我々は、のリストを操作することになるだろう 数字は、お互いにそれらを折り畳みます。
そして、我々はよ、ということを行うには 地図や折り目を使用すること。
>> 右結合があります この1右である、倍
here-- 1マイナス数量、2 マイナス数量、3マイナス0。
そして、するための構文 倍、あなたは倍に与えます
基本値とその後operation-- この場合、加減算。
私は両方の例を示しました。
そして、そのアキュムレータがあります リスト全体にわたって蓄積し、
その演算子のプラスを適用しますか、 マイナス、それを蓄積。
それが呼ばれたのであれば、これはthe--になります 、折り目rのプラス0の、0から始まります
我々は、すべてを合計することになります そのリスト内の数字。
そして、それは1〜3のリストです。
CONNOR HARRIS：だから、別のものを置くために 方法は、折り目rは3つの引数を取ります。
その関数があります 自体は2つの引数を取り、
そして、スターターの値があります、 値のリストがあります。
そして、何をやっていることはあなたが取るです スターター値、最初の値、
関数にそれらを置きます。
あなたは何を得ますか、 、それを取ることを養います
の関数に 第二の値、あなたが得るもの、
それを取る、にそのフィード 3番目の値の関数です。
それから、あなたがダウンした場合 このリスト全体このようにして、
あなたは、最終的に取得するつもりです だいくつかの特異値
あなたが開始したものと同じタイプの でアウトと同じタイプの
リスト内のもの、およびなど それは倍Rのリターン結果です
STEPHENクルーソン：だから、特に、 これらは、より高次の関数であり、
彼らは別のものを取っているので、 引数の1つとして機能します。
>> CONNOR HARRIS：うん。
あなたが特定の他のを使用したことがある場合 languages​​--私はRを知って、[聞こえません]
言語は削減と呼ばれる、これを持っています。
あなたは、同様の機能を持っている可能性があります 他の言語で、ちょうどと呼ばれます
異なるもの。
>> STEPHENクルーソン：そして 何倍Rについてうれしいです
この例ではその倍です Rは無限リストを扱うことができます。
このP5は、この底にそう ノートを生成していること
以下のためのステップ・シーケンサーでオンになっています いくつかのドラムパート、第五ドラムパート、
そして多分それはコンガです ドラムまたは何か。
そして、これは意図的です これを書いている鈍角方法、
それはので、楽しいです それは多くのことを示しています
ハスケルとEuterpea程度のものの。
>> したがって、このcolon--コロンのRは倍 物事をプッシュするだけで、オペレータ
一緒に空に呼びかけlist--に 単に空のブラケットであるリスト。
そして、私はそれを呼んでいます この無限のリストに。
これは、実際には2つのリストであります ダウンここで一緒に加えます。
リスト1コンマ6点 ドットは、1、6、11、16です。
だからHaskell--だけで いくつかの文字は、あなた
全体を生成することができます 数列
5数字が離れていること 無限に上のストレッチ。
そして、私はその前に追加 この短い少しlist--
3、8、21--だけをお見せします どのようにリストを連結することができます。
>> そして私は、それ自体に折り畳まれてきました。
そして、これはただのようなものされて終わります アイデンティティ操作が、それは無限です。
そして、それから、Rはそれを行うことができます倍 いい加減に上記のように、評価されます。
私たちは1と2と3を持っている場合、我々はできます ちょうどそれの全体の残りの部分をオフに囲みます。
それは動作しません マイナスまたはプラス、それ
このコロンのために動作します リスト上のアイデンティティ操作。
>> どのようにして、実質的に使用しないことであれば、我々 物事の無限に長いリストがありますか？
まあ、Haskellは提供します functions--たくさんの
そして、これらに多くを見ます 取るなど、独自のtime--
これは[OK]を、私たちがしている、と言います この無限のリストを生成します、
しかし、我々はいくつかを取るつもりです それの数とこのcase--で
我々は後に、これを参照してくださいよ 私たちのドラムマシンcode--
GMはグローバルのちょうどいくつかの種類であります ステップ数のための変数
シーケンサインチ
ロールインマシンでは私 あなたを示し、それは、典型的には16です
私は32でそれを実装しています。
それは本当に問題ではありません。
>> Haskellはまた純粋なので、強いています コナーはに言及した静的型付け。
だから、機能があります sense--で数学的
彼らはより多くの数学的です 彼らは保証されていること
アクセスしたり、任意の種類を変更しないように 変数や入力または出力を行います。
だから、あなたが機能を持っている場合、 それは確定的です。
それは、常に同じに戻ります プログラムの状態の値
または同じまま。
単項例外は、もちろん、存在します これに、それは私たちの範囲を超えています。
>> CONNOR HARRIS：うん。
これが何を意味するのか、しかし、そこにあります あるいくつかの重要な[聞こえません]
これの結果。
一つは、に非常に簡単だということです Haskellプログラムを並列化します。
あなたが持っている場合ので、 、その機能を言います
場合、百万の値を操作する必要があります あなたは関数が常にすることを知っています
場合は、同じ値を与えます あなたが特定のvalue--で養います
あなたは[聞こえない]のF、1のfをしている場合 2、その後、3のFまたは1のF whatnot--
書き出すするつもりはありません ファイルまたは何かをします
それは、F2の値が変更されます。
あなただけに、この機能を分割することができます 百万異なるマシンまたは百万
異なるスレッドまたは何、 すべての応答を取り戻します、
すべての戻り値を取得します バックし、その後、それはそれです。
だから物事を並列化するのは非常に簡単。
>> 欠点は、その入力され そして、出力特に
型システムに適合 非常に複雑な方法です。
私たちは今、その右に行くが、私はありません いくつかのリソースを見てことをお勧め
オンラインあなたはそれについて知りたい場合。
>> STEPHENクルーソン：だから classes--入力し、この
種類のwas--クラス 解決するために考案されました
演算子オーバーロードの問題。
だから我々は平等​​を持っていると思いました 物事の異なる種類の間で。
もちろん、我々はof--考えることができます 数値型間の平等
考えることは非常に簡単ですが、 どのリスト間の平等についてはどうですか？
間の平等について何 ツリー脚データ構造？
そして、これがすべてで可能です Haskellの型クラスのため。
>> ですから、特定のデータtype--を定義した場合 ここで、これらは、音楽のピッチです。
我々は最終的に取得しています 一部のコンピュータミュージックへ。
だから我々は、C、Cシャープを持っています などなど。
彼らはの束に属し 異なるタイプのクラス。
EQ--彼らはEQのタイプのクラスに属します。
それは、彼らがサポートして意味します 平等操作。
だから、1かどうかを評価することができます 音楽プリミティブのシーケンス
別のものと同じです。
>> 彼らは序クラスに属します。
つまり、これらの順序があることを意味します。
Dは、C、Cシャープの後に来ます 同様に、Cの後に来ます。
彼らはクラスに属し 彼らができることを意味ショー、
コンソールまたは端末に印刷すること。
彼らはに属しています クラス、列挙されました
たとえていることを意味 これらは文字で、
彼らは、基礎となる数値を持っています 0から始まる表現
としかしを通じてオフに行きます 多くのものが、ここでは20かそこらであり、
または多分30または40、。
>> CONNOR HARRIS：そして時 我々は、データ型を持ちます
それはそのキーワードでderives-- 「deriving--「特定の型クラス、
これは、コンパイラが試みることを意味し 自動的に何かを構築しました。
だから、多分あなたはしたいと思います 異なる品質を定義します。
あなたは、Cシャープを定義したいと思います 例えば、Dフラットに等しいように。
この構成によれ ここで、私はCはシャープとは思いません
Dフラットがあるため、等しくなります コンパイラが自動的になります
すべての異なる可能な値を言います 他のすべてのとは区別されます。
>> だから、上書きすることが可能です デフォルトの実装
クラスのこれらの種類の。
ここでも、参照している場合を見て あなたはそれについて学びたいと思っています。
STEPHENクルーソン：そして ここで、実際には、これは、よ
私たちは後でコーディングするときのために役立つこと。
私たちは、中置演算子のいくつかを見ます 逐次合成のために、
並列合成、など など、これらのプラスと等号
コロンに囲まれています。
それは我々がこれらの異なるを再生できることを意味します ミュージカルプリミティブ次々。
それは逐次合成です。
>> それとも、私たちはそれらを再生することができます 同時に平行です。
だから私は、音楽的価値を持つことができ、 そして、これは、等しく、コロン
中置並列合成演算子、 和音の種類としてそれらを再生。
そして、我々は使用するつもり このときに我々は組み合わせます
私たちとのドラムパート 少しフレールジャック歌
これらの二つの配列を再生します 同時に音楽の値。
>> is--カレーカリーすると、最後にありました ハスケル・カリーの名前、人
Haskellのイメージがにちなんで命名されます。
そして、これは私たちができます 私たちがしている素敵なエレガンス
すべてのこれらの異なるを書きます 私たちがしている機能やフィルタ
私たちのリストの上にマッピングすることになるだろう。
2の機能 xのF arguments--と-Y-
表すことができます。 xのfはyに適用されます。
だから、の機能です 返す1引数
1つの引数を別の関数。
だから、これは私たちがマッピングできることを意味します Yさんのリストの上にxの関数f。
CONNOR HARRIS：したいです この例を与えますか？
STEPHENクルーソン：うん。
私はここからの例を持っています 私たちが書き込むことのいくつか。
だから、よく2--複製 複製がかかります
どのように多くある一つの値、 回何かを複製します、
そしてそれはvalue--がかかります 通常、リストか何か。
そこでここでは、我々は、マッピングしています 別のリストの上に2を複製します。
>> 私たちはマップのであれば、2を複製 我々は2を複製する場合に適用されます
このlist--の最初の要素へと これらは、音楽phrases--のリストです
「あなたはsleeping--」の2つを生成します あなたが眠っている、あなたが眠っています。
だから今、私たちは2を持っています。
しかし、複製は2を取ります 引数が、我々はしているので、
カリー化して、マッピングし、 私たちは、レプリケート2を表すことができます
の関数として返されたものとして 2回だけ複製argument-- 1。
そして、我々はそれぞれにそれを適用しています フレーズのリストの要素。
>> そして、連結は、Haskellはあります リストを平坦化するための操作。
反復2になるため リストのリストを生成します。
そして、これは、この中間フォームはこちらです。
だから我々はCONCATことができます またはその倍を平ら。
CONNOR HARRIS：単純 カリー化の例、
あなたがlike--たければfはただ想像 2を取る逓倍機能
引数とその積を返します。
あなたは、F 4 5を持っているのであれば、それは20です。
しかし、あなたはと考えることができます あなたは、関数f 4を持っていますalso--
それは、引数とリターンを取ります これはちょうどargument-- 4倍
部分適用します ただ一つの引数4。
そして、あなたは4のfを養う場合 5、それはあなたに20を与えます。
そして、それは簡単です カリー化の例。
これは通常、教科書的なものの一つです。
>> STEPHENクルーソン：ラムダ 式または匿名関数
別のHaskellの特徴です。
だから我々はかき立てるする必要がある場合 少し機能のライフ複製、
しかし、それはしていないと言います 標準ライブラリ、
我々は、構文を使用することができます 次のような。
そして、我々は、この上でそよ風ます。
一つのこと、あ​​なたは内の多くが表示されます ドラムマシン、我々は電話を作っているされています
呼ばれるものに フィルターなどの前に、
関数のマッピングです リストの上に、それはです
ブール関数のマッピング。
>> だから我々はここでの例を持っています 匿名の
定義されたブール関数こと ちょうどカップルの値をとります。
これは厳密に言えばされていません 無名関数。
しかし、それはで定義されます 簡潔にするため、その構文、
これはちょうどXモジュールを取りN--
CONNOR HARRIS：うん。
そうfはの関数であります 二つの引数nおよびp
それはそれ自体が関数を返します 一つの引数、すなわちxの関数。
STEPHENクルーソン：私 中置演算子を述べました。
中置演算子は何ですか？
まあ、中置演算子は、 通常の方法、私たちは操作を表し、
mathematics-- 2プラスで、言います 代わりに、オペレータの2プラス
そして、2つの引数を2と2。
CONNOR HARRIS：それは呼ばれています である、逆ポーランド記法
この用語は、私はあなたのいずれかが知っていることはないだろう。
>> STEPHENクルーソン：右。
ポリッシュまたはプレフィックス表記を逆にします。
しかし、Haskellはすることを決めました 中置演算子を使用しています。
したがって、これらはのいくつかであります そのカスタムのもの
用に定義されています HaskellではEuterpea DSCL。
だから、これはシーケンシャル組成物でした。
これは、並列合成であり、この 並列合成を切り捨てました。
そして、我々はそれをする必要があります 私たちのドラムマシンと、
我々は最後に使用しますので、 そこにその小さなタプルのオペレータ
沿ってドラムマシンを再生します 私たちのフレールジャックの歌で。
そして、我々のドラムマシンです 無限になるだろう。
それだけで永遠に再生されます。
しかし、フレールジャックの歌ではありません。
それはそんなに長くはありません。
それだけで数小節です。
だから、としてドラムマシンを停止する必要があります 短い音楽的価値が来るとすぐに
最後に。
そして、それは演算子をinfixed それと超便利です。
>> 好きな中置記法 これは、一種のいいです
あなたのような機能を持っていると言うので、 整数の除算を与える見積もり、
何かによるxのelse-- 申し訳ありませんが、それはaとbである必要があります。
あなたはBの引用として、それを書くことができます。
だからput--要素である場合、 これの別の例。
あなたが入れた場合、いくつかのリスト内の要素x、 それがバッククォートで、あなたはそれを使用することができます。
それがシンボルではないにもかかわらず、 プラスまたはマイナスまたは時間のような、
あなたはの名前を使用することができます バッククォートでそのような関数
かなりクールです中置演算子として。
CONNOR HARRIS：繰り返しますが、これは 実際には糖衣構文、すべての。
それは言語のコアに影響を与えません。
>> STEPHENクルーソン：だから我々はここを参照してください 私たちのフレールジャックの歌の最後のフレーズ、
私はいくつかの小さなコードを果たしましたか 並列合成を使用して三分の
オペレーター。
これは、いくつかの別の言い方であります 我々だけ言ってきたものを。
だから、機能をマッピングすることができます リスト上の1つの引数の。
CONNOR HARRIS：ここでも、参照 Haskell--入門教科書
その中でこのすべてを持っています。
>> STEPHENクルーソン：だから、ここではかなりです ステップシーケンサーのキーライン
我々は、使用して見てみましょう リスト内包。
そして、私たちはここを参照してください、その要素であります バック引用符で囲まれた固定オペレータインチ
このため、xがリストの要素である場合 Xは、次に我々は、PERC関数を呼び出します。
だから、PERCは、単にパーカッション機能です。
それはだ、いくつかの値pを取ります すべての有界集合の一部
別のパーカッション・サウンド 私たちは前のスライドで見たこと、
そしてそれはことができます 四分音符の継続時間。
そうでなければそれをQNRを与え、QNR ちょうど四分音符の残りです。
>> これは素敵な何かを構築しています。
我々は、要素のリストを持っている、そして 私たち1からいくつかのリストをループよ
私たちのステップシーケンサーの最大値に設定します。
そして、我々は特定のI中にいるとき 最大値に1をそのリスト、
その私はこれのメンバーである場合 この機能で作成されたセット、
よく、我々はそれを回します パーカッションノートへ。
そうでなければ、私たちは残りの部分を、果たしています 言うことです、私たちは沈黙します。
そして、私たちはここでその中を見ることができます このリスト内包構文、
Xはこれにより移入され リスト構築1
シーケンサのグローバルなサイズに。
CONNOR HARRIS：うん。
基本的な構文 リストの内包表記であります
関連するブラケット、値 いくつかの変数、バー、
変数の可能な値 自体は、ブラケットを閉じました。
そして、あなたが設定ビルダー表記を行ってきた場合 数学のクラスの任意の並べ替えで、
あなたは、このような2N設定している場合があります なお、nはまたはであり、nはZです。
この表記thing--同様 示唆的であることを意味します
その数学的表記の。
STEPHENクルーソン：そして、あなたがすることができます 複数の述語を適用します
リスト内や、複数のフィルタ かなりいいです理解、。
代数types--たち ここに長く残ることはありません。
良い概念ではありません ハスケルまたは良い、明らかな概念
取るためにどのように、たとえば、デフォルトの 関数か何かへのパラメータ。
Pythonでは、これは非常に簡単です。
あなただけに等しいと言うことができます 関数の宣言、
デフォルト値の ケースのいずれも供給されません。
>> Haskellでは、あなたは多分できました 多分入力多分使用し、
これはどちらか何も取りません または型の値だけ。
そこで、ドラムマシンでこれを悪用します 私たちは任意のボリュームを与えることができるようにします
ドラム・パートのそれぞれにパラメータを設定します。
だから、私たちにEQを持っていることの方法を提供します または特定のチャンネルの音量。
>> CONNOR HARRIS：で 他のHaskellの例、
あなたは多分に使用する表示されることがあります 失敗する可能性があります機能。
これは一般的なものです。
>> STEPHENクルーソン：そして、あなたが供給することができます デフォルトとして、エラーメッセージのいくつかの並べ替え。
そして、それはときに特に便利です あなたはHaskellでのI / Oをやっています。
それはトリックすることができます。
CONNOR HARRIS：Orの 同様の例、と思います
分裂を伴う機能の 0であるかもしれないパラメータの。
そして、その関数ができました 多分何でも返します。
0ノー部門がないのであれば、 それだけで何を返します。
そして、除算がある場合 0、それは何も表示されません
エラーシグナル伝達の方法として。
の1つの結果ので、 Haskellの非常に厳密な型指定
何real--がないということです 例外は、基本的には、厄介です
エラー処理が厄介です。
そして、これは非常に一つであります それを行うための一般的な方法。
>> STEPHENクルーソン：だから今、私たちが得ます 別の心曲げものに
パターンであるハスケル、約 マッチング機能の定義。
私は最後のスライドでお見せしました ステップシーケンスの宣言
多分値を取った機能、 その後のint、intの、リスト、
その後のシーケンスを返します。 音楽の値があり、注釈付き
ピッチとボリュームの両方を持ちます。
>> だから、これらの3つの引数をすることができます 以下の方法でマッチしたパターン。
そして、私たちは常に確認したいです 最初のベースケースまたは終了ケースを行います。
そして、これらのアンダースコア ただ解釈することができます
あります任意の値を意味します。
我々は、コールを取得するのであればシーケンスに進みます いくつかの値が、他のいくつかの値を使用して、
私たちが望むものと、空のリスト、 戻るにはちょうど沈黙、残り0です。
>> その代わりにその 空のリストまたは0であること、
私たちがしているので、それは、残り0です 音楽の種類を扱います、
音楽の空のリスト タイプは、ちょうどなし期間の残りの部分です。
それは音楽ません。
私たちはステップを得ればそして、我々が見ます ボリューム引数のVを有する配列、
念の楽器用のp 引数、およびその後のxのリスト。
>> その後、我々はいくつかのものを行います。
特に、我々が適用されます。 このリスト内包、
そして、我々はいくつかを実行します 多分値の操​​作
ように数値にそれをオンにします それは、その後に列挙し、使用することができ
楽器を選択します。
再び、これは少なく ビット故意inconcise
ただ、すべての変なものを表示します あなたのようにHaskellで行うことができます
あなた自身の時間にそれを見てみましょう。
>> 大丈夫。
だから我々は最終的に取得しています 私たちが行うために着手した何を、
これは一部のコンピュータで音楽を作ることです。
だから我々はしようとするつもりです フレールジャックの曲を作ります。
だから、どのように多くがあります フレールジャックでフレーズ？
四。
グレート。
そして、何の素敵なのはということです 彼らはすべての繰り返しです
2である回の同量。
>> だから我々は、4つのフレーズを持っています それぞれを2回繰り返しました。
特に、彼らはラウンドにしています。
そして、多くがあります 実装するための多くの方法
行うには楽しいことができたラウンド。
私はそれをやりました ここではかなり簡単な方法、
これだけの行をconstruct--することです 機能は、音楽の値のリストを取り
そして、逐次合成に変換します そのシーケンシャル組成物を適用することによって
オペレーター。
>> そして、私は別のパーツを遅らせます 作ることによって、それらは残りで始まります。
だから私は2つのメジャーの残りの部分で開始し、 して、4小節の残りの部分、
して、6の残りの部分 対策、およびその後のラウンド
我々はすべてこの歌を知っているように、動作します。
我々は2つ​​の注釈を参照しますか、 音楽値の変更
この連続的に含まれていること 楽曲構成要素の配置。
我々は、追加のボリュームを持っています。
これは、注釈を付けるための機能です 特定のボリュームで音楽。
これは良い例です MIDI信号走行
の0から127まで、7ビット 実施することができる情報。
>> そしてthen--我々は非常にそれを見ました 簡単に、しかし、一般的なMIDI
すべての異なるインストゥルメントのリスト。
そして、彼らの全体の多くはありません。
あなたは、デジタル・オーディオ・ワークステーションを使用する場合は、 AbletonのライブやPro Toolsのような、
信じられないほど広い範囲があります シンセサイザーやVSTインストゥルメントの。
しかし、MIDI規格のみ いくつかの、または数十されています。
そして、それらのいくつかは面白いです。
私たちがプレイした場合、私はそれは楽しいだろうと思いました 楽器MIDI機器
ヘリコプター、その後、 ラウンドを通して次のようにして、
私たちは、その後の、パッドシンセをしました この陳腐リード方形波シンセ、
し、その後、泥を音声であります 私の悪いMIDIに少し不明瞭
シンセサイザーが、彼らは[OK]をクリックします。
>> そして、我々はこのLETを見ます 構文でハスケルから、
し、我々はプレーしています 一緒にすべてのこれらの部品
並列合成演算子を持ちます。
そして、我々は、おそらくこれのいくつかを示すことができました。
ここでは、コードです。
そして、あなたがC言語で見ることができ、そこだろう 咳払いや設定の多く
あなたの前にテーブルコード このような音楽を作ることができます。
あるいは、他のプログラミング 言語、あなたはおそらくしたいです
のいくつかの並べ替えと対話する必要があります ライブラリやAPIとすべてのものを設定し、
そして、あなたはクリーンアップする必要があると思います。
しかし、ここではHaskellではかつて、私が思うに、あります あなたは信じられないほど、それのこつを得ます
読みやすく、非常に表情豊か。
だから、実装があります フレールジャックの。
大丈夫。
今、私たちは、打楽器を追加したいです、 これは少し乱雑です。
それでは、スライドを見てみましょう。
だから、大きなアイデアは作ることです リストや部品の束。
これらのロールインマシンでは、そこに 多分8について、一般的でした
10リズムやパーカッションの部分に。
そして技術の束を使用しています。
そして、我々はthese--は使用方法について説明しました 折り目、フィルタ、ラムダ関数、
値を生成するために、リスト上にマッピングされました いくつかの範囲で1〜Rに、Rは、16であります
やシーケンサーで32段階。
>> そして、そのリストの値があるかどう 我々はシーケンサを介して実行しているとして、
以上のそれを実行し、 オーバー、それはそのノートをオンにし、
そしてそのサンプルがトリガされます。
ここではすべての異なる奇妙な方法があります 私はノートを生成することを思い付きました。
独自のセミ合計でそれを試してみてください。
それはクールに聞こえるでしょう。
許可時間は、我々は、この通過します。
しかし、今、私は推測します 我々は持っているものをデモする必要があります。
のはこれがOKになる期待しましょう​​。
>> だから、これはGHCiのです。
そして、我々はファイルをロードします 私はと呼ばれるsong.lhsを持っています、
これは私はあなたを示したファイルです。
[OK]を、素晴らしいです。
コナーは、先に述べたように、 コンパイルされ、それをチェック入力し、
私は簡単に多くのことを呼吸することができます。
それは私に爆破するつもりはありません。
>> 私はあなたに有益な何かを示したいと思いました。
あなたはAを参照してくださいすることができます ロードされたモジュールは、50と呼ばれます。
あなたは、そのモジュールを閲覧することができます。
そして、これはとてもいいです doing--について多分何
あなたがHaskellでやっているではありません ソフトウェア開発と呼ばれます、
しかし、あなたはの多くを行うことができます 自分で楽しいもの。
ワークフローは、本当に素晴らしいです 他の言語の多くと比較して、
あなたは本当にで見ることができるので、 何が起こっているのか読みやすい方法。
だから我々は我々が持っていることを確認 すべてのこれらのフレーズ、これ
我々は、次に、音楽ピッチのリストであり、かつ より大きなものにこれらを構築​​、
どの楽曲です。
これは音楽ユニットです。
そして、我々はこのすべてを再生することができます プレイの音楽と呼ばれる機能を持ちます。
あなたはここでそれをダウン見ることができます。
どれだけ果たしています。
>> 私は約話をしなかったsay--必要があります どこでもだこのドル記号。
ドル記号は、別の中置演算子です。
しかし、それは最も低い優先順位を持ちます 効果的に任意の演算子の
上のすべてを意味します ドル記号の左側
ドル記号の右に、 我々はそれの前に評価取得するつもりです。
だから、一種の別のようなものです 括弧を追加する方法。
>> CONNOR HARRIS：それは基本的にです 関数合成。
そして、それはあなたがあればhave--ていないことを保証します あなたは、機能面や中置のいずれかを持っています
いずれかの側の事業者、彼らはしません それを越え関連付けて、あなたを与えます
予期しない結果。
>> STEPHENクルーソン：だから私たちはcan-- それを使用して、我々は呼び出すことができます。
まず、ドラムなしでそれを再生します。
それは、ヘリコプターです MIDIヘリコプター。
>> [音楽再生]
方形波があります。
音声にじみ出ます。
そして、あなたは本当にこの野生行くことができます。
私はかなり単純なものを選びました、 私が知っていたので、私はオフにかまないようにしてください
私はかむことができより多くの。
ただ、非常に単純に保ちます 主なアイデアを表示します。
しかし、私のような、私たちがしました これにいくつかのドラムを追加しました。
これはちょうどので、 少し不可解な、
私は使用しませんでした ドラム・パートの名前、
彼らはしているので、私はthem--マッピングされました その列挙クラスの一部、
私はint型にそれらをマッピングしました。
一つは、バスドラムのようなものです。
ゼロは同様です。
セブンは高い帽子です。
そして、ダウンここでの場所 関数は、もう少しランダム入手します
これらは、コンガドラムのようなものです。
>> ですから、about--多分思われる場合 ドラムマシンを実装するための楽しい方法
非常に整然と使用することです あなたのバスドラム上のパターン。
だから例えば、上でフィルタリングを バック与えるすべてとリスト
それは、モジュール04を撮影しています1。
だから私は、1、5、9、13、17--ので、これを取得します すべての小節の1拍目です。
>> そして、これは同じです 事は、2つのステップの上にシフトしました。
だから、風変わりです。
だから、これは次のようになります ハイハットのようなもの。
そして再び、ダウンここでは、 それは、少しランダムです
我々はコンガドラムをやっているので。
そして私も、ここでいくつかのマラカスを下に持っています。
>> だから私は、プレイドラムマシンを呼び出すことができ、 それは永遠に行くだろう、
それがアップつかん開始する可能性があります 私のシステムのすべてのメモリ。
だから私は、この関数を呼ぶことにします 、私たちが見るような音楽を再生
切り捨て並列合成を使用 私たちの小さなフレールジャック曲を再生します
この奇妙なドラムマシンと一緒に。
それでは、見てみましょう。
そして、私に向上させるようにしてください すべてのドラム・パートの配置。
ていない私の専門が、私 それをやって多くの楽しみを持っていました。
>> [音楽再生]
>> もちろん、だから、これがすべてであります 楽しみとして少しありません
我々はそれを変換することができない場合 スコアに非常に多分それ
解釈される可能性 人間の演奏者。
だから私はここでそれを実行されません。
私はすでにファイルを生成しました。
あなたはそこだと見ることができます ドットLilyPondのfile--とこの
の上で、私のセグエになります Connor--ドットMIDIファイル、
そして何ドットのPDFファイルは、 LilyPondのは、最終的に生成されます。
>> しかし、これらはそれらのスクリプトであり、私はよ ちょうど彼らのヘルプオプションでそれらを実行します。
あなたはこれらを取得し、実行している場合で Euterpea、あなたはMIDIファイルを生成することができます。
そして、MIDIファイルから このMIDI 2LYプログラムと、
あなたはリリーを生成することができます 池ファイル、およびその後
スコアのPDFを生成することができます。
そして、私たちはこれを見てを取る必要があります。
だから、コナーはおそらく表示されます あなたはどのように、この優れた注釈を付けます
これはフレールジャックなどであります Euterpeaで私によって生成されます。
それはちょうど、Cで私が考え出している必要があります ハックは、それが実際に何があるかアウト。
しかし、それはのためのパイプラインであります あなたはそれでそれを行う方法について説明します。
それでは、LilyPondの詳細をお話しましょう​​。
>> CONNOR HARRIS：[OK]を見てみましょう。
あなたはあなたのHaskellを学ぶ言及しましたか？
STEPHENクルーソン：そうそう。
チェックアウトあなたのHaskellを学びます。
これは、リソースにあります。
それは私が始めた方法です 学習、それは素晴らしいことです。
ダムはありません学習。
>> CONNOR HARRIS：だから、それはオンラインです。
だからという名前の男[聞こえません] learnyouahaskell.com、スペースなし。
文法は病気です。
STEPHENクルーソン：それはあまりにも、図示されたのです。
CONNOR HARRIS：LilyPondのは、だから何ですか？
これは、宣言型プログラミングです 音楽組版するための言語。
だから、あなたができますdeclarative-- HTMLのようなものを考え、
あなたはHTMLをsaying--ていない場合は どのようにWebブラウザがすべきと言っていません
ページをステップバイステップでレンダリングします。
それはちょうどこれを言っています テキスト形式の記述であります
あなたが望むもののページは次のようになります。
>> そしてそれはまた、プログラムの それがこの言語をコンパイルし、
またはそれは実際にその中を読み、 あなたのための組版を行い、
そして、それはこれらを吐き出します 素晴らしい見て、PDFのスコア。
また、PNG形式または何を得ることができます。
考えるための良い方法 この類推であります
乳液は一種のLillyPondのようであるということです、 しかし、普通の組版のため。
だからではなく、それはありませんof-- 何を参照してくださいWYSIWYG、
たとえば、のような、あなたが得るものです フィナーレである、またはシベリウス、
あなたが入力できるまたはMicrosoft Word、 リアルタイムでリアルタイム、ドラフトもの
そして、瞬時に変更を参照してください。
>> これは、テキストベースにしています。
あなたのをコンパイルする必要が 別のプログラムを使用してスコア
以降PDFファイルを取得します。
これは少し小さいです あなたがしている場合の使用に便利
直接書き込むしようとしています 君がいるとスコアへ
コンピュータ上で構成しようとしています。
しかし、たくさんあり​​ます それのための利点。
一つは、それは、多くの見た目が良くありません LillyPondが実際に可能性があるため
行うには時間がかかります 適切なレイアウトの決定、
持っているシベリウスやフィナーレとは異なり、 そう妥協のアルゴリズムを作るために
彼らが表示されることができること リアルタイムでの事。
>> なぜLilyPond--です コンピュータ・グラフィックスは困難です。
あなたが音楽で何かをやっている場合 あなたがスコアを書きたいです、
次のように記述する必要はありません 自分ですべてアウト
描画する方法で始まります スタッフとどのようにメモ帳を描画します。
これは非常に困難です。 これは、以前に行われています。
あなたは罰金しています。
>> あなたがフィナーレやシベリウスを使用する場合は、 それらの事のためのファイル形式
非常に複雑であり、あなたがすることはできません 本当にプログラムでそれらを使用しています。
あなたはフィナーレとシベリウスを開くことができます そして、PDFとして、自分自身をエクスポートするファイル]
しかし、あなたは本当にすることはできません スクリプトからそれを呼び出します。
LillyPond、あなたが呼び出すことができます それらのスクリプトから。
あなたは簡単に繰り返すことができ 乳液でLillyPond。
私は行くために、その多くの時間を持っています 今これらの技術に、
しかし、彼らは存在しています。
あなたが見たい場合は LillyPond帳に、
それが付属していたプログラムです あなたのLillyPond分布、
それは反復のためです ラテックス中にLillyPond断片
あなたが何かをしたい場合 大きな音楽学の文書のような
例えば例、と。
そして、それはのために良いスキルです あなたは何をやっている場合の生活
音楽だけでなく、CS50と。
私はすべてのためにLillyPondを使用しました 私の組成のプロジェクトの
私は基本的だったので、 高校3年生。
>> そこでここではいくつかの簡単な例です。
これは基本的に代表的なものです 難易度の
そのほとんどの人だろう 彼らがしようとしていたそれに直面
単純なプロジェクトのためのLilyPondを使用しています。
この最初のものが始まりです バッハのコラール前奏曲に。
このボトム1は抜粋したものです 自分の作品の一つから、
それは表示するだけであります あなた[聞こえない]のようなもの
同じで複数の行を入れて スタッフ、どのように歌詞undersetting作品。
リリック下敷きは非常だものです 合唱曲のためのLilyPondを使用して簡単にできます。
>> それで、その後いくつかの詳細があります ここでは複雑な例。
これらはすべてで行われています LilyPondの彼らは可能です。
この最初の抜粋はからです [聞こえない] [聞こえない]によります。
そして、この[聞こえない]から ソロ低音のための作品
[聞こえない]フルート、 誰がlongtime--が誰ですか
の長年のメンバーでした ここでは音楽部門、私は思います。
私は彼がにオフになくなってどこか分かりません。
しかし、彼はハーバード大学の顧問でした 長い時間のための作曲家協会。
素晴らしい人。
そして、彼は非常に持っているいくつかの音楽を書き込み 複雑な表記ことLillyPond
それにもかかわらず、非常にうまく処理することができます。
>> だから、あなたに何の意味を与えるために このことの機能はとてもare--
LillyPondの内部 非常に複雑です。
そして、あなたはそれを使用することができます 長い時間、などの
いくつかの非常に複雑なため 本当になしのもの、
それらについて多くのことを知っています。
基本的な考え方は、上のものです 最低レベル、LillyPondsの原子
ノートはあります。
ノートには含まれてい コンテキストと呼ばれる声。
だから、音声コンテキスト 基本的には対応して
ポリフォニーの一行に。
そして、コンテキストがすることができます 階層的に含まれています
より高いレベルのもので スコアにスタッフを表します
様以上のグループ ピアノのスタッフや聖歌隊のスタッフ、
最終的には、その後、 全体のスコアコンテキスト。
そして、あなたは実際に包含することができます 本の中で複数のスコア。
>> そして、すべてのコンテキストが持っています 添付の彫刻の数。
あなたは目を通す場合 コンテキストの内容
および特定のシンボルまたは印刷 必要に応じてシンボルの特定のクラス。
すべての音声文脈にそう、 [聞こえない]ノートがあります
基本的機能である彫刻家か すべてのノートを書き出し対象
ページの右側の部分にヘッド。
その後裂け目彫刻があります、これは スタッフの裂け目を書き出します。
その後、メトロノームがあります マーク彫刻こと
スコアにメトロノーム記号を書き出します。
そして、これらすべてのはかなりフィット よく階層に。
そして、それは非常に、非常に、非常にです あなたが必要とする、カスタマイズ可能
あなたはそのようなものを取得したい場合。
>> だから、すべてのコンテキストを持っています 異なる属性の多く
あなたはすべてのために変更できること 様々なフォントに間隔から
物事の大きさに選択。
あなたもやってみたい場合 より複雑なもの、
埋め込まれたスクリプト言語があります。
彼らは、スキームを使用します LISPの方言です。
これらはおそらくありません あなたに何かを意味します。
しかし、基本的には、スキーム 別の機能
プログラミング言語、多かれ少なかれ。
>> STEPHENクルーソン：タイインチ
>> CONNOR HARRIS：うん。
それは良いタイアップだ、私は考えます。
そして、それは指導言語として使われています、 実際に、マスアベニューダウンMITで。
そして、それはLillyPondのために非常に便利です 様々な技術的な理由のために。
>> だからあなたは、単純なようにしたい場合 条件文に依存しての調整、
example--のために特定あります 会ったの得点の条件、
に変更を加えます レイアウトやその後whatnot--
これらの施設があります。
彼らは複雑です。
だからここに非常に単純なコードサンプルです。
それは5行です。
基本的に、私は2つのスタッフを定義しています。
それは3/4であります。
最初のスタッフが持っています テンポマークが取り付けられ、
それは実際に起こっています スコア全体へ行くために、
なぜならテンポマーク スコアレベルです。
メトロノームマークの彫刻家 コンテキストを獲得するために装着されています。
異なるキーがあり、 [聞こえない]彫刻家のため
スタッフに取り付けられています。
あなたが実際に行うことができます。
私が書いたサンプルです 実際にCメジャーで、
それだけにです あなたが持つことができる実証
別のスタッフで異なるキー。
そして、基本的な構文は、あなたが書いています E、F、G、何と名前をメモします。
あなたが臨時記号をしたい場合は、 あなたはISまたはESサフィックス。
これはオランダからのものです 音楽学の規則。
>> そしてオクターブ跳躍を行うには、あなたが使用する必要があります これらの目盛り、コンマやアポストロフィ。
相対ちょうど手段 あなたがノートを持っているものは何でも、
それは自動的にplaecなります 以前のものに最も近いオクターブ。
そして、あなたはより多くをジャンプしたい場合は fifth--は、第5または第more--言います
あなたは[聞こえない]を使用する必要があります。
しかし、そうでなければ、あなたがする必要はありません 一つ一つの音符のオクターブを指定します。
>> そして、相対C、プライムと、 Cは、あなただけの中央のCを指定します
ベースC、特に最初のノート。
次に、整理、これらのスタッフを持っています これら二つの声や音楽のサンプルを、
あなたはスコアを持っています。
そして、それは次のようになります。
>> あなたは、時間を取りたい場合 LillyPondのサンプルをコピーします
以前のコード ここで下にスライドし、あなた
LillyPond自分自身でそれを書くことができます。
私たちは何かを持って知っています それは次のようにたくさん見えます。
だから、別の技術があります 維持と呼ばれる音楽のXML
全く異なる人々による。
XMLはテキストデータstructure--私です データが言うstructure--言うべきではありません
のメタファーマップソート。
そして、それは保持するように設計されています 階層データは非常によく。
HTMLは、例えば、XMLの一種です。
彼らので、そして、あなたはXMLを伝えることができます すべての角括弧と角度を持っていました
ブラケットスラッシュ記号 すなわち、データフィールドを示します。
>> 私は、コードを持っていません 音楽XMLの例。
あなたはそれを自分で見つけることができます。
基本的には、理由はあなたがお勧めします 中間段階としてXMLを使用します
最初にすべての、それはだ、です 交換フォーマット
基本的に私が言うべきではないevery--用 すべてのが、異なるスコアをたくさん
作家。
あなたが音楽で書くのであれば XMLだけでなく、LillyPondでき
このauxilaryの助けを借りてそれを読みます プログラムは、LYに音楽XMLと呼ばれます
だけでなく、フィナーレを読むことができます それは、Sibeliusはそれを読むことができます。
どのようにあなたの内部オブジェクトに応じて 階層は、音楽を表現するために働きます
書き出すためにそれが簡単になります 音楽XMLへLillyPondより
ちょうど音楽のXMLに依存しています LYへの変換を行います。
>> 私は[聞こえない]音楽のXMLを持っているとは思いません。
STEPHENクルーソン：それはありません。
誰かがしかし、それに取り組んでいます。
>> CONNOR HARRIS：[OK]をクリックします。
Euterpeaはありません まだ音楽のXML出力機能。
あなたが最終的なプロジェクトのアイデアをしたい場合は、 多分みんなと連絡を取る
スティーブンが知っている、と 彼らはあなたの助けを使用することができます。
>> STEPHENクルーソン：私はそれを愛するだろう。
CONNOR HARRIS：また、基本的には、 すべてのプログラミング言語
それは、その塩の価値があります 既にXMLライブラリを持っています、
あなたはすべて内部で変換することができます あなたの音楽のいくつかのオブジェクトに
XMLライブラリを書くことができること それは、より少ない必要となる外
あなたの内部構造への変更 何のための音楽はあなたをオブジェクト
それを書くよりも、書きたいです 直接LillyPondであろう。
それからちょうどXMLとしてそれを印刷 あなたの言語のXMLライブラリ、
それはだことを保証れます 構文的に正しいとすべてのもの、
そしてその後LillyPondに変換します。
だから、技術、あなたはしたいかもしれません あなたが何かをやっている場合に見えます
このような。
>> [聞こえない]、他 auxilarry技術。
これは基本的にテックワークスです またはLillyPondための技術メーカー。
だから、のヘルプを提供しています テンプレートと構文、
様々な一般的なのために 器具の組合せ。
それはそう見て分割画面を許可します あなたは1つのウィンドウであなたのコードを持つことができます
別ウィンドウでPDFと PDF内の場所をクリックしてください
関連にジャンプします ソースコード内のスポット。
あなたが実際にしている場合、これは、より便利です LillyPondファイルを自分で書くこと
あなたが発生している場合よりも、 それらをプログラム。
しかし、再び、それはです あると便利なもの。
>> グレート。
別resources--私はちょうどよ 非常に迅速にこれを通過します。
LillyPond manuals-- LillyPondています 同社のウェブサイト上の優れたドキュメント。
彼らは、チュートリアルを持っています。
彼らは、構文のリファレンスを持っています。
彼らは、スニペットの数百を持っています 様々な小さなもののために
ヨーヨーは、実証するために行う必要がある場合があります 様々な機能を提供します。
あなたが使用したい場合 スクリプト言語
またはより広範囲にします カスタマイズ、そこです
内部はそのURLで参照します。
あなたは音楽のXMLを使用する場合は、あります そのURL、musicxml.com/tutorial。
>> そして、あなたはスキームを学ぶ必要がある場合 あなたが実際に使用したいので、
LillyPondでスクリプティング施設、 その後、[聞こえない]と呼ばれるがあります
構造化された解釈 コンピュータプログラムの、
これだけでなく、秒です 史上最高のCS教科書written--
あなたが知りたい場合は、その後私を見つけます 私は最大の1 is--どう思いますか
それはまた、非常に良いことです 適切な言語を紹介。
あなたはより多くを必要としません 最初のいくつかのセクション。
>> そして、それはそれです。
質問は？
>> 学生：私はダウンロードすることができます あなたの生成フレールジャック
だから私は自分のiPodにそれを置くことができますか？
>> STEPHENクルーソン：まあ、あなたが書くことができます EuterpeaでいくつかのWAVファイルにアウト。
そして、あなたはコードを持っています。
これはGitHubの上です。
独自のバリエーションを作ります CS50ハイブ心によってフレールジャック。
それは素晴らしいことだ。
CONNOR HARRIS：他の誰？
STEPHENクルーソン：私たちは、必要 より良いバスドラム、あまりにも。
それは本当に悪いです。
>> 学生：Euterpeaだけでなく、持っています 組成側が、signal--
STEPHENクルーソン：はい。
実際には、仕事私 ときに私Euterpeaでやりました
this--がありました エールでコースを卒業しています
it--音合成にあった使用しています。
だから、本当にあります 矢印を使用して良い方法
そして我々が見た表記法の一部 信号機能を一緒に構成します。
ほとんどのための具体的には、低音 それらの単純な正​​弦波です。
しかし、あなたはそれらを構成する起動した場合 奇妙なプログラム的な方法で、
あなたはクレイジーサウンドを得ることができます 奇妙なカスケードのような効果、。
あなたは非常にザラザラ作成することができます 変調の多い鳴ります。
>> 私は粒状でプロジェクトを行いました ある合成、
どこかでFMおよびサンプリングの間です。
あなたは、非常に小さく取ります その後少しサンプル、
のいくつかの並べ替えでそれらを組み合わせます 変調器と豊かなサウンドを構築。
また、そのように、物理的なモデリングを行いました 物理学について考えるようにしよう
そして、のようなものの心理 トランペット、および方法を考えます
音が跳ね返るています トランペットのベル
との音響 部屋とモデリング
基本的な発振器です。
CONNOR HARRIS：本当にありがとうございました。
来ていただきありがとうございます。
そして、私はいつもに喜ん email--によって質問を取ります
connorharris@college.harvard.edu。
>> STEPHENクルーソン：うん。 stephen.krewson@yale.edu。
クール。