声部アーキテクチャ
MIDI Sketch Bach の楽曲における各声部は独立した旋律線です。声部数は形式が決定し、各声部が何をするかも形式が決めます。声部数オプションは存在しません。
声部とは?
バロック音楽では「声部」は独立した旋律線です — 歌われるか演奏されるかを問いません。3声のフーガには3つの同時進行する線があり、それぞれが独自のリズム、輪郭、個性を持ちます。MIDI Sketch Bachでは、各声部が個別のMIDI トラックになります。
トラックは出力コンテナ、声部は音楽上の役割
MIDI ファイルでは DAWが扱えるようにトラックを使います。一方、作曲エンジンは対位法の検査に必要な独立した音楽線として声部を扱います。通常は一つの声部が一つのトラックに対応します。
声部数は形式が決定
声部数は形式ごとに固定されます。形式を選ぶことがテクスチュアを選ぶことです。
| 形式 | 声部数 |
|---|---|
fugue、prelude_and_fugue、trio_sonata、chorale_prelude、toccata_and_fugue、passacaglia、fantasia_and_fugue、goldberg_variations | 3 |
chaconne | 2 |
cello_prelude | 1 |
numVoices/num_voices の指定は後方互換のため受理されますが無視されます。拍子と基準長を含む完全な表は楽曲形式を参照してください。
ボイスインテント
形式ディレクターは、楽曲の小節スパンにわたって各声部にボイスインテントを割り当てます。これは各時点でその声部が果たす役割です。エンジンには、ゴルトベルク専用の3キャリアを含む33種類の名前付きインテントが定義されており(voice_intent.h)、いくつかの系統にまとまります。
| 系統 | 代表的なインテント | 役割 |
|---|---|---|
| フーガの提示 | SubjectCarrier, AnswerCarrier, CountersubjectCarrier | 主唱(主調)、応唱(属調)、そして繰り返し寄り添う対主題 |
| 展開 | MiddleEntryCarrier, StrettoCarrier, PedalCarrier, CodaCarrier | 近親調の中間入り、重なり合うエントリ、保続音、終結素材 |
| 嬉遊部 | Episode, FortspinnungSpan | 主題の動機から導かれる、調から調へ移動するゼクエンツ素材 |
| 固定線 | GroundCarrier, PassacagliaGround, CantusFirmusCarrier | 不変の反復バスとコラール旋律 |
| 音型 | FigurationCarrier, ArpeggioFlow, ToccataCarrier, FantasiaCarrier | 連続する固有の音型と、セクション構成の独奏書法 |
| 変奏 | VariationCarrier, GoldbergBassCarrier, GoldbergVariationCarrier, GoldbergInnerVoiceCarrier | 作譜済みの変奏素材と、役割を分けたゴルトベルクの3声部 |
| テクスチュア | RhythmCarrier, NctCarrier, TrioVoiceCarrier | 弱起・ヘミオラのリズム型、宣言された非和声音の音型、作譜済みのトリオ/対旋律 |
出荷時の既定形式はすべてキャリア組み立てを使います。候補探索はスパンを振り分けますが、作譜済み素材をそのまま再生するため、採点付き探索が通常の出力に加える音は0です。任意の --free-counterpoint が TrioVoiceCarrier から SequentialCounterline へ切り替えるのはパッサカリア V1(voice == 1)だけで、ほかの形式では利用できません。詳しくは候補探索を参照してください。
主題、応答、グラウンド、定旋律
主題はフーガの中心になる旋律です。応答は、別の声部に入る主題で、多くの場合は属調側へ移されます。グラウンドバスは反復する低音パターンです。定旋律は長い音符で置かれる固定旋律です。
声部の独立性
声部間の独立性の維持はバロック対位法の中核原則です。エンジンは次の方法でこれを支えます。
リズムの差別化
声部は補完的なリズムパターンを使い、足並みを揃えて動かないようにします — ある声部が持続するとき、別の声部が活発になる傾向があります。この補完性はバッハの書法の特徴です。
旋律の差別化
各声部は独自の音程傾向と方向性の傾向を持ち、主題素材を独立して展開します。
音域の差別化
声部は明確に異なる音域を保ちます。声部交差は最小化され、声部が互いに接近すると離れる傾向があります。形式ビルダーは和声プランに沿ってキャリア線を作譜し、検証器が音域、和声、独立性を検査します。
音域と声部交差
音域は音の高さの範囲です。バスは低く、ソプラノ的な線は高い、という区別です。声部交差は、本来低い声部が高い声部を追い越したり、高い声部が低い声部の下に入ったりすることです。線の追跡が難しくなるため制限されます。
声部とトラックの割り当て
各声部は独自のチャンネルとプログラムを持つ個別のMIDI トラックに割り当てられます。
const events = generator.getEvents()
for (const track of events.tracks) {
console.log(`Voice: ${track.name}`) // トラック名
console.log(`Channel: ${track.channel}`) // MIDI チャンネル(0-15)
console.log(`Program: ${track.program}`) // GMプログラム番号
console.log(`Notes: ${track.note_count}`) // ノート数
}すべてのノートは source 由来タグ("material"、"compose"、"ornament")も持ちます — JavaScript APIを参照してください。
General MIDI プログラムの割り当て
| 楽器 | GMプログラム | 音色 |
|---|---|---|
| オルガン | 19 | チャーチオルガン |
| チェンバロ | 6 | チェンバロ |
| ピアノ | 0 | アコースティックグランドピアノ |
| ヴァイオリン | 40 | ヴァイオリン |
| チェロ | 42 | チェロ |
| ギター | 24 | アコースティックギター(ナイロン) |
出力は声部ごとに1トラックを持つType 1 の標準 MIDI ファイルであり、DAW で声部ごとに楽器を再割り当てできます。