Given that an existing VCVRack implements these modules (Core and beyond), define the simplest structure of types in Dart that can contain the Core modules necessary to produce a sound like that of a bird (or imitating a bird with mini-max complexity). Write Dart code.

Appendix:

VCV Manual - Core Modules
The Core plugin (built into Rack itself) includes utilities and interfaces for interfacing between the virtual and hardware world.

Audio ¶

The Audio module merges the virtual Rack world with the physical hardware world. The TO DEVICE section sends Rack signals to a hardware audio device for playback, and the FROM DEVICE section receives hardware signals into Rack.

Audio currently supports the following drivers.

After a driver is selected, a particular device can be chosen for the driver.

The sample rate is the number of audio samples per second for the audio device to process. Note that this rate is different than Rack’s engine sample rate, which determines the number of samples per second for Rack modules to process. If set to different rates, sample rate conversion will occur, resulting in slightly higher CPU usage, slightly less audio fidelity, and slightly more latency.

The block size sets the number of samples to store in the audio buffer before releasing to the audio device. A higher size results in more latency (blockSize / sampleRate seconds), but a lower size requires your operating system to communicate with the audio device more frequently, resulting in potentially less audio stability. A good balance can be found by increasing the block size until no audio “glitches” are heard.

Note: Using multiple Audio modules is experimental and may crash Rack or render unstable audio. Most DAWs avoid this feature entirely by restricting audio to a single input and a single output device for stability reasons, but if using multiple audio devices in Rack works with your configuration, more power to you!

MIDI input modules ¶
Each MIDI input module (described below) supports the following drivers.

Core MIDI on MacOS
Windows MIDI on Windows
ALSA on Linux
JACK on Linux
Gamepad
Computer keyboard
The gamepad MIDI driver allows USB video game controllers to be used for CV and gate sources, as an inexpensive alternative to MIDI controllers. Gamepad buttons are mapped to MIDI note gates starting with C-1, C#-1, D-1, etc. Joystick axes are mapped to MIDI CC messages starting with CC0, CC1, CC2, etc. with a nonstandard MIDI extension that allows negative CC values to be used.

The computer keyboard MIDI driver generates MIDI notes when keys are presses while the Rack window is focused. Using four rows of computer keys, the two-row virtual MIDI keyboard spans approximately 2½ octaves and can be shifted down and up with the ` and 1 keys.

The following is the layout for the QWERTY (US) keyboard.

QWERTY Keyboard with VCV MIDI Keyboard overlaid
MIDI-CV ¶

V/OCT generates a 1V/oct pitch signal of the last held MIDI note.
GATE generates 10V when a key is held. It does not retrigger when notes are played legato.
VEL generates a CV signal from 0V to 10V of the velocity
AFT generates aftertouch CV (channel pressure, not polyphonic aftertouch)
PW generates pitch wheel CV from -5V to 5V
MW generates mod wheel CV.
CLK generates a clock for every 24-PPQN MIDI clock received.
CLK/N generates a clock specified by the division set by right-clicking on the panel and selecting the CLK/N rate.
RTRG generates a trigger when a new note is pressed, regardless of legato.
STRT, STOP, and CONT generate triggers when the MIDI device sends a start, stop, or continue event.
Right-click the panel to enable polyphony and select the number of polyphonic channels.

Rotate: Each pressed note selects the next available channel, or just the next channel if none are available, wrapping around to the first channel after the last channel is reached.
Reuse: If a channel with the same MIDI note has been previously used, reuse it. Otherwise, use the Reset mode behavior.
Reset: Each pressed note selects the lowest available channel. Releasing a note shifts all above channels down.
Multiple MIDI interfaces may be used simultaneously with the same driver, for example to combine the functionality of MIDI-CV and MIDI-CC.

MIDI-CC ¶

Each output maps a MIDI CC (Continuous Controller) messages from 0 to 127 to a CV signal from 0V to 10V. Some drivers like the gamepad driver generate nonstandard MIDI values from -128 to 127, which is mapped from -10V to 10V. 14-bit MIDI CC messages are not yet supported.

Each output can be assigned a particular CC number by clicking on the digital display corresponding to the position of the output port. A LRN indicator is displayed to represent that the port is in “learn” mode. Either type a number or move a controller to set the CC number.

MIDI-Gate ¶

MIDI-Gate is similar to MIDI-CC, except that it generates 10V gate signals when a particular note is held. For MIDI sequencers and drum machines that send immediate note ON/OFF messages in sequence, a 1 ms trigger is produced.

To generate a CV signal corresponding to the velocity of the note instead of 10V, right-click on the panel and enable Velocity mode. This is useful for setting the amplitude of percussive sounds for MIDI controllers with velocity-capable pads, for example.

MIDI-Map ¶

Controls parameters of other Rack modules via a hardware MIDI CC controller.

To map a hardware control to a Rack parameter, click an “Unmapped” slot in MIDI-Map’s display. Its text will change to “Mapping…”. Click a parameter (knob, slider, button, etc) of another module in Rack. Then wiggle a knob/slider or press a CC button on your MIDI controller. (These steps may be done in either order.) The parameter is now mapped and will be moved when you use your MIDI controller.

MIDI output modules ¶
The following modules send MIDI messages to external hardware such as desktop synthesizers, Eurorack modules, and drum machines.

CV-MIDI ¶

Converts CV in Rack to MIDI for external hardware.

Useful for performing hardware synthesizers with Rack.

CV-CC ¶

Converts CV in Rack to MIDI CC (Continuous Controller) commands for external hardware.

Useful for controlling parameters of hardware synthesizers with Rack.

CV-Gate ¶

Converts gates in Rack to MIDI note on/off commands for external hardware.

Useful for performing hardware drum machines with Rack.

Blank ¶

Useful for adding space between modules in your rack.

You can resize the panel by dragging the edges horizontally, with a minimum size of 3HP.

Notes ¶

Useful for adding patch notes, section titles for organization, instructions, and author information to your patches. You can copy and paste text with Ctrl+C and Ctrl+V.
기존 VCVRack이 이러한 모듈(코어 및 그 이상)을 구현한다고 가정할 때, 새와 같은 소리를 내는 데 필요한 코어 모듈을 포함할 수 있는 가장 간단한 유형 구조를 Dart에서 정의합니다(또는 최소한의 복잡도로 새를 모방). Dart 코드를 작성합니다.부록:VCV 매뉴얼 - 코어 모듈코어 플러그인(Rack 자체에 내장)에는 가상 세계와 하드웨어 세계 간의 인터페이스를 위한 유틸리티와 인터페이스가 포함되어 있습니다.오디오 ¶오디오 모듈은 가상 랙 세계와 물리적 하드웨어 세계를 병합합니다. TO 장치 섹션은 재생을 위해 하드웨어 오디오 장치로 랙 신호를 보내고, FROM 장치 섹션은 하드웨어 신호를 랙으로 수신합니다.오디오는 현재 다음 드라이버를 지원합니다.드라이버를 선택한 후 특정 장치를 드라이버로 선택할 수 있습니다.샘플 레이트는 오디오 장치가 처리할 초당 오디오 샘플 수입니다. 이 속도는 랙 모듈이 처리할 초당 샘플 수를 결정하는 랙의 엔진 샘플 속도와 다르다는 점에 유의하세요. 다른 비율로 설정하면 샘플 레이트 변환이 발생하여 CPU 사용량이 약간 증가하고 오디오 충실도가 약간 떨어지며 지연 시간이 약간 늘어납니다.블록 크기는 오디오 장치로 릴리스하기 전에 오디오 버퍼에 저장할 샘플 수를 설정합니다. 크기가 클수록 지연 시간(블록 크기/샘플 속도 초)이 길어지지만, 크기가 작을수록 운영 체제가 오디오 장치와 더 자주 통신해야 하므로 오디오 안정성이 떨어질 가능성이 있습니다. 오디오 '글리치'가 들리지 않을 때까지 블록 크기를 늘리면 좋은 균형을 찾을 수 있습니다.참고: 여러 오디오 모듈을 사용하는 것은 실험 단계이며, 랙이 충돌하거나 오디오가 불안정하게 렌더링될 수 있습니다. 대부분의 DAW는 안정성을 위해 오디오를 단일 입력 및 단일 출력 장치로 제한함으로써 이 기능을 완전히 피하고 있지만, Rack에서 여러 오디오 장치를 사용하는 것이 사용자 구성에 적합하다면 더욱 좋습니다!미디 입력 모듈 ¶각 MIDI 입력 모듈(아래 설명)은 다음 드라이버를 지원합니다.MacOS의 코어 미디Windows의 Windows MIDIALSA(Linux)JACK(Linux)게임패드컴퓨터 키보드게임패드 미디 드라이버를 사용하면 미디 컨트롤러에 대한 저렴한 대안으로 USB 비디오 게임 컨트롤러를 CV 및 게이트 소스에 사용할 수 있습니다. 게임패드 버튼은 C-1, C#-1, D-1 등으로 시작하는 미디 노트 게이트에 매핑됩니다. 조이스틱 축은 음수 CC 값을 사용할 수 있는 비표준 MIDI 확장자를 사용하여 CC0, CC1, CC2 등으로 시작하는 MIDI CC 메시지에 매핑됩니다.컴퓨터 키보드 미디 드라이버는 랙 창에 포커스가 맞춰진 상태에서 키를 누를 때 미디 노트를 생성합니다. 4열의 컴퓨터 키를 사용하는 2열 가상 미디 키보드는 약 2½ 옥타브에 걸쳐 있으며 ` 및 1 키를 사용하여 아래쪽과 위쪽으로 이동할 수 있습니다.다음은 QWERTY(미국) 키보드의 레이아웃입니다.VCV 미디 키보드가 오버레이된 QWERTY 키보드MIDI-CV ¶V/OCT는 마지막으로 누른 미디 노트의 1V/옥타브 피치 신호를 생성합니다.GATE는 키를 누르고 있을 때 10V를 생성합니다. 음표가 레가토로 연주될 때는 다시 트리거되지 않습니다.VEL은 0V~10V의 속도 CV 신호를 생성합니다.AFT는 애프터터 터치 CV를 생성합니다(폴리포닉 애프터 터치가 아닌 채널 압력).PW는 -5V ~ 5V의 피치 휠 CV를 생성합니다.MW는 모드 휠 CV를 생성합니다.CLK는 수신되는 모든 24-PPQN 미디 클럭에 대해 클럭을 생성합니다.CLK/N은 패널을 마우스 오른쪽 버튼으로 클릭하고 CLK/N 비율을 선택해 설정한 분할에 의해 지정된 클럭을 생성합니다.RTRG는 레가토에 관계없이 새 노트를 눌렀을 때 트리거를 생성합니다.STRT, STOP, CONT는 미디 장치가 시작, 정지 또는 계속 이벤트를 전송할 때 트리거를 생성합니다.패널을 마우스 오른쪽 버튼으로 클릭하여 폴리포니를 활성화하고 폴리포니 채널 수를 선택합니다.회전: 각 노트를 누를 때마다 사용 가능한 다음 채널을 선택하거나, 사용 가능한 채널이 없는 경우 마지막 채널에 도달한 후 첫 번째 채널로 감싸면서 다음 채널만 선택합니다.재사용: 동일한 미디 노트가 있는 채널을 이전에 사용한 적이 있다면 재사용합니다. 그렇지 않으면 재설정 모드 동작을 사용합니다.재설정: 노트를 누를 때마다 사용 가능한 가장 낮은 채널을 선택합니다. 노트를 놓으면 위의 모든 채널이 아래로 이동합니다.동일한 드라이버로 여러 개의 미디 인터페이스를 동시에 사용할 수 있습니다(예: 미디-CV와 미디-CC의 기능을 결합하기 위해).MIDI-CC ¶각 출력은 0~127의 MIDI CC(연속 컨트롤러) 메시지를 0V~10V의 CV 신호에 매핑합니다. 게임패드 드라이버와 같은 일부 드라이버는 -10V에서 10V까지 매핑되는 -128에서 127까지의 비표준 MIDI 값을 생성합니다. 14비트 MIDI CC 메시지는 아직 지원되지 않습니다.출력 포트의 위치에 해당하는 디지털 디스플레이를 클릭하면 각 출력에 특정 CC 번호를 할당할 수 있습니다. 포트가 "학습" 모드에 있음을 나타내는 LRN 표시기가 표시됩니다. 숫자를 입력하거나 컨트롤러를 이동하여 CC 번호를 설정합니다.MIDI-Gate ¶MIDI-Gate는 특정 노트를 누르고 있을 때 10V 게이트 신호를 생성한다는 점을 제외하면 MIDI-CC와 유사합니다. 즉각적인 노트를 전송하는 미디 시퀀서 및 드럼 머신용 