>> SAM GREEN：こんにちは、誰もが。
私たちのセミナーへようこそ。
私の名前はサムです。
HUGHザブリスキー：私はヒューです。
SAM GREEN：そして、私たちは今日の話をするつもりです JavaScriptとウェブオーディオAPIについて。
ちょうど開始するには、これは概要であります セミナーのための私達の議題の。
私たちは話してて開始するつもりです なぜあなたは、Webに興味があるべきです
オーディオAPI、なぜJavaScriptがあります あなたはそれのために必要な言語、
そして、その後のJavaScriptについて話します 、のようなのでessentials--
いくつかを順を追って 言語の基礎、
そして、その後の話を 高いレベルでのオーディオAPI。
その後、ヒューはいくつかについて話します オーディオ・プロダクションの段階の
して、この素晴らしいシーケンサーをデモ プロジェクト彼が構築され、あなたのコードを示します。
そして、我々は時間を持っています 人々のための最後に質問
ここに住んでいる人。
>> HUGHザブリスキー：クール。
>> SAM GREEN：クール。
>> HUGHザブリスキー：クール。
私はバックアップされます。
>> SAM GREEN：だから、最初の最初のもの。
素晴らしいことの1だから、 ウェブオーディオAPIについて
必要な一切のセットアップはありませんということです。
これは、内蔵の来るに 最も近代的なブラウザ、
クロム、エッジ、全体を含みます others--すべてのものの束
の大部分その 人々が今日を使用しています。
だから、何のセットアップはありません、 脇だけ取得から
以下のために、行くのWebサーバー あなたの作業を始めるために
素晴らしいですプロジェクト、上。
>> 我々は非常にお勧めします 重くあなたが検討することを
以下のためにChromeを使用して JavaScriptのWeb開発、
理由だけで、その開発者 ツールは本当に強いです。
我々は意味だけで何の例として、 言って、あなたはJavaScriptを開きます
あなたはクロームに行けばconsole-- あなたは、任意のWebページを見て、
あなたは左クリックし その要素を点検し、
あなたはこの小さなドロップダウンに行きます 右ここで、あなたがコンソールをクリックし、
あなたはアップが見えるもの開きがわかります あなたコマンドプロンプトのようにたくさん
お使いのMac上で、またはIDに表示されることがあります。
そして、ちょうどそのように、我々はできます タイプはクリアのように、ここではコマンド、
そのような他のコマンド。
我々は、変数を作成することができます 私たちには、JavaScriptの後半で表示されます。
だから私たちが何かできること JavaScriptは、我々は、コンソールで行うことができます
それはスーパーに便利な方法です APIで遊んで開始
とに慣れます バットオフJavaScriptの権利。
いいえセットアップは必要ありません、 これは本当に素晴らしいです。
クール。
驚くばかり。
>> だからもう一つ追加します。
あなたが任意のquestions--を持っている場合があります ここにいない人、あなたの多くが住んでいます、
us--これらの電子メールを送ること自由に感じ 私たちの電子メールアドレスです。
ご質問がある場合 あなたは私たちに依頼したくありません、
ああ、私はバグを持っている、のような 私のコードで、または何か
それは、もう少し具体的です 多分最初にそれをGoogleに。
偉大な資源がたくさんあり​​ます そこにウェブオーディオAPIについて。
それは本当によくです 文書化され、それがされています
の人々のトンで使用されます 産業、ちょうどある人
自分自身のための楽しいものを構築します。
だから、たくさんあるはずです そこにリソースの。
驚くばかり。
>> クール、なぜウェブオーディオAPIの？
この図は少しあります 方法の進化の
ウェブ上の音は、時間の経過とともに成長してきました。
BGSOUNDは、元のHTMLタグのようでした Internet Explorerをサポートするために使用されるもの。
それだけでかなり基本的な音のために許可され、 機能性は、非常に堅牢ではありませんでした
あなたが行うことができませんでした 複雑なシーケンシング、
音の開始時または制御 そして、非常に堅牢に停止しました。
だから、それは特にありませんでした よく発達。
そしてその後、フラッシュ along--これが来ました、
私はあなたたちはすべて理解していることを確信しています Flash--とそうでないかもしれないそれがどのように動作しますか、
しかし、あなたは確かにそれを見てきました。
あなたはフラッシュを更新するために持っています プラグイン、もののすべてのようなものを、
それは確かに範囲を拡張しました 利用可能だった機能の。
しかし、ユーザーがインストールすること プラグインは間違いなくあります
フラッシュなどの欠点 あなたのアプリケーションで、右か？
あなたが依存しているため、 ユーザーが行くと、このプラグインを見つけ、
おそらく回転されます この余分なステップバイオフ
彼らはあなたのアプリケーションを使用するために取らなければなりません。
そして、アップデートがあるかもしれません それはあなたのアプリケーション全体を破りますよ、
そして、それは悪夢なってしまいます あまりにも、開発者のため。
だから、バリケードました。
>> そして、その後に沿って来て、 HTMLオーディオタグ、どの
より近代的なHTML--の機能があります 確かに、より多くのもののため許可され、
それでも物事はあなたが行うことができます 少しはそこ限られていました
物事の結果として、 そのHTMLは可能でした。
だからときにはJavaScript API、ウェブオーディオAPI、
標準になりました ブラウザ間での練習、
それは実際にセットを拡大し 開発者のための機会を
本当に建物に取得します Web用のクールなもの。
長い時間のためにそこにいました 本当に堅牢なツールとなって
ネイティブオーディオアプリケーションのために、 誰もがGarageBandのを知っていますlike--、
して、明らかにそれ以上が存在します プロオーディオミキシングアプリケーション、
とかのようなもの。
しかし、ありませんでした 本当に良いCloud--ありません
クラウド、ええ、私は推測します Cloud--ウェブベースのプラットフォーム
それは、開発者ができるようになります 人々のためのアプリケーションを構築します
オーディオミキシングを行います。
そして、彼はあなたが表示されますように 後で、ウェブオーディオAPI
本当に強力を可能にします 本当に単純に発生するもの、
これはかなりクールです。
だから、なぜあなたに命令です セミナーの残りの部分を監視する必要があり、
基本的には。
>> そして今、私は約話をするつもりです いくつかのJavaScript--だけの基本的な要素
言語の、ように 私たちは、同じページにすることができます
我々はについて話すとき API少し後で。
クール。
>> だから、これは要約です。
私はこれがここにあったのを忘れていました。
うん。
>> HUGHザブリスキー：ここに2つのスライドがあります。
>> SAM GREEN：これは要約です 制限のいくつかの
他の結合、古い方法の。
そして今、我々はこれらのものを持っています。
クール。
驚くばかり。
>> だから、JavaScriptの必需品。
最初のものは、最初に、あります かなり有意差
Aにおける対JavaScriptで 以下のように、Cのような言語、
変数が作成されます。
だからCに、我々は持つに慣れています 私たちの変数を入力するには、右？
そして、私のようなタイプを意味するものではありません それらを入力し、私は種類を意味します
以下のような彼らにtype--意味を割り当てます 以下のように、int型、float型、char型。
Cでは、私たちは本当にするために使用されました 変数を作成すること
そして、その後のためにその型にこだわります 我々はその変数を使用して全体の時間。
そして、それは、必ずしも悪いことではありません しかし、それはおそらく使用が困難です。
クールな機能の一つ JavaScriptはあるの
変数はと呼ばれるものであることを これは「動的型付け」
私が作成できることを意味し その構文で変数、
VARXには、例えば、5に等しいです。
それは、もともと作成します 整数variable--
右下 フードsomewhere--けど
その変数を変更することができます 文字列を参照するために
以下のような何もせずに 新しい変数を作成します。
私は心配する必要はありません タイプの変更について。
JavaScriptはタイプのことを知っています 変化し、それが動的に行われます。
>> だから、メリットがあります それには欠点、
で働いていますように誰も しばらくの間、JavaScriptが知っているかもしれません。
時があります。 誤っかもしれません
変数の型を変更し、 そのタイプの変更を処理していません、
そして、あなたのJavaScriptの crash--または例外ことができます
あなたが持っているだろうから、スローされます あなたは一つのタイプを期待間違ったタイプ。
クール。
>> 私たちならば、同様のであるだから、scoping-- コー​​スの初期の数週間を覚えて、
どのように見える変数を参照 で、コードのどの地区に立地しています。
すべてのことは、非常に似ています それはCでの見え方に
だから変数は、一般的にスコープされ 関数内の中括弧内に、
そして、その後もあります そのグローバルスコープの変数
変数を書く場合are-- 関数の外に、
それは、テキスト全体に表示されます。
>> 違いの1つ 特に、JavaScriptとC、
場合は、グローバルに宣言することです テキストフ​​ァイル内の変数の任意の場所
それが任意の関数に見えるのです そのテキストフ​​ァイル内。
それは右、正しいのか？
>> HUGHザブリスキー：うん。
>> SAM GREEN：だから、も少しです Cに比べて少しファンキー、
我々は常に持っていた場所です。 場所上記の変数の定義
それらを使用しました。
それは強制の法則ではありません もう、そう、少し異なります。
そして再びちょうど再び強調するために、 ローカルvariables--対グローバル
あなたが持っている可能性がCに非常に似て 同じ名前の2つの変数、
そして、自分の名前のいずれかを持っているが影にします ローカル変数によって、これらのいずれかが
グローバルました。
のだから、同じような種類 あなたのいくつかの問題
一部でに実行した可能性があります あなたの問題のこれまでに設定します。
クールなので、それが変数です。
>> 制御フローのような意味 IF-else--論理stuff--やループ。
そうで開始するには、これが何であるかのif-else 文では、JavaScriptのように見えます。
様々なものの配置 行に重要ではありません。
これは単なる慣習の一つであります 方法のために、私たちはコードを構造化します。
ちょうどCのように、私たちは持っています かっこステートメント」であれば」。
それは私が何を意味したものではありません。
私は再びそれをやった。
>> HUGHザブリスキー：終了しようとすると？
SAM GREEN：いいえ、私は ただズームインしようとしています。
それは問題ではありません。
>> だから、私たちは「IF」ステートメントを持っており、 我々はそれの内部に条件を持っています
それは、真または偽と評価され、 それがいるか否かを判定する
我々は、コードのブロックを入力してください。
そして同様に、我々は他の-場合があり、 我々はCで慣れているだけのよう他に、
>> また、かなり快適でなければなりません 右のループを有するバットオフ、
彼らはまた見るため Cのようにたくさん見えます。
しかし、あなたは再び、我々に気付くでしょう 代わりに初期化int型の、持っています、
我々は、VARの初期化を持っています。
そして、私はあなたが持っていると思います 作るために注意します
あなたが値を変更しないことを確認 私のint型から文字列に、
例えば、そのために起こっています あなたがないかもしれない奇妙な行動を引き起こします
期待しています。
しかし、これはなっているはずです かなりおなじみの、同様に。
>> 物事がに始めるところこれがあります JavaScriptで少しクレイジー取得
Aから起こっている誰かのために Cの背景機能があります。
JavaScriptであり、一つの方法があります 見える関数を宣言すること
Cに類似のソート、 その別のものがあります
種類の異なる見えます。
>> 最初のバージョン、 私たちはここで見ることができ、
ここで、Cライクの一種であります 我々は、これは機能である、と言います
それに名前を与え、与えます 引数の数、
機能の、その後内容 それらの中括弧の内側に移動します。
我々は、例を参照してくださいよ ちょうど秒で引数。
>> 次の行にのに対し、我々はああ、参照してください。 ここと呼ばれる変数」てmyFunctionは、 "です
私たちはこれにそれに等しいです そのfunction--ジェネリックthing--
起こって何かを持っているように思えません。
違う理由 Cには、JavaScriptということよりも、
関数型言語と呼ばれるもので、 またはこれは意味し、機能的な要素を持っています
関数は実際の値であること。
そして、それは我々が設定できることを意味します 機能を等しくするための変数
次にその機能を移動 周りに、それを引数として渡し、
もののすべての種類を行います 機能を持つような。
>> note--する一つの他の事 機能が書かれています
引数の特定の番号を指定します。
私たちは、関数の例を参照してくださいよ 次のスライドに引数で。
しかし、JavaScriptはしません あなたがしようとした場合、あなたに叫びます
で機能を使用するには 引数の数が誤っています。
それはちょうど作るために最善を尽くします あなたが渡した場合ことを意味し、実行し、
あなたが期待する関数を呼び出します 引数なしの引数、すべてのこと
それは最善を尽くしますされて発生します 試してみて、そのコードを実行するには、
それが最終的に実行された場合 例外またはエラーに、
その例外をスローするだけしておこう going--だけの方法の一つであります
JavaScriptが動作します。
うん。
>> 観客は：何が起こる場合 あまりにも多くの引数がありますか？
SAM GREEN：だから 質問は何が起こるか、でした
あまりにも多くの引数がある場合は？
そして、答えはということです JavaScriptはちょうどます
あるものを無視します ものの後にそれは期待しています。
これは、関数を実行しようとするでしょう それだけで最初の二つであるかのように呼び出します。
右？
>> HUGHザブリスキー：そうだね、うん。
同様に、そこ あまりにもいくつかの引数は、
それだけの種類のすべてにnullを与えます 引数はそれが任意の値を持っていません
ため。
>> SAM GREEN：缶 あなたならば、実際に、便利なこと
その機能を書きたいです 可変数引数を取ります。
あなたには、デフォルト値を設定することができます 関数の定義、
それは事実を無視することができます 入力がないということ。
だから私は少し話をしたいです この最後の弾丸の詳細
機能する点は、値です。
これは一例です 少し心吹き
あなたはそれを読み、考えていない場合 第二のために何が起こっているのかについて。
それでは、ただ見てみましょう ここでは最初の行。
私たちは、私たちが言うことを、この変数、F1キーを持っています このことを行う機能です。
また、機能の内容 （ 'こんにちは'）CONSOLE.LOGされています。
あなたにはconsole.logを考えることができます printf関数のJavaScriptの同等。
だから、何が起こるかと、ある我々 私達のブラウザでこのコードを実行します、
それは文字列を印刷します。
私はそれを実証することができます。
聴衆：ログでは、しかし、ことはありません それはどこかに記録されています意味ですか？
SAM GREEN：うん。
だから私は起こることを何が起こっているかを紹介します。
そこで問題は、ログには何を意味したのですか？
>> HUGHザブリスキー：だからにconsole.log Cのprintfのようなものです
SAM GREEN：だからにconsole.log printfのようなものです、
私はこれにconsole.logを持っている場合（ 'こんにちは'）、 私は呼んでいる、文字列 "こんにちは"
コンソールにプリントアウトされます。
これはコンソールです。
それはちょうどprintfの、のようなものです それは、標準出力に出力します。
そして、我々は分で表示されます、 これは実際には
コンソールのオブジェクトを参照します、 そのオブジェクトのメソッドを呼び出します。
それはより多くの意味を行います 分でときに我々
話に行きます JavaScriptでのオブジェクト、
が、私はちょうどそれを言及だろうと思いました。
HUGHザブリスキー：私たちはしています C言語でに慣れ、right--
我々は通常、大きなプログラムを書きます 主に何かをします。
しかし、どのようなJavaScriptでクールなのはあなたです 通訳のこの種を持っています
リアルタイムで実行されますので、 線でちょうどラインをとり、
それだけでその場でそれを解釈することができます。
そして、それはを追跡します 前に実行されたもの、
それはにかなり便利なツールです 、にconsole.log、またはコンソールを使用します
一般的に、単に再生します JavaScriptで周り。
>> SAM GREEN：だからこれに戻って コー​​ドの2行目をexample--
ここではかなり気が遠くなるような私の頭の中にあります。
私はこれを読んで初めて、 それは何が起こっているかのようでしたか？
だから何が起こっていることは、これです 関数の宣言は述べています、
私はF2と呼ばれる機能を持っています それは、fは一つの引数を期待しています、
そして、それはそれを呼び出します 関数f、その
引数として渡されました 引数なし自体に。
だから、それは混乱していたかもしれません。
f2はF1を取るとして、私たちはこのことを理解していれば 引数として、その後、F2の内側に、
fはcalled--する手段を取得 このコード行こと、
次の2行の後 コー​​ド、「こんにちは」の結果
コンソールに出力されています。
>> 我々が通過することができるという事実 周りの関数値として
ほとんどの一つなってしまいます JavaScriptを強力な機能
プログラミング言語として。
すべての外 それを行うことができます素晴らしいもの、
ただの特徴として、 方法の観点から言語
それは、物事が容易になりますことを プログラムし、可能にします
特にありませんもののため ウェブによく適し、
関数型プログラミングと機能 JavaScriptをプログラミング側面
最もの一つです 強力な概念こと
あなたは私に言わせればJavaScript--に存在します。
クール。
>> そこで、次の事。
機能的であることに加えて、 JavaScriptを要素もあります
オブジェクト指向であること、 これは非常にの一つであります
コンピュータサイエンスの人気の話題の言葉。
オブジェクト指向プログラミング 本当に人気のものです。
JavaScriptはそのバージョンを持っています、 私は、すべての値でもあると考えているところ
そのすべてのオブジェクトを意味し、オブジェクト、 値をいくつか一緒にラップします。
シンプルな値、等のためのそう VARXような整数は、5に等しく、
そのオブジェクトだけでは一つの値をラップします。
>> しかし、我々はまた、状況を想像することができます 我々は、C言語での状況を考えることができますwhere--
我々がやってみたかった場所 構造体で何か、
例えば、それは、いくつかのラップ 一緒値との作り
それは本当に簡単に周りのものを渡すことができます。
オブジェクトはJavaScriptであるときです。
>> これは覚えておくことが重要です 私は、オブジェクトがラップされていることを言うとき
一緒にいくつかの値の数、 関数でもあること
関数ができることを意味した値、 また、JavaScriptオブジェクトの内側にあります。
重要だと理由 一方、私たちはしばしば、ということです
メソッドを呼び出すと思います オブジェクトに
その他の人気用語の 人気のオブジェクト指向言語、
ここでの違いの一つは、ということです この方法では、JavaScriptにあるすべてのこと
値は、オブジェクトの内部に格納されています それはおそらくいくつかaction--を行い、
内側にある他の値を使用して、 そのオブジェクトの、必ずしもそうではありません。
だから、私は、状況を想像することができます クレイジー方法の少しで推測、
あなたが1つに記載の方法と呼ばれる場所 例えば、別のオブジェクト上のオブジェクト。
だから、それはそのように少しファンキーです。
>> そして、あなたはまた、方法を変更することができます オブジェクトに関連付けられています
そのメソッドaを割り当てることによって、 また、新しい機能、
他からかなり異なります オブジェクト指向言語、
我々は、オブジェクトを宣言したら、 でインスタンスを作成し、
私たちは、ある方法を変更することはできません。 もうそのオブジェクトに関連付けられています。
だから、かなり違います。
クール。
>> そこでここではまず、例です、 アクション内のオブジェクトの。
これはと呼ばれるものです 汎用オブジェクト、どの
それはいずれも有していないことを意味し 特定の名前は、クラスを持っていません、
それは、値のちょうどいくつかのラッピングです。
そして、見え方は、私たちが持っている、です ここでは、中括弧のこの外側のペア
JavaScriptに示すこと これはオブジェクトである、と言います。
その中の値 各値は、内部にあります
そのすべきオブジェクトの 一緒に包まれます。
そして、そのオブジェクトの内部に、 我々は、キーと値のペアを持っています、
キーは名前を指します オブジェクトの内部値の、
およびその他のside-- コロン反対here--
実際の値は、 それが保存されるべきです。
>> だから、私たちが持っていることをここで見ます 値SAM​​とFNキーと呼ばれます、
コンマに続きます、 次のエントリに言って。
そして、LNと呼ばれるキー、 緑の値は、
コンマに続きます、 「印刷」が続きます
関数値を持っているつもりされています それは、このコード行を実行しようとしています。
バックステップを見てみましょうし、 ここで何が起こっているのか解凍します。
これは、少し複雑です 私たちは新しい何かを見ています
初めて。
「この」キーワードは新しいものであり、 我々はここで見て、これは何をしています
、ある電流であります スコープ内のオブジェクトは、右？
だから我々は、これを言うとき、 すべての帰り道ポイント
この全体のobject--へ 我々はthis.fn行うとき、
我々は戻ってすべての道を行くつもりです このオブジェクトに、FNの値に行きます
サムを取得し、それをすべての方法を引っ張ります バック、ここでそれを固執し、その後に移動します。
>> 聴衆：だから検索して、あります そのため、パラメータの検査は行われ
定義？
SAM GREEN：質問があったので、あります 検索のためのパラメータの検査は行われ
定義？
うん、絶対に。
何ここで起こるだろうことで、 この点ではJavaScriptを言い、
[OK]を、私はいくつかの値を取得しています このオブジェクトから自分から。
そして、それはエントリを探します FNと呼ばれ、それを見つけた場合、
それはそうvalue--、それはサムのことを戻ります。
しかし、私はまた、入力されたている可能性が ここで定義されていなかったもの、
そしてそれはちょうどだろう 復帰しますundefined--
事は、JavaScriptができることです 利点を持つことができ、実行、
あなたがタイプミスをする場合、それは、also--です それは奇妙なエラーが発生することができます。
だから、ちょうど見つけるしようとするでしょう あなたは見つけるためにそれを伝えるものは何でも
それはするつもりはありません それが見つからない場合は文句を言います。
それはちょうど私がしなかった、と言うでしょう それを見つけ、その後に移動します。
だから、未定義であろう プラス空白、プラス姓。
うん。
そして、我々はそれを見ることができれば、我々 その後、下に行くとaccess--可能性
我々は括弧でtf.print（）を呼び出します。
それは、その印刷を呼び出すために起こっています 引数なしの関数、右？
しかし、我々はちょうどtf.print（言ったら） セミコロン、括弧なしで、
行ったであろうすべてのことを引っ張っています 値から関数うち、
しかし実際にそれを呼びません。
クール。
HUGHザブリスキー：万一 我々は、オブジェクトを作りますか？
SAM GREEN：確かに、のはそれをやらせます。
だから私はこれを移動することができます コンソールに例。
私たちは、私は、オブジェクトを持っていることを想像することができます。
これは単純なオブジェクトです。
これは、2つを含むオブジェクトです 2キー、2キー値を持つ値
ペア。
だから私はその後、格納された値にアクセスすることができます x.x1を実行して、このオブジェクトの内部に、
例えば、私は1を取り戻します。
同様に、x.x2は、その値を取り戻します。
>> そして今、本当にクールなことは、私ができる、あります 実際にこのオブジェクトに何かを追加
私はそれを作成した後。
だから、してみましょう、想像することができます 私は機能を持っていると言います。
>> HUGHザブリスキー：あなた Shiftキーを押しながら入力しなければなりません。
>> SAM GREEN：ああ、それは迷惑なんです。
それが何を好きではなかったですか？
ああ。
さあ。
クール。
>> だから、僕は作成しました この関数f、その
現在に移動しようとしています オブジェクトと印刷this.x1。
だから私はちょうどによってFを呼び出す場合 それ自体は、何も起こってないです
何x1が存在しないため、右、発生します それが参照していますオブジェクト内のフィールド。
しかし、私はその後、x.f = F、と言う場合、私 x.f（）を呼び出して、私は戻って1を取得するつもりです。
そのF関数は今 オブジェクトxと関連付けられ、
キーと呼ばれるX 1を有します 値1に関連付けられています、
我々はthis.x1を呼び出すときに、それはです それが探しているものを見つけるために行きます
値をプリントアウトすることができます。
だから、ほんの一例です クレイジー物事の種類
あなたは、JavaScriptでのオブジェクトで行うことができます。
>> だから、そのバージョンでした ジェネリック版、意味
我々はこれを使用してオブジェクトを作成したこと 、notation--ブレース表記を括弧
rather--それです 便利な私たちはしたい場合
特定のオブジェクトのインスタンスが、 私たちは複数のを持つようにしたい場合
同じ種類の？
そしてその答え 質問は、ものがあります
同様に、JavaScriptでのクラスと呼ばれます。
私たちは、その関数を作成することができます 初期のいくつかの並べ替えを行います
異物のために、 私たちは次のように、と思い、
名前ので、私のclass-- 再利用可能なobject--の
それを設定する関数に等しいです。
だから、これは同等であるもの そのオブジェクトを作成しています
同じようになり、 中括弧、STR、コロン、
これは文字列です、 セミコロン、中括弧。
それは一般的なことだろう 我々は初期化オブジェクト、
1の差が上にあると 次の行我々は、プロトタイプを作成します
それはデフォルトのキーであることを意味しています 私たちは、オブジェクトに追加すること
ここに記載されている値を持っています。
私は新しいを作成すると、その意味 このMyClassのオブジェクトのインスタンス、
それは、内部​​にあらかじめ組み込まれているために起こっています それSTRと呼ばれる値と別の値
これは、myPrintと呼ば 機能になるだろう。
驚くばかり。
>> グレート。
だから、最後に JavaScriptのについて言います
それは何のために本当に便利だということです 非同期操作と呼ばれます。
非同期手段、我々です いくつかの操作を待つことができます
私たちが移動する前に完了するために 上のが、私たちは待っている間に移動します
そしてその後、何かが後に起こりました。
そして、私はそれの意味することは、あなたです どこ状況を想像することができます
あなたは、リクエストを送ります どこかのウェブサーバ、
それが戻ってあなたを送信するために起こっています データのいくつかの大きな塊、右？
そして、あなたのユーザーがで待つことができます その間それが起こるためには、
何もすることができませんでした その時に起こっています。
しかし、それは右、素晴らしいデザインではないでしょうか。
あなたは、Webページがフリーズする必要はありません。
どのようなユーザーがしたい場合 ドロップダウンメニューをクリックしてください！
それは偉大なデザインパターンではありません。
その代わりに、基本的にはどのような JavaScriptは、言うされません
[OK]を、非同期的にこの操作を行います。
だからのような、バックグラウンドで待機し、 そして、操作が行われたとき、
コー​​ルバックを呼び出しますfunction-- いくつかの関数を呼び出し、
ことを知らせるために、いくつかのaction--を行います 私たちは最後まで待っていた操作
終わりだ。
そして、超強力な理由があります、 私たちは、何かをする引数を渡すことができ、
何かをしてから、待ちます 起こることを何かのために。
そして、その何かに一度 完了したら、我々はコールバックを呼び出すことができます。
それができますので、それは本当に便利です 私たちは、ウェブオーディオAPIで物事を行います
例えば、負荷AN様 リモートサーバからの音声ファイル
待たず オーディオファイル全体をロードします、
これは本当にだろう ユーザーエクスペリエンスのために悪いです。
クール。
>> 約最後のカップルノート この以来、デバッグ、
あなたがする必要があるとしているものです あなたのプロジェクトの一環として、保証されています。
私は、JavaScriptコンソールに言及しました。
これは超便利機能です すべての最新ブラウザの、
そして、私たちは本当に取得することをお勧め 快適なごコンソールを使用して、
あなたには、JavaScriptで良い取得したい場合。
それはのための超便利です デバッグが、それはまたです
把握のために本当に便利 APIを使用する方法を。
それは実際にすることが可能 簡単な実験
一部を入力することなく、 コー​​ドは、それをコンパイルします。
あなたはこれらすべてのステップを行う必要はありません。
あなただけ書くことができます ラインにいくつかのコード、
そして、その後にすぐにフィードバックを得ます コー​​ドの線を引くかどうか
非常に便利なworked--。
>> そしてまた、ただ一つの技術的note-- JavaScriptコンソールは一例です
、REPL--のそれは、R-E-P-Lですので、REPL これは、読み取りの略で、評価し、
printループ。
あなたはいくつかのものを入力しようとしています で、それはあなたが入力したものを読みますよ、
それを評価するだろう、それが印刷されます 出力し、それが再び開始します。
それはあなたが迅速で行くことができます 本当にクールである、反復円。
>> 私はこのnote--本当の最後を推測 はい、実際の最後のノートです。
どのように我々は、実際にはJavaScriptを使用していますか？
したがって、最初に、我々はインポートすることができます スクリプトタグを使用して
HTMLの上部または下部にfile-- 任意の場所にHTMLファイルの内部に、
本当に。
スクリプトタグ内に存在し、 JavaScriptをインポートする二つのサブ方法。
最初は持つことです 個別のJavaScriptファイル
私たちは、その全体をインポートすること、または スクリプトのようなコードの面積を有することにより、
その後起動し、します バックスラッシュスクリプトが終了します。
そして、我々はただ書きます HTMLファイル内のJavaScript。
これらは2つの方法があります。
あなたは、HTMLの中にそれを持つことはできません。
観客は：一方が他方より優れているの？
SAM GREEN：質問がありました、 一方が他方より優れています。
だから、はい、コーディングスタイルの実践として、 また、それは設計の練習のようなものです。
2つの理由があります なぜそれが良いかもしれません。
最初は、それはあなたのコードAを行い、あります あなたのHTMLのすべてのなら、もっと多くの読みやすいです
あなたのCSSがすべてであり、一つの場所にあります すべてのJavaScriptの別の場所、
3位です。
右？
私たちはすでに話をしているべきだと思います それについてCSS--どのようなsections--で
そのis--それは行きます 多くの場合、別のファイルです。
だから、ここの概念の似たようなもの。
あなたはまた、JavaScriptを想像することができます 複数のに再利用されます
HTMLページ、または多分 非常に多くのHTMLページ、
そのJavaScriptを持ちます 1にリファクタリング
インポート可能なファイル 複数の場所に
コー​​ドができるようになります 方法より保守。
あなたは1を作る想像することができます JavaScriptに変更
それを変更すること 100別のファイルです。
その代わりに、我々はそれを変更することができます 方法より強力であるもの、です。
私は、あなたの質問に答えるましたか？
クール。
>> また、コンソールに入力することができます 我々は前に述べてきたように。
そして再び、最後note-- オーディオが内蔵されているWeb、
あなたは何をロードする必要はありません。
クール。
ご質問がありますが、あなたが持っています JavaScriptのについての多くの質問、
我々は上に移動する前に？
>> 聴衆：[聞こえません]
SAM GREEN：すべての権利、涼しいです。
だから今、彼は、APIについて話をするつもりです。
>> HUGHザブリスキー：クール。
おかげで、サム。
>> SAM GREEN：確かに。
HUGHザブリスキー：素晴らしいので、 我々は、JavaScriptから上に移動します。
だから我々はのいくつかについて説明しました JavaScriptを必需品、
そしてそれらは、変数、関数であり、 オブジェクト変数として機能します
非同期ロード。
これらはあなたなすべてのものです あなたがウェブオーディオを使用するように参照してください。
だから我々はただ話をするつもりです ハイレベルの第1は、約。
>> これは、APIですので、それは何か サムが言ったようにそれは、構築されています、
右はJavaScriptに コンソールで使用すること。
そして、それは単にC ++のコードのように、実際にです それは本当にクロムに組み込まれています
Firefox、およびこれらのブラウザのすべて。
ウェブでの主なアイデアだから オーディオは、あなたが持っているということです
オーディオのパイプラインのこのような、右？
だからあなたのオーディオデータ 何らかの形で入ってきます。
>> 三つの主要なforms--の種類があります。 あなたは、発振器を持っています
正弦波、余弦波を作成し、 我々は、それがどのように動作するかを参照しようとしています。
別の非常に一般的なもの、 もちろん、MP3です。
だから、多分あなたはで始まります 歌、その後
いくつかのフィルタリングをしたいです それを出力します
そのthat--可能な源である可能性があります。
そして、本当にクール 一つはマイクです。
だから、非常にいくつかを使用することができます JavaScriptで基本的なコール
へのアクセスを取得します マイク、もしそうであればあなた
アプリを作りたかったです ピッチ検出器のような、
例えば、それが中に取り あなたの声と出の図
それにpitch--非常に簡単な方法。
あなただけの種類のそれを読むことができます で、周波数を把握、
そして、出力数。
だから、我々としても、それがどのように機能するかを見ていきます。
>> 宛先は基本的に ここで、音声データを出力します。
そこで、一般的に、それはようなものです ノートパソコンのスピーカー。
その他のオプションは次のようにしています ScriptProcessorNode--
我々は内のノードを取得します second--しかし基本的には、
あなたは音を出しているのいずれか お使いのコンピュータを介してスピーカーから、
または、あなたは一種のように、それを記録しています あなたは、オーディオデータとして保存しています。
ので、多分誰かが作成した場合 あなたのアプリで音楽をして、
あなたはそれを記録すると、おそらくのような example--ため、SoundCloudがにエクスポート
それはそれを行うための一つの方法であろう。
すべての楽しいもの、 これは私たちが話しましょう​​、
これらの2点間起こり、 私たちは音楽を読み込む場合は
その出力されます。
>> だから私は、5つの話をするつもりです 第二の音声生産段階。
我々はと呼ばれるこの事を持っています AudioContext、これ
私たちはここを参照してください、この小さなラッパーです。
基本的に私たち場合is-- AudioContext 今はJavaScriptコンソールにアクセスし、
我々は今、1を作成することができます。
REPLのちょうど例、右？
我々は、読んでいます、 評価し、それが出力します。
>> AudioContextはグローバルな状態です。
これは、オブジェクト構造体だい ここで、それは情報を保持
起こっていることについて 音声に関する画面上。
一つの例は、現在の時刻です。
これはあなたの番号を伝えます 秒、非常に正確に、
Webページ以降ロード。
だから、これは本当に便利です あなたが使用できるほとんどのプロパティ。
それは私が実際に考えてonly--読みました あなたは、値を設定してみてください。
それはあなたがそれを設定教えてあげましょう、 そして、あなたはそれを印刷する場合
again--それは実際には非常に仕事をしませんでした。
だから、読み取り専用です JavaScriptでのプロパティ。
これがあれば非常に便利です あなたが種類の同期しています
異なる多くの あなたがしている情報、
種類の異なるサウンドを演奏。
>> もう本当に便利1 コンテキスト先があります。
もし興味があるなら間違いなく、あること 独自のコンソール右側でこれをしよう
今。
だから、これはAudioDestinationNodeです。
基本的に、これは言っています、 出力はどこに行くのですか？
だからここに二つの実のオプションがあります。
通常、デフォルト ちょうどあなたのスピーカーで、
そうAudioDestinationNode 基本的には言います
音にゼロ出力があります 入ってくる、スピーカーに送信。
ですから、一般的に、あなたはしないでください それをプレイしています。
あなたが実際に使用してに興味があるなら 記録のためのScriptProcessorNode、
間違いなく私撃ちます それはだから、後に電子メールで送信
もう少し複雑。
しかし、一般的に、あなただけのようなものです 何らかの形で音声を出力します。
だからクール、我々はここに戻ってジャンプします。
観客：ごめんなさい。
HUGHザブリスキー：うん。
観客は：私はあなたが話をすると述べた知っています あなたにそれ以降の記録について。
あなたはそれは、Pro Toolsとのインタフェースすることができますか？
>> HUGHザブリスキー：Pro Toolsと？
どれどれ。
私はそうは思わない。
だから、クライアントの間で起こって、 JavaScriptはこれです
コンソール、および実際の コンピュータは、一般に
親切な何か 立ち入り禁止、あなたの場合
種類the--の性質によって、意志 それは、デザインの事のようなものです
しかし、あなたは別のブラウザを維持しよう ユーザの実際のコンピュータから。
一般的に、唯一のあなたのことができますよ アクセスは、マイクやカメラです。
あなたは、私にできませんよ Pro Toolsの使用、とは思いません。
ただし、作成した場合 Pro Toolsのトラック、
あなたがそれをロードすることができ、ことをエクスポート ここで、例えば、それをフィルタリングし、
それを記録し、処理 オーディオDestination--または、no--球
プロセッサノード。
そしてそこから、あなたは可能性 あなたは、SoundCloudがにそれをエクスポート
電子メールで送信、または可能性があり あなたはそこから好き。
>> しかし、わずかなバリアのようなものがあります お使いのコンピュータで音楽を作るの間
オンライン音楽を作ります。
>> SAM GREEN：そして、それはです このAPIに固有のものではありません。
これは、クロームのセキュリティ機能だし、 私は他のすべての最新のブラウザだと思います。
ブラウザは、自己完結型です。
したがって、たとえば、Webページができません サウンドを有効にするJavaScriptを使用
スピーカーの上に、例えば。
それとも、お使いのコンピュータの電源をオフにすることはできません。
そして、何の中間点はありません これらの二つの間に、右、
あなたが持っているので、どちらか 完全な抽象化、
またはあなたが開きます させるのセキュリティ上の欠陥
悪意を持つプログラマありません 彼らはあなたのラップトップを持って好き。
Chromeは自己完結型である理由、それはです。
>> HUGHザブリスキー：うん。
それは理にかなっていますか？
クール、クール。
私はちょうどに行っていました 一方の例を示します。
これは、かなりあります これまであなたが用語で、得るよう
ユーザーのコンピュータにアクセスします。
あなたは、プラグインのUSBキーボードを使用している場合は、 あなたは、Webと呼ばれるものを使用することができます
MIDI APIを、どの我々はしません 本当にここの話を、
しかし、これはだ別のAPIであります 再び少なくともChrome--に組み込まれ、
我々はChrome--を愛する理由です 私は、FirefoxやSafariのだと思います
これは非常に簡単です 別のブラウザを持っていますgoogle--
別のサポート 彼らが実施しているAPIを使用します。
しかし、あなたがキーボードに接続したい場合 その情報と連携、
種類のキーボードを送信 コンピュータに超える情報
そして、そのオンライン、このAPIを使用 あなたがそれを作業するだろう場所です。
>> クール。
OK。
だから、すぐにここに移動します。
どのように我々は時間にやっていますか？
>> SPEAKER 1：約15。
>> HUGHザブリスキー：15分左？
うんいいね。
だから我々はここで先にレースします。
>> したがって、基本的に、の主なポイント パイプラインとしてこれを考えて
であるパイプラインの各ステップ オーディオ・ノードの系列です。
われわれの情報源は、のは言わせ、発振器です。
私たちは、発振器のノードを作成する必要があります。
そして、それはちょうど一種であります 少しfunction--の
そして、彼らはすべてのアウトベースしています ここでは、オーディオコンテキストの。
>> 観客：それは言いました 発振器、それはどういう意味します
実際に、文字通りから起こっています 前後に二つの異なる極？
>> HUGHザブリスキー：いいえ、それはのようなものです デジタル表現。
これは、実際にはC ++で実装されています。
私は実際の仕様を知りません それは実際に実装されていますどのように、
しかし、これはすべてのバイナリデータとして働いています。
実際に、ええ。
それは私ができた、と言ってされるだろう 実際に、もし興味があるなら、
私はあなたにもう少しを送ることができます どのように波形に関する情報
デジタルフォーマットを有する保持されます。
うんいいね。
>> だから我々は、正弦のような音を生成しています 多分、波またはそのような何か
440ヘルツ。
我々は発振器を作成します。
我々は、ボリュームを設定したい場合は、我々 GainNodeには何も接続し、
これは私たちが.creategainで行うことができます。
それはあなたの音量を設定します。
あなたは、任意の上にそれを渡すことができます options--他の、
そうオーディオバッファソース ノードがどこにあるかもしれません
あなたがロードしたMP3を格納します。
>> バイカッドフィルタがあれば、フィルタリング用です あなたはアウトすべてのベースを利用したいです
曲、またはそのような何かの。
神は、あなたが利用したい禁じます 曲のうちベース。
そしてAudioDestinationノードは、再び、あります 私たちのファイナライズがどこにあるかのように。
あなたは今まで見に興味があるなら すべての異なる可能なオプション、
ちょうどタブに移動してみましょう オートコンプリートが出てきます。
あなたが作成しなければ、あなたがすべて表示されます あなたが作成することができます別のもの。
あなたは、動的に作成することができます スクリプト・プロセッサ、
私も何のことを知りません チャネル合併を混合するために、あります
チャネルスプリッタおよびすべてのこと。
クール。
>> だから、これはただです パイプラインの例。
だから我々は、次の3つのソースが入って来ています。
多分これらの波形であり、 多分これらはMP3ファイルです。
一つは通って起こっています フィルタ、別の1の
歪んなっ別 自分のパンを左右しました。
あなたは物事のすべての種類を行うことができますし、 それらはすべて、一緒に周りの混入します
して、出てくるオーディオを 最後に、宛先として。
これは、より多くの例です 複雑なウェブオーディオコードは次のようになります。
あなたは、これらすべてを作成しています 異なるオブジェクトを右here--
私はこれがわからないんだけど。
いいえ、それはズームインしません。
OK。
>> SAM GREEN：あなたがコントロール、スクロールアップを行います。
HUGHザブリスキー：コントロールScroll--
SAM GREEN：いいえ、ありません。
制御 -
>> HUGHザブリスキー：ああ、コントロール、スクロール？
落とし穴、ああ。
うん。
いや、いや、すごいです。
OK。
私はそれを行うことはありません。
>> そうそう、この中で最初に ここのセクション、あなたが見ます
我々はすべてのこれらのさまざまなを作成しています コンテキストのうちのノード。
私達はちょうどそれらを縫い合わせています 一緒に第二部で
コネクトと呼ばれるこの機能によって。
それは本当に重要なのです ウェブオーディオで機能。
それはちょうどあなたがやった後に意味します 1ノード内の音で何か、
次のノードにそれを渡します。
だから我々はソースを持って、それを アナライザに接続し、
アナライザはそれで何かを、 それは、そうで歪みに進み、そして
目的地までの 右ここ一番下にあります。
クール。
[OK]を、私たちは上の移動しておこう。
>> pipeline--再び、これらの 最も一般的なパイプラインは、
私たちは次のようにこれらすべてのことについて話します 歪み、パンニング、すべてこのようなもの。
あなたは本当に興味があるなら 物事にはPro Toolsを使用して、
それらはおそらく、あなたの興味をひきます。
そうでない場合は、多分あなただけの サウンドを再生したいです、
または多分あなただけしたいです 音の音量を設定します。
これらは最も一般的な二つのソートされています オーディオ制作におけるパイプラインの。
>> ここでも、方法はあなたがそれを取ることができます そうoscillator--ように、してみましょう
右ここでそれのデモを行います。
だから我々は、作成しようとしています ここで簡単なオーディオコンテキスト、
それから、私たちはつもりです 私たちの発振器を作成することができます。
だからつまり、再び、私たちはしています 発振器を作成呼び出すつもり。
私たちは、上の周波数を設定しようとしています その、440ヘルツ、みんなのお気に入り。
その後、我々は先にそれを接続します スピーカーですpoint--ので、
コンテキスト先。
最後に、私たちは言う、ゼロを開始 今から秒、我々は音がありますか？
>> [RINGING]
>> HUGHザブリスキー：ここに私達は行きます。
それはちょうど正弦波です。
うんいいね。
そして、我々はそれを停止します。
>> 聴衆：やりました そのフィードバックから来るの？
>> HUGHザブリスキー：フィードバック？
ああ、おそらく私たちのマイク。
そうそう、それはあなたがそれを行う方法です。
そして実際に、私が持っていた場合 あなたは、それが走り続け
周波数を有することができます それが実行しているとしての価値、
そのためには、周りを再生するのも楽しいものです。
クール。
それは常に存在する可愛らしい一つです。
>> SAM GREEN：私たちはしませんでした それについて考え、私たちはやりましたか？
HUGHザブリスキー：うん、 それは厄介な一つです。
だから、私は紹介loading--バッファ 非常に最後にその例を示します。
それは、MP3をロードしています。
そして、マイク、あなただけの関数を使用します Navigator.getUserMedia（と呼ばれます）
ユーザーのへのアクセスを要求します その情報のためのマイク。
>> ここでフィルタリングだ、私はよ これだけで動き続けます。
これは、かなりハイレベルであります しかし、フィルタは、ちょうどあなたができるようにします
>> [ビープ音]
フィルタリングはまたことができます ピンクのようなものを作成します
ノイズ、ブラウンノイズ、ホワイトノイズ。
あなたは純粋なノイズを作成したい場合は、これ 一部の人々は、と周りを台無しに愛して
あなたは、Webオーディオを使用することができます それを行うためのフィルタリング。
>> オーディオPanning--はとても想像します あなたはこのゲームを書いている場合
あなたは音がしたいです それは次のように、来ているように聞こえます、
あなたは、画面上で撮影します オーディオのパンを使用することができます
コー​​ンのこの種を作成するには、 それはかなりMathyさんですlike--、
それは本当に実際にです クールなあなたはそれを動作取得する場合、
そして、いくつかの良いがあります その上チュートリアル私はあなたを送信することができます。
基本的には、親切なことができます 音を作成します
3Dのようにで行く何かの。
あなたがDJの関心を持っている場合は、次のことができます 混合開始し、曲をクロスフェード。
>> これは単にいくつかの非常に基本的なものです コー​​ド、基本的に私が前にやったこと。
これは、音量を設定します 発振器、私たちは私たちの発振器を作成
どの波形を作成します。
私たちはGainNodeを作成し、 私たちの周波数を設定し、
そして、その後に発振子を接続 その後、基本的に変化しGainNode、
どのくらいの信号通過を許可されています。
しかし、実際に、それはデジタルです 事、それはええjust--以上だそう。
それは実際に何が起こっているかではありません、 それが実際の生活の中で何が起こるかです
ゲインと。
>> 聴衆：--quantization 音量パラメータの？
HUGHザブリスキー：申し訳ありませんか？
観客は：それです 量子化されたボリュームのパラメータ？
HUGHザブリスキー：うん。
そして、これは本当に私は一つのことです 私の知識での欠損、
どのようにゲインは、デジタルレベルで動作します。
私は実際に知っています 信号、それは基本的にです
あなたがしているどのくらいの制御 信号を増幅します。
だから、うん。
私はあなたについての詳細をお送りします 私は実際に好奇心旺盛になるだろうから、その
それについての詳細を知っています。
しかし、基本的なパラメータ 一つはfold--で、あります
大声signal--とゼロはnoです 信号、または何も聞こえません。
私たちはそのためのデモの時間をスキップします それは私が前にやったことは基本的です。
そして再び、Context.Destination オーディオ宛先ノードです。
恐ろしい、[OK]をクリックします。
>> だから私は、迅速な2デモをするつもりです。
どのように我々は時間にやっていますか？
>> SPEAKER 1：約10分。
>> HUGHザブリスキー：10分？
すばらしいです！
驚くばかり。
>> だから私はするつもりだ最初のもの 、それは私のお気に入りの曲と呼ばれています。
だから、これはただです 少しHTML JavaScriptを。
我々は2つ​​のボタンを持っているつもりです ページ上の私のお気に入りの曲を再生
私の好きな​​曲を停止します。
私はこれを変更します。
>> 聴衆：マイクをカバー。
>> HUGHザブリスキー：うん。
そして、私はここでロードされました basically--スクリプト
これは本当に便利です MP3をロードするための、
これはただ作ります より高速なMP3ファイルの道をロードします。
それは基本的に単なるラッパーです。
それだけのプロセスになります はるかに速くMP3ファイルにロードし、
そうしないと、HTTP要求を使用しています 種類の私たちは何をしていたかのように
サーバーで設定された現在の作品に。
それは、あなたは本当に醜いです それを行うにはしたくありません。
>> だからこの男、ボリスのSMUは、本当に書きました BufferLoaderという便利な小さなツール。
あなたが行うすべては、単にそれを通過しています コンテキストは、あなたはそれlist--渡します
または、ええ、それはJavaScriptでリストのですか？
SAM GREEN：配列。
HUGHザブリスキー：ああ、それはあります アレイは、そうです。
これは、パスの配列です 別のファイルに。
そして、あなたはそれを関数を渡します。
これは、我々が話していたコールバックです 非同期ロードで約。
それが呼び出されます ロードされたファイルに一度。
そして、その機能は次のような場合に呼び出されます ファイルのロードされ、境界として受け取り
ロードされたバッファの配列。
だから、ここで発生します。
基本的に、BufferListです 1 value--になるだろう
またはそれはの配列になるだろう インデックスにそれに持っている長さ1、
MP3の全体ロードされたファイルをゼロ。
だから私は終了したとき、私は何をすべきか ロードは単に、私であります
バッファ・ソースを作成しました オーディオバッファのソースノードです。
次のステップは、私がロードされ フルロードされたバッファとしてsource.buffer
BufferList--から それはbuffers--たくさんのです
そして、あなたはそのオーディオを接続します 先にバッファ。
だから、それを行うために何が起こっているのか 単にMP3を入れています
ストレート出力に至るまで、 そして、すぐにそれを起動します
このコールを取得する際。
>> クールなので、見てみましょう このアクションで起こります。
マイ[聞こえない]ここで、見てみましょう。
だから、僕はするつもりです 基本的なサーバーを起動します。
それは、何か あなたがしている場合、あなたは何をする必要があります
ロードファイルの要求をします。
私は、基本的なサーバを起動するつもりです。
これは基本的にあなたの全体です 1行目の今PSET、
しかし、それだけで始めています ポート80分の80上のサーバー。
だから私たちはこっちに行く、我々 80分の80をロードしようとして、
私たちは、私のお気に入りの曲に行くつもりです。
私がヒットした場合ので、 "私を再生します 今好きな曲」、
それは私をロードするために起こっています 好きな曲とit--を再生
[MUSIC - イーグルス、 "FASTでの生活 LANE"]
--whichに「生命であることを起こります イーグルスによる高速レーン」。
今、私は私を停止する「ヒットでした 好きな曲 "と、それを再生します。
>> [MUSIC - イーグルス、 "FASTでの生活 LANE"]
>> そして、私はコンソールに渡る場合には、理由 私はここの上にグローバル変数を使用します
実際に、この値のそれを追跡するために 今コンソールに認識されます。
だから、私のために自動作成されます。
だから、今プレイしているものですが、 そして、私は単に）（source.stopを呼び出すことができます
その上。
さて、あなたは何を知っていますか？
ちょうどそのように、あなたたちはこれを聞いたことがあります song--あなたはこの曲を認識することがあります。
>> [MUSIC - リック・アストリー、「NEVER GONNA GIVE YOU UP」]
[MUSIC - イーグルス、 "FASTでの生活 LANE"]
私たちは今、すべてRickrolledてきました。
上の移動、[OK]を、素晴らしいです。
クール。
だから、これは基本的には一例です あなたは、MP3をロードすることができる方法file--
[MUSIC - イーグルス、 "FASTでの生活 LANE"]
- そしてそれを再生し、停止して起動します。
私はもっ​​と多くのことを行っている可能性が[聞こえません]
>> 私がやる最後のものがあり、 私はあなたに[聞こえない]を紹介します。
>> [音楽再生]
>> それはogg.wave.mp3、のようなものです。
私の記憶が正しければ、私は、考えて、 私は、.M4Aでいくつかの問題に遭遇しました
私はそれについてはよく分かりません。
私はmp3.wave--思います
>> [MUSIC - リック・アストリー、「NEVER GONNA GIVE YOU UP」]
>> [OK]を、素晴らしいです。
私はそれを言っていてはいけません。
こんにちは、とにかく。
だから我々はこのオープンを持っています。
だから今私はすべてが私は基本的に作成した、あります 音楽を作成するための基本的な構文。
私のような何かをするのであれば、G4を追加 2 1に、どのようなことが意味することで、
ピアノノート、G4を追加し、 第Gこれは
下からピアノにアップ。
これは、MIDIのようなものである話します そう、音楽ベースである人のために、
これはただのMIDIノートです。
>> 観客：それはGです 右、中央のCの？
>> HUGHザブリスキー：これはG 中央のCの上に、それはそうです。
>> 聴衆：上、中央のC
>> HUGHザブリスキー：うん。
実際には、はい。
私が実際に行わ思います それ1 [聞こえません]、
これは、上記オクターブかもしれません。
それでは見てみましょう。
私はPlay--をヒットした場合
[繰り返しのピアノ注意】
それを聞いて行く--we're。
アイデアは、それが動作することです 単にコマンドラインたいと思い、
私は上下に行けば 私のキーボードで、あなた
以前に戻ることができます かなり便利ですコマンド。
そして、以下のトラックの私のリストです、 これは、すべてのループで実行されています。
>> 観客：あなたが想定しました その上で88鍵キーボード、右？
>> HUGHザブリスキー：質問がありました、 私は、88キーのキーボードを想定しています、
はい、私は。
私がやったことは私です 基本的には88のサンプルを取りました
ピアノ、各ノートのための1つの。
そしてそうするたびにあなたに 今から注意を聞き、
それは実際に見えるループです これはループで再生取得さlike--、
したがって、すべてのノートのために、これが実行されています。
何が起こるかというと、私であります 再びバッファを作成し、
私は、音量を設定するためのゲインノードを作成します。
本当にこれは単に 私を言っての複雑な方法
source.buffer内のバッファに格納します。
私はそれを、利得を与える、私 ゲインに接続し、
ゲインに接続されています。 出力した後、私はそれを再生します。
だから、プロセスの一種であります バッファソースを取り込みます。
>> 観客は：あなたが実際にそのを取ることができます ドライ音と、それが濡れ作る[聞こえませんか]？
>> HUGHザブリスキー：することができます、ええ。
再動詞があります、あります 遅延、歪み。
あなたは、基本的には何も置くことができます そのサンドイッチでof--の間だけでなく、
パイプラインは、より良い比喩です しかし、あなたはそれで何かを追加することができます。
クール。
>> だから私は、デモを終了します ここであなたの感覚を与えるために
回あなただけの膨大な数の 一斉にその機能を実行することができます。
だから私はこれを削除するつもりです。
私は発電機を作成するつもりですthat-- 基本的にdoes--これは本当に何ですか
複雑syntax--の種類が、それはです その場でノートを生成しようとして、
ちょうど再生を開始 彼らはそれがそれらを評価されます。
【介在PIANO]
>> だから我々はちょうどここに少し音楽を作ることができます。
【介在PIANO]
>> だから何このコマンド 例えば、あるい
それがためにこれらの3つのノートを取ります ピアノとその後B3上に置きます。
この構文はなるかもしれません もう少し意味
持っている人たちへ ここでは、音楽の背景。
>> 私はキックドラムを追加することができます。
私はcan--
>> 【介在INSTRUMENTS]
>> それをいじっ--just。
>> だから、make--ことができます
【介在INSTRUMENTS]
その一つは、もう少し迷惑なんです。
【介在INSTRUMENTS]
>> だから、ランダムドライシンバルを追加 すべての16分音符に、16％と
[聞こえません]。
>> 【介在INSTRUMENTS]
>> うん、そうな方法この 4：それは4で常にですworks--。
【介在INSTRUMENTS]
>> うん、そう四方、および16/8。
【介在INSTRUMENTS]
>> だから平均では、60％を取得 16分音符のヒット。
>> とにかく、これはちょうどでした 種類の誇示します
あなたはできることのいくつか ウェブオーディオAPIで構築します。
それは、それは本当に速いです、本当に強力です あなたはクールなものの多くを行うことができます
それと。
だからもう一度、あなたが持っている任意の質問、 メールmyself-- Hugh--またはサム、
正直なところ、Googleが持っています 良いリソースのトン。
でも最後の質問？
うん。
>> 聴衆：だからあなたがアクセスすることができます 内蔵マイク。
あなたがしたい場合はどのような より良いマイクを使うのか？
HUGHザブリスキー：あなたが望んでいた場合 より良いマイクを使用するには？
そう再度、これは、の一部であります Chromeの間の抽象化
お使いのコンピュータの残りの部分。
それはを通じて利用可能だがない限り API、ウェブのMIDI APIのように、
あなたは、おそらくいくつかのハックを見つけることができます、 しかし、一般的に実現可能ではありません。
>> SAM GREEN：あなたはalso--ことができます すべてのChromeは知っています
何であるか、あなたのデフォルトのマイク であり、それをアクセスします。
あなたがマイクを持っていた場合、あなたができるよう コンピュータのデフォルトのマイクとして設定し、
あなたはそれをそのようにアクセスすることができました そしてそれはおそらく動作します。
HUGHザブリスキー：それは良い点です。
私がいることが、試したことがありません あなたは親切にできる可能性があります
of--あなたが入力スピーカーをリダイレクトする場合は、 あなたはええ、それを行うことができるかもしれません。
>> でも最後の質問？
クール。
さて皆さんに感謝 見てのために多く。
私はヒューです。
SAM GREEN：私はサムです。
HUGHザブリスキー：そして、これはCS50です。