Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
learning how DAWs work, with Zrythm
Search
Atsushi Eno
December 11, 2022
Technology
0
1.3k
learning how DAWs work, with Zrythm
2022-12-11 [音楽技術勉強会] Zrythm DAWから読み解くDAWの作り方
Atsushi Eno
December 11, 2022
Tweet
Share
More Decks by Atsushi Eno
See All by Atsushi Eno
Android Audio: Beyond Winning On It
atsushieno
0
2.4k
Can we build better music software ecosystems for more generative era?
atsushieno
0
180
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
430
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
640
Taking trends in music app development into the future mobile ecosystem
atsushieno
0
590
DTM entry level hands-on
atsushieno
0
640
[COSCUP2024] Catching up Trends in Audio App Development
atsushieno
0
850
Building Kotlin Multiplatform Libraries in 2024
atsushieno
1
4.2k
Kotlin Multiplatformで MIDI 1.0/2.0 ライブラリを作っている話
atsushieno
1
810
Other Decks in Technology
See All in Technology
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
260
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
200
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
roppongirb_20250911
igaiga
1
250
Create Ruby native extension gem with Go
sue445
0
130
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
350
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
450
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
280
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
260
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
260
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Speed Design
sergeychernyshev
32
1.1k
Producing Creativity
orderedlist
PRO
347
40k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
The Language of Interfaces
destraynor
161
25k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
The Invisible Side of Design
smashingmag
301
51k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Thoughts on Productivity
jonyablonski
70
4.8k
Transcript
Zrythmから読み解く DAWの作り方 atsushieno
Agenda Zrythmの紹介(手短に) デモ DAWを作るためには何が必要? → Hacking Zrythm gtk4アプリケーション 楽曲のモデル オーディオ・MIDIデバイスへのアクセス
音楽の再生 プラグインホスト機能 GUI オーディオエディタ ルーティング・オーディオグラフ
行動規範 (完全版は https://music-tech.connpass.com/event/267483/ にあります) 「性別、性的自認・性的指向、年齢、障害、身体的特徴、人種、民族、宗教(あるいは無宗教)、技術 的指向などを理由としたハラスメントの無い状態を維持」してください 何か問題があって対処に困った場合は イベントページの運営メンバー にご連絡ください
Guest alextee
Zrythm: an emerging open source DAW
DAWとしての位置付け? LibreArts記事の概観だと「 現代の電子音楽に特化した伝統的なシーケンサー」
Zrythm is free (as in speech) https://git.sr.ht/~alextee/zrythm クロスプラットフォームで動作(GtkアプリなのでGNOME環境で最適) AGPLv3ライセンス パッケージは有償(フリーソフトウェアは売るのも自由)
はやめのリリース、しょっちゅうリリース(伽藍とバザール) Linux Audioコミュニティでも注目されている
Get Involved バグレポート: sr.ht zrythm-bug 機能要望: sr.ht zrythm-feature ※今はv1リリースの優先度が高い ※将来的なタスクは
v2
Playing with Zrythm (demo) disclaimer: - まだbeta開発版で、たまに落ちるかも… (backupは頻繁に作られる) - 配信環境なのでより不安定気味
半年前のunfa liveの頃より格段に安定しているはず(これも配信)
DAWを作るには何が必要?(一般論) GUI • トラックリスト/タイムライン • ファイルやプラグインの選択・接続 • ピアノロール: (MIDI)イベントリスト •
オートメーションサポート • オーディオエディタ • Copy/Paste/Undo/Redoの設計 • プラグインウィンドウ/ダイアログ表示 GUI以外 • プラグインホストとオーディオエンジン ◦ 複数プラグインフォーマットの対応 ◦ 各種プラグインのリストアップ ◦ リアルタイム再生の対応 • オーディオ録音、MIDI入力 ◦ オーディオデバイス設定 • 楽曲の編集機能 ◦ Undo/Redo処理の実体はこっち • save/load, import/export • コード入力支援 • スクリプティング(マクロ)
Zrythmはgtk4アプリケーション GNOMEアプリケーションではないのでWindows/Macでも動作する meson(GNOMEの標準ビルドシステム)でビルド cf. Ardour FAQ「GUIツールキットの違いは大したこと無い」 atsushieno私見 「そうかな…?」
Zrythmはgtk4アプリケーション GUIリソース: ./resources/ui/*.ui ファイル gtk4のUIリソース (XML) cambalacheで開ける? 他言語化リソース: *.poファイル (gettext)
翻訳のcontributionはWeblate経由でもできる atsushieno私見: できるなら.poファイルを編集してローカルで確認したほうがいい
楽曲のモデル: トラックの種類(一般論) - だいたいオーディオトラックと(MIDI)トラックから成る - Instrument trackとMIDI trackが別のこともある (Zrythm, Cubase)
- Fxトラックでオーディオ入出力をルーティングできる - 実装はオーディオグラフ (後で) - オートメーショントラックで特定のパラメーターだけ編集 - やることはだいたいMIDIトラックと同じ - トラックはグループ化して管理できるのが一般的 - 他 - マスタートラック、テンポトラック、コードトラックなど
楽曲のモデル: トラックの編成(一般論) - トラックは複数のリージョン(あるいはクリップ)から成る - リージョンにはオーディオファイルや (MIDI)イベントが含まれる - 時間位置情報とセット -
オーディオファイルは加工可能 - タイムストレッチやフェードイン/アウト指定が可能 - 内部的には加工前ファイルとは別情報として保持 - (MIDI)トラックはInstrumentを指定する - オーディオ/MIDIトラックにはエフェクト(プラグイン)を適用できる - ノート情報は変わりつつある - 伝統的にはMIDI 1.0レベルの情報 - 近年はオートメーション対応も求められる (MPE: Zrythmではv2以降)
Zrythmのオーディオ・MIDIデバイスへのアクセス • 音楽の再生→オーディオ出力が必要 • 生演奏・歌の録音→オーディオ入力が必要 • MIDIキーボードの利用→MIDI入力が必要 プラットフォーム別オーディオAPIの利用 (WinMM /
CoreAudio / ALSA / JACK / PulseAudio) 直接実装 から Jack + RtAudio経由の実装になりそう MIDI I/O: WinMM / CoreMIDI / JACK MIDI or ALSA Sequencer これもJack MIDI + RtMidi経由の実装になりそう
音楽の再生(ただし入力にも対応) オーディオ処理は遅れると各種ノイズが発生する - 処理速度も重要だが、リアルタイムでのオーディオ処理が最も重要 - 多くはOS側がリアルタイムスレッドでコールバックの主導権をもつ (WinMM / CoreAudio /
Linux-PulseAudio) DAWからの音楽の再生は音楽プレイヤーとは、オーディオ処理の内容が根本的に違う - 音楽プレイヤー : MP3等をデコード(必要なら) → エフェクトを適用 - DAW: 全トラックの全プラグインに、オーディオと MIDIを処理させる → 結果を合成 ユーザーが再生中に曲を編集する(オーディオ・ MIDIの録音・即再生もある) Zrythm: オーディオエンジン初期化時にオーディオコールバックで engine_process() を指定
プラグインホスト機能 DAWはプラグインホスト ZrythmはLV2ホスト (lv2/lilv) とCarlaホスト (falkTX/Carla) の2系統を実装 Carlaはさまざまなプラグインフォーマットをサポート AU, LV2,
VST2, VST3, CLAP, LADSPA, DSSI, SF2, SFZ, Reaper JSFX 内部的にはlilv, VeSTige, JUCE, fluidsynth, SFZero (or sfizz), ysfxを利用 seealso: DISTRHO/Ildaeil - host as a plugin, wrapper around Carla ホストの仕事: プラグインリスト管理とインスタンス管理
DAWのGUI: トラックリストとピアノロール(一般論) - とにかく情報項目が多いので見やすくする - トラックリスト : なるべく多く表示したい vs. 操作できる大きさ
/ 区別しやすさ - タイムラインは曲の長さ次第で無限に伸びる - ズーム・スクロールが重要 - テンポと拍子 (Time Signature) のトラック - Zrythmは(現状)打ち込み内容と連動しない(演奏表示のみ変更可能) - 再生時にアニメーションが必要 - 演奏に追従する - ページング: ピアノロール表示幅 or n拍子毎?
DAWのGUI: (MIDI)イベントの編集(一般論) - トラックリストの中でどう表示するか - CCやベロシティなどを表示するパネルも必要になる - タイムラインとピアノロールの同期/非同期 - 特殊なコピー/ペースト操作
- MPEやNote Expressionへの対応(Zrythmはv2以降) - ノート管理パラダイムの変化
オーディオエディタ これ単体でもアプリになりうる機能(!) タイムストレッチング フェードイン/アウト
ノードグラフ: プラグインのルーティング(一般論) 有向非巡回グラフ (DAG) Zrythmの実装 - src/audio/graph.c Ardourのルーティング [PDF] (Robin
Gareus) cf. juce::AudioProcessorGraph cf. Tracktion Graph (@ ADC21)
楽曲データの保存(一般論) DAWで保存すべき情報とは? - トラック編成 - 各トラックのプラグイン設定: グラフ(後述)、stateなど - オーディオセットアップ(デバイスの接続・選択状態など) -
GUIの状態(音楽データではないが打ち込み作業環境の復元は有用) - 他の環境に持っていってロードしたい →エクスポート機能を使う - DAWとはそもそも何をし、何を保存すべきなのか ? 編集操作はundoable action = それぞれの編集操作状態が保存可能であることが理想 Zrythmの楽曲データ: メインはyamlをzstdで圧縮、他リソースを含むフォルダ
その他の諸機能 コード入力支援 - いわゆるmusicality - コードトラックに手作業でコードを入力する - 現在のコードに基づいて入力が支援される - ソフトウェア技術的にはそんなに難しくない(はず?)
ユーザースクリプティング - GNU guileを利用 (Scheme / ECMAScript) - ユーザーの利便性(広く) vs. 後方互換性の維持(狭く)
hacking Zrythm mesonに対応しているIDE (テキストエディタの場合は何でも良いので、あくまで IDEとして) △ VSCodium / VSCode meson
addinがある / Clang Analyzerは機能するっぽい / デバッグが無理? × CLion (meson pluginにプロジェクトモデル構築機能がなく、解析できない) △ Gnome Builder(mesonネイティブ対応だがClang Analyzerが十分機能しない)
ソースツリー ext/* : zrythmで取り込んだ外部コード subprojects/* : mesonが取り込む外部コード inc : ヘッダファイル
(public? API) po : i18nリソース. *.potがマスター / .*poは訳文 resources : GUIレイアウトリソースなどもある Tips: バグの原因を探す: Zrythmのlogには関数名 などが記録されていて便利 src/ actions : (主に)GUIから呼び出せる処理 audio : オーディオエンジン (I/O, グラフ, 再生) gui : GUI実装 guile : ユーザースクリプティングのサポート plugins : プラグインホスト(呼び出し)部分 schemas : プロジェクトのデータモデル settings : ユーザー設定のデータモデル utils : その他