11

通常の標準的な記譜法で書かれた単一の楽器の簡単な楽譜をどのようにモデル化しますか? 確かに、まさにこれを行うライブラリがたくさんあります。私は主に、データ構造で音楽を表現するさまざまな方法に興味があります。何がうまくいき、何がうまくいかないのか?

ダイナミクスのようなトリッキーな側面のいくつかを無視すると、明らかな方法は、すべてを文字通りオブジェクトに変換することです。スコアは音符でできています。合成とは、各音符の開始/終了時間を計算し、正弦波をブレンドすることを意味すると思います。

明白な方法は良い方法ですか?これを行う他の方法は何ですか?

4

6 に答える 6

7

新しい一般的な西洋音楽の記譜プロジェクトを行う多くの人々は、MusicXML を出発点として使用します。必要に応じてサブセット化できる楽譜の完全な表現を提供します。現在、ProxyMusic などのプロジェクトが MusicXML オブジェクト モデルを作成するために使用する XSD スキーマ定義があります。ProxyMusic はこれらを Java で作成しますが、他の言語の他の XML データ バインディング ツールでも同様のことができるはずです。

MusicXML の顧客の 1 人は次のように述べています。

「私に関する限り、MusicXML に関する皆さんの多大な努力の非常に重要な利点は、音楽が「何であるか」の明確で構造化された非常に「現実世界で実用的な」仕様として、設計と実装のためにそれを使用することです。アプリケーションの内部データ構造。」

XSD と DTD、サンプル ファイル、チュートリアル、サポートされているアプリケーションのリスト、出版物のリストなど、さらに多くの情報を入手できます。

http://www.makemusic.com/musicxml

MIDI は、標準的な記譜法による単純な楽譜のモデルとしてはあまり適していません。MIDI には、楽譜の基本概念の多くが欠けています。表記形式ではなく、パフォーマンス形式として設計されました。

確かに楽譜は階層的ではありません。XML は階層化されているため、MusicXML では非階層的な情報を表すために、開始と停止のペアの要素を使用します。ネイティブのデータ構造は物事をより直接的に表すことができます。これが、MusicXML がデータ構造の出発点にすぎない理由の 1 つです。

水平方向と垂直方向の構造を同時に捉える記譜法をより直接的に表現する方法については、スプレッドシート/格子モデルをより多く使用するHumdrum形式を見てください。Humdrum は、そのデータ構造が特にうまく機能する音楽学および音楽分析アプリケーションで特に使用されます。

于 2009-01-31T06:49:13.720 に答える
5

MIDI ファイルは、これを行う通常の方法です。MIDI は、開始時間と終了時間、音の音量、演奏された楽器、さまざまな特殊な特性など、音符に関するデータを保存するための標準形式です。ファイルの読み取りと書き込み、および配列またはオブジェクトの観点からファイル内のデータを表すための事前に作成されたライブラリ (いくつかのオープンソースを含む) を多数見つけることができますが、通常、各ノートにオブジェクトを持たせることによってそれを行うことはありません。大量のメモリ オーバーヘッドが発生します。

MIDI で定義されている楽器は、バイオリンやトランペットなどの象徴的な名前を持つ 1 から 128 までの数字だけですが、MIDI 自体は、楽器が実際にどのように聞こえるかについては何も述べていません。それがシンセサイザーの仕事で、高度な MIDI データを受け取り、それを音に変換します。原理的には、はい、サイン波を重ね合わせることでどんな音でも作ることができますが、実際にはうまくいきません。また、楽器の実際の音とそれを演奏する人間の表現力を再現しようとする場合、単純なフーリエ スペクトル (正弦波の相対的な強度) は適切ではありません。(私はそれを行うための簡単なシンセサイザーを書いたので、それがまともな音を生み出すことができることをよく知っています)

また、これは質問とは関係がないかもしれませんが、ChucKというオーディオ プログラミング言語に興味があるかもしれません。プログラミングと音楽の交差点にいる人たちが設計したもので、いじってみると音合成の現状がよくわかると思います。

于 2009-01-22T04:16:09.630 に答える
3

データ構造の音楽、標準表記、..。

LilyPondに興味があるようですね。

記譜法に関するほとんどのことはほとんど純粋に機械的であり(記譜法の複雑で重要な部分にもルールとガイドラインがあります)、LilyPondはそれらすべての機械的側面を処理する美しい仕事をします。残っているのは、任意のテキストエディタで簡単に記述できる入力ファイルです。PDFに加えて、LilyPondはMidiファイルも生成できます。

気が向いたら、プログラムを使ってアルゴリズム的にテキストファイルを生成し、LilyPondを呼び出して表記法とMIDIファイルに変換することができます。

LilyPondの入力ファイルよりも、音楽を表現するためのより完全で簡潔な方法を見つけることができるとは思えません。

音楽と記譜法は階層的ではなく、階層的思考を厳密に遵守することによってモデル化することはできません(うまく)ことを理解してください。その主題に関するmor情報についてはこれを読んでください。

楽しむ!

于 2009-02-18T11:53:09.920 に答える
2

うーん、楽しい問題です。

実際には、Composite と一緒に Command パターンに変えたいと思っています。これは、モデル化されたオブジェクトを名詞ではなく動詞にするという意味で、通常の OO アプローチを逆にするようなものです。次のようになります。

Note は、 lengthtone` という 1 つのメソッドを持つクラスplay(), and a ctor takingですand

音色、アタックなど、シンセの動作を定義するインストゥルメントが必要です。

次に、TimeSignature を持ち、小節を含む Composite パターンである Score を作成します。小節には音符が含まれます。

実際にプレイするということは、別のコンテナである Repeats や Codas など、他のものを解釈することを意味します。それを再生するには、コンポジットの階層構造を解釈し、メモをキューに挿入します。ノートがテンポに基づいてキューを移動すると、各ノートでplay()メソッドが呼び出されます。

うーん、それを逆にするかもしれません。各ノートはインストゥルメントへの入力として与えられ、インストゥルメントは必要に応じて波形を合成して解釈します。それは元のスキームのようなものに戻ります。

分解へのもう 1 つのアプローチは、パルナスの法則を適用することです。要件が変更される可能性がある秘密の場所を保持するために分解します。しかし、それは最終的に同様の分解になると思います。拍子記号とチューニングを変更できます。楽器を変更できます。バイオリン、ピアノ、マリンバのいずれで演奏しても、ノートは気にしません。

興味深い問題です。

于 2009-01-22T04:00:48.447 に答える
2

私の作曲ソフトウェア (リンクについては私のプロファイルを参照) を主要な単位として使用します (開始位置、長さ、音量、バランス、リリース時間などのプロパティを使用)。ノートはパターン (独自の開始位置と繰り返しプロパティを持つ) にグループ化され、トラック (独自の楽器または複数の楽器を持つ) にグループ化されます。

サイン波をブレンドすることは、サウンドを合成する 1 つの方法ですが、非常にまれです (高価であり、あまり良いサウンドではありません)。Wavetable シンセシス (私のソフトウェアが使用) は計算コストが低く、コーディングも比較的簡単で、生成できるサウンドの種類は基本的に無制限です。

于 2009-01-22T04:02:46.633 に答える