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
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
160
Enabling Text Inputs on Any Remote GUI on Android (LT)
atsushieno
0
44
design and implementation of a next-gen. DAW sequencer engine for desktop, mobile and web
atsushieno
1
100
Android and Audio Plugins: State of Union
atsushieno
1
160
Can we build a DAW with Compose Multiplatform? Maybe!
atsushieno
0
59
2026年に相応しい 最先端プラグインホストの設計<del>と実装</del>
atsushieno
0
200
Android Audio: Beyond Winning On It
atsushieno
0
6.5k
Can we build better music software ecosystems for more generative era?
atsushieno
0
870
Some Music Libraries for Kotlin (with some .NET -> Kotlin migration stories)
atsushieno
0
820
Other Decks in Technology
See All in Technology
BALLAS Technology Deck
ballas_inc
0
220
TSKaigi Sendai 2026 - tsgo時代のTypeScript Playgroundはどう動くか
teamlab
PRO
0
110
Metadata - Section 3 : Dublin Core Standard · DC
mohab1
0
110
リアクションエンジニア ― 小さなリアクションから、話しかけやすい組織をつくる ―
ryuguyana
1
140
コードレビューをなくして見えたもの
henteko
0
140
公共システムAdventCalendar2026
toru_kubota
0
280
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
230
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
110
お客様の「やりたい」の先を見通す合意形成プロセス ~裏にある課題と不安を解きほぐすコツ~
yukakoseki
0
120
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
160
自律的なチームを作るためにTechPMがやらないこと
ny7760
1
530
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
320
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
Crafting Experiences
bethany
1
430
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
580
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.6k
Deep Space Network (abreviated)
tonyrice
0
410
What's in a price? How to price your products and services
michaelherold
247
13k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
740
Statistics for Hackers
jakevdp
799
230k
A better future with KSS
kneath
240
18k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
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 : その他