LoginSignup
0
0

More than 1 year has passed since last update.

4klang 完全に理解した

Last updated at Posted at 2023-05-03

DemoSceneで使う4klangの情報があまり見つからなかったので勉強しつつメモとして執筆中です.
動画やチュートリアルを見て、上手く理解できなかったものを自分なりに考えた解釈をメモしている感じなので、チュートリアルは末尾の参考にさせていただいたものを見ていただけると。また執筆者は音楽ど素人なので所々音楽用語の使い方が間違っていますが、ご了承ください。

環境構築

  • 4klangVSYASMをクローンしておきます。VSYASMは4klang.asmから4klang.objを作成するのに使用します。
    • 4klangは最新版だとうまくレコードできないバグがあるようなので3.0.1がいいかもです
  • VSYASMのinstall_script.batを管理者として実行します
  • renoiseをインストールします
  • 4klangとrenoiseで曲を作り、必要なファイルを生成します。
    • この時16bit Outputにチェックを入れておかないと音割れしてしまうことがあるようです

実装

恐らく以下の手順で問題なく音が鳴らせるはずです → サンプルコード

  • こちらを参考にwavファイルを動的生成する
  • 波形データの部分を_4klang_renderで生成したデータに置き換える
  • wavファイルをアウトプットするのではなく、そのままバイナリをAudio APIに渡す

ビルド

  • Solution Platformをx86にします
  • 4klangが生成したファイルと4klang\4klang_source\4klang.asmをプロジェクトに配置します
  • Projectを右クリック → Build Dependencies → Build Customazationに入り、下の方にあるyasmを選択する
  • 4klang.asmのプロパティを開いてItem TypeをYasm Modular AssemblerにしてApplyを押します
    • 同じウィンドウのYasm Modular Assembler/Assembly Optionsを開いて4klang.objが書き出される場所を確認し、それをAdditional Liblary Derectoriesに追加しておきます
    • 4klang.objとwinmm.libも Additional Dependenciesに追加しておきます

renoiseの使い方

楽器を増やす方法

  1. 4klangでInstrumentを切り替える
    Screenshot 2023-05-03 190930.png
  2. renoiseでsamplerを開き、No plugin loadedの右の逆三角形を押してVST alias/4klangより現在開かれている4klangのプラグインを選択する
    Screenshot 2023-05-03 191307.png
  3. するとrenoiseのsamplerが4klangのプラグインの表示になるのでChannelの数値を4klangの楽器の数値と合わせるScreenshot 2023-05-03 191611.png

4klangの基本動作

  • 4klangはスタックにシグナルをプッシュして、それを加工・実行するといった設計
  • シグナルは先頭にプッシュされる(なのでどんどん先頭が更新される)
  • ユニットにはシグナルをプッシュするユニットスタックの先頭のシグナルを編集(加工)するユニットがある
  • Instrumentは各々の楽器に対して、Gloabalは全楽器に共通のエフェクトをかける場所

4klangの画面構成

Instrument/Gloabal

① Instrumentを構成する一つ一つの要素のことをユニットという
② ユニットの追加と削除
③ ユニットの位置を上下に移動させる
④ スタックシグナルカウンター。そのユニットの時点でスタックに入っているシグナルの合計数
Screenshot 2023-05-05 094433.png

各ユニットの説明

image.png

ユニット名 説明
Envelope スタックにシグナルをプッシュするユニット。 エンベロープ(減衰)を生成する
Oscillator スタックにシグナルをプッシュするユニット。 SINE, TRI/SAW, PULSE, Noiseなどの基本の波を生成する
Load スタックにシグナルをプッシュするユニット。-64から64の任意の値をシグナルとして渡す
Filter スタックの先頭のシグナルを編集(加工)するユニット。フィルターをかける
Distortion スタックの先頭のシグナルを編集(加工)するユニット。ディストーションをかける
DelayLine スタックの先頭のシグナルを編集(加工)するユニット。ディレイ系のエフェクトをかける
Arthmetic スタックの先頭のシグナルを編集(加工)するユニット。算術演算を行う
Store スタックの先頭のシグナルを編集(加工)するユニット。先頭のシグナルをインプットとして受け取り、それを任意のユニットの任意のプロパティに作用させる。(任意)使用後、Store自身のシグナルはArthmeticでポップさせておく。
Panning 左右の音のチャンネルを生成する(ステレオサウンドの生成?)
Output 完成した楽器をGloabalにアウトプットしスタックをリセットする
Acccumulate Gloabalでのみ使用可。outputされた音のシグナルを増やす(???)

各ユニットの詳しい説明(勉強しながら使ったときに随時更新します)

Envelope

スタックにシグナルをプッシュするユニット。 エンベロープ(減衰)を生成する。音量(振幅)を減数させる

パラメーター名 日本語訳 意味
Attack キーを押して開始された信号が最大振幅に達するまでの時間。
Decay 最大振幅からサステインの振幅に戻るまでの時間
Sustain 最大振幅の後に減衰する地点
Release キーを離して振幅が0に達するまでの時間
Gain 最大振幅(音量)

参照: https://www.soundonsound.com/glossary/adsr-attack-decay-sustain-release
image.png

Oscillator

スタックにシグナルをプッシュするユニット。 SINE, TRI/SAW, PULSE, Noiseなどの基本の波を生成する

パラメーター名 日本語訳 意味
Transpose 移調 周波数をずらすこと
Detune 周波数を微妙にずらした音を重ねる効果のこと?
Phase 位相 波の一周期中(円)の位置をずらす
Color ???
Shape -64に近いほど三角波に、0に近いほどSin波、64に近いほどノコギリ波になる
Gain 音量

Filter

スタックの先頭のシグナルを編集(加工)するユニット。フィルターをかけて音を整形する

パラメーター名 日本語訳 意味
Low ローパスフィルター ある周波数よりも下の周波数を通すフィルター
High ハイパスフィルター ある周波数よりも上の周波数を通すフィルター
Band バンドパスフィルター ある周波数の周辺の周波数のみ通すフィルター
Notch ノッチフィルター ある周波数の周辺はカットしてそれよりも外側のみ通すフィルター
Peak ?????
All 全部のフィルターをかける??????
Frequency フィルタリングの基準となる周波数
Resonance 共鳴・反響 基準となる周波数を揺らす効果?

https://synth-voice.sakura.ne.jp/synth-voice/html5/synth-basic02.html
https://cmtext.indiana.edu/synthesis/chapter4_filters.php

Distortion

スタックの先頭のシグナルを編集(加工)するユニット。ディストーションをかける。ディストーションとはインプットの波の形を元に小さな波を重ねて、元の波を歪ませるエフェクトのこと(たぶん)
image.png

パラメーター名 日本語訳 意味
Drive 重ねる小さな波の形。-63に近いほど三角波,、0に近いほどSin波、63に近いほどノコギリ波
S&H 重ねる小さな波の細かさ。値が大きいほど細かく元の波に近づく

DelayLine

スタックの先頭のシグナルを編集(加工)するユニット。ディレイ系のエフェクトをかける

パラメーター名 日本語訳 意味

Arthmetic

パラメーター名 日本語訳 意味
Load Note ???
PUSH スタックにシグナルをプッシュする
POP 先頭のシグナルをポップする。ポップは配列で使う取り除くと同じ意味
XCH 2つのシグナルの順番を交換する
+ 2つのシグナルを加算する
+/POP 2つのシグナルを加算して元のシグナルはポップする
* 2つのシグナルを乗算する
*/POP 2つのシグナルを乗算して元のシグナルはポップする
2+/POP 0番目と2番目、1番目と3番目のシグナルを加算して元のシグナルはポップする。シグナルは加算して分の2つプッシュする

Store

スタックの先頭のシグナルを編集(加工)するユニット。先頭のシグナルをインプットとして受け取り、それを任意のユニットの任意のプロパティに作用させる。(任意)使用後、Store自身のシグナルはArthmeticでポップさせておく。

パラメーター名 日本語訳 意味
Stack どのスタックをインプットに受け取るか
Unit どのユニットに作用させるか
Slot 選択したユニットのどのパラメーターに作用させるか
Amount 作用させる量。0だと何も作用しない

楽器の考察

キック(バスドラム)

周波数を低くしながらすぐに減衰するようなSin波。元の周波数は低い方がそれっぽく聞こえる

スネアドラム

参考にさせていただいたもの

サンプルコード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0