23

Web Audio API を使用して楽器を合成するライブラリをいくつか見つけました。

そのうちの 1 つ (Band.js) はcreateOscillator()、オシレータ タイプ (sine、square、...) と組み合わせて使用​​します。 source を参照してください

しかし、それはあまりにも合成に聞こえます (聞く例) もっとリアルに聞こえるものが欲しいのですが、プリコンパイルされたサウンドフォントを使用したくないので、合成する必要があります。モバイルデバイスでも動作するはずです。

createPeriodicWave そこで、最初の 32 倍音を参照元と組み合わせてマトリックスとして使用する別のライブラリ (musical.js) を見つけました。音色は素晴らしいです、あなたはそれを聞くことができます

ソースコードのコメントに書いてある通り、ハーモニクスはこのピアノサンプルファイルから取っています。他の楽器のサンプルファイルはもっとたくさんあります。ハーモニクスをすべて 2000 でも置き換えてみましたが、常にピアノのように聞こえます。

高調波と ADSR 値を調整および補間するための値もいくつかあります。ピアノの音だけに最適化されているのでしょうか?

それから、ギターにとって本当に素晴らしい音色を持っている別のライブラリ(guitar-synth)を見つけたので、それを聞いてくださいcreatePeriodicWaveただし、このライブラリはAPIを使用しません。代わりに、いくつかの「単純な」計算と組み合わせて使用​​しますが、他のライブラリの高調波のようなものはありません。ソースをcreateScriptProcessor参照してくださいgetChannelData

だから私の主な質問

createPeriodicWaveAPIを使用するためにギター シンセサイザーを移植できますか? musicjsでギターの音色を使いたいです。ピアノの音色とギターの音色を切り替えられるように。

ところで: サウンド インストゥルメントを合成する別のライブラリが見つかりました。ここにデモがあり、ここにソースがあります。音もいいのですが、musical.js ライブラリの方がはるかに美しい音色です。getChannelDataしかし、WAVE としてエンコードされているようなものを使用しているようにも見えます。また、Android を搭載したモバイル デバイスでも動作しません。

4

1 に答える 1

3

これは答えではなく、トピックに関するいくつかの考えとメモです。

質問自体は私にとって興味深いものです。私はギターを弾いていますが、コードで音楽に触れる機会はありませんでした (今まで)。私は少し理論を読み、musical.js を試してみましたが、まだ解決には程遠いように感じます。

ここにいくつかのメモがありますが、それらが役立つことを願っています:

1) musicial.js から抽出されたコードの縮小例をまとめました。web-audio-test.jsおよびを参照してくださいweb-audio.html

私が間違っていなければ、musicial.js のオーディオ ノードのセットアップは次のとおりです。

すべてのノードに共通で永続的に残る「テール」部分と、各ノートを演奏するために作成されたノードのセットである「ヘッド」があります。

| ------ HEAD (for each note)------ | --- TAIL (for all notes)----------- |
|                                   |                                     |
[ |Oscillator|->|Biquad|->|Gain|-> ] [|Gain|->|Dynamics  |->|Destination| ]
  | Periodic |  |Filter|  |ADSR|              |Compressor|
  | Wave     |

注: 最初のオシレーターを別のオシレーターで 2 倍にして、ノートの周波数 + 音色のデチューンを再生できます。

そのため、オシレーター (または 2 つ) + フィルター + ADSR ゲインを作成して、各ノートを再生します。このようにして、多くのオーディオ ノードを作成します。Musicial.js は、メモのキューを作成し、限られた一連のメモのみを Web オーディオ API に渡すことでこれを処理します。

ギターシンセのセットアップははるかに簡単に見えます|Script Processor| -> | Output |。ギター サウンド サンプルはコードから生成され、音源として機能する ScriptProcessor ノードに供給されます (ファイルからサンプルをロードした場合と同様)。確かではありませんが、music.js もこのアプローチを使用してコードを簡素化できる可能性があります。

2) musicial.js でさまざまなパラメーターを使用して演奏しましたが、それでもすべてがピアノのように聞こえます。

ウェーブ テーブルのサンプルからベースまたはギターの係数を適用すると、サウンドは異なりますが、ピアノのように聞こえます (特に高音)。

ADSR の設定は、この「ピアノ」の音を変えるわけではありませんが、ある楽器の音を別の楽器の音に実際に変えることはできないと思います。

real/imagの高調波をより高い周波数に補間するために使用されるmultおよびfreq配列は、おそらくより重要ですが、それらを空のまま (補間なし) にすると、楽器は依然としてピアノのように聞こえます。

サウンドを調整するために実際に何を変更する必要があるかは、まだ私にとってパズルです。

あなたがgithubに投稿した問題を見ました。musicial.js の作成者が少なくともいくつかのヒントを提供できることを願っています。

3) 便利なリンク / ツール

Google のオーディオ サンプルには、ここで必要なようなものは含まれていません。最も近いのは、異なるウェーブ テーブルを切り替えることができるウェーブ テーブル シンセの例です。

Firefox には、オーディオ ノードのグラフを表示できる「Web オーディオ エディタ」があり、オーディオの設定を学習するのに非常に便利です。

4) 実用的な解決策。

あなたはおそらくすでにこれを考えていますが、現時点では、musical.js と guitar-synth の両方を使用します。

シンプルなラッパーでインターフェイスを統合し、ピアノとギターの両方の楽器を提供できます。

于 2016-01-18T11:01:28.910 に答える