Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
learning how DAWs work, with Zrythm
Search
Atsushi Eno
December 11, 2022
Technology
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
learning how DAWs work, with Zrythm
2022-12-11 [音楽技術勉強会] Zrythm DAWから読み解くDAWの作り方
Atsushi Eno
December 11, 2022
More Decks by Atsushi Eno
See All by Atsushi Eno
Enabling Text Inputs on Any Remote GUI on Android (LT)
atsushieno
0
34
design and implementation of a next-gen. DAW sequencer engine for desktop, mobile and web
atsushieno
1
88
Android and Audio Plugins: State of Union
atsushieno
1
140
Can we build a DAW with Compose Multiplatform? Maybe!
atsushieno
0
48
2026年に相応しい 最先端プラグインホストの設計<del>と実装</del>
atsushieno
0
190
Android Audio: Beyond Winning On It
atsushieno
0
6.5k
Can we build better music software ecosystems for more generative era?
atsushieno
0
860
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
800
Building App Extensions equivalents on Android (maybe?)
atsushieno
1
1k
Other Decks in Technology
See All in Technology
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
180
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
100
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
230
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
170
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
160
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
Refining Active Record
shugo
0
150
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
890
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
We Have a Design System, Now What?
morganepeng
55
8.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Un-Boring Meetings
codingconduct
0
460
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Docker and Python
trallard
47
4.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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 : その他