Submit Search
Upload
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
•
4 likes
•
2,066 views
t-sin
Follow
Common Lispを足掛かりにして、音プログラミングの基本的な概念ややりかたをデモを交えて話しました。
Read less
Read more
Software
Report
Share
Report
Share
1 of 43
Download now
Download to read offline
Recommended
プレゼンの基本
プレゼンの基本
Hiroyuki Nagataki
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
Shinnosuke Takamichi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
[DL Hacks]Variational Approaches For Auto-Encoding Generative Adversarial Ne...
[DL Hacks]Variational Approaches For Auto-Encoding Generative Adversarial Ne...
Deep Learning JP
研究効率化Tips Ver.2
研究効率化Tips Ver.2
cvpaper. challenge
深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習
Masahiro Suzuki
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
cvpaper. challenge
Recommended
プレゼンの基本
プレゼンの基本
Hiroyuki Nagataki
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
Shinnosuke Takamichi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
[DL Hacks]Variational Approaches For Auto-Encoding Generative Adversarial Ne...
[DL Hacks]Variational Approaches For Auto-Encoding Generative Adversarial Ne...
Deep Learning JP
研究効率化Tips Ver.2
研究効率化Tips Ver.2
cvpaper. challenge
深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習
Masahiro Suzuki
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
cvpaper. challenge
研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
Naoaki Okazaki
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
If文から機械学習への道
If文から機械学習への道
nishio
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
Yasunori Ozaki
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
CoRL2021論文読み会
CoRL2021論文読み会
Ryo Kabutan
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方
Shinagawa Seitaro
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
Shinnosuke Takamichi
LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)
masayoshi takahashi
研究発表のやり方
研究発表のやり方
Akinori Ito
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
AAをつくろう!
AAをつくろう!
Takami Sato
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Mean Teacher
Mean Teacher
harmonylab
ひたすら楽してスライド作成
ひたすら楽してスライド作成
Masanori Morise
Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用
HEROZ-JAPAN
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
Ransui Iso
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf
Ayachika Kitazaki
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)
Hiroyuki Masuno
More Related Content
What's hot
研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
Naoaki Okazaki
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
If文から機械学習への道
If文から機械学習への道
nishio
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
Yasunori Ozaki
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
CoRL2021論文読み会
CoRL2021論文読み会
Ryo Kabutan
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方
Shinagawa Seitaro
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
Shinnosuke Takamichi
LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)
masayoshi takahashi
研究発表のやり方
研究発表のやり方
Akinori Ito
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
AAをつくろう!
AAをつくろう!
Takami Sato
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Mean Teacher
Mean Teacher
harmonylab
ひたすら楽してスライド作成
ひたすら楽してスライド作成
Masanori Morise
Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用
HEROZ-JAPAN
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
Ransui Iso
What's hot
(20)
研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
If文から機械学習への道
If文から機械学習への道
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
CoRL2021論文読み会
CoRL2021論文読み会
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)
研究発表のやり方
研究発表のやり方
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
AAをつくろう!
AAをつくろう!
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Mean Teacher
Mean Teacher
ひたすら楽してスライド作成
ひたすら楽してスライド作成
Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
Similar to Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf
Ayachika Kitazaki
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)
Hiroyuki Masuno
VSTiつくるよゼミ
VSTiつくるよゼミ
y3eadgbe
Kashiwa.r.10
Kashiwa.r.10
Caru Shi
20220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v1
Ayachika Kitazaki
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
t-sin
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
IGDA Japan SIG-Audio
Practical Web Audio API Programming
Practical Web Audio API Programming
aike
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
C-langage
C-langage
Hiramatsu Ryosuke
ふつうのLinuxプログラミング
ふつうのLinuxプログラミング
Shuhei KONDO
DTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidev
Tomohiro Kumagai
pyssp
pyssp
Shunsuke Aihara
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
perl meets beats.
perl meets beats.
technocat
ADS-B on raspberry pi
ADS-B on raspberry pi
Yukiyoshi Yoshimoto
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
t-sin
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
Koichi Suzuki
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Similar to Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
(20)
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)
VSTiつくるよゼミ
VSTiつくるよゼミ
Kashiwa.r.10
Kashiwa.r.10
20220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v1
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
Practical Web Audio API Programming
Practical Web Audio API Programming
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
C-langage
C-langage
ふつうのLinuxプログラミング
ふつうのLinuxプログラミング
DTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidev
pyssp
pyssp
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
perl meets beats.
perl meets beats.
ADS-B on raspberry pi
ADS-B on raspberry pi
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
More from t-sin
続・SECDマシン
続・SECDマシン
t-sin
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
t-sin
Common Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
t-sin
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
t-sin
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使う
t-sin
Common lispでグラフィックアート
Common lispでグラフィックアート
t-sin
More from t-sin
(8)
続・SECDマシン
続・SECDマシン
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使う
Common lispでグラフィックアート
Common lispでグラフィックアート
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
1.
Sounds Like Common
Lisp ゼロから始めるサウンドプログラミングから始めるサウンドプログラミング始めるサウンドプログラミングめるサウンドプログラミングサウンドプロから始めるサウンドプログラミンググラミング 2019-04-25, lispmeetup #75
2.
だれですか? TANAKA Shinichi – Common
Lisp好きき – 『3つのLisp 3つの世界』』 の著者のひとりのひとり SNS – Twitter: @sin_clav – GitHub: @t-sin
3.
きょう話すこと話すことすこと ● 音プログラミングの基本プロから始めるサウンドプログラミンググラミングの基本 ● cl-portaudioの利用方法(ざっくり)ざっくり) ● Common Lisp処理系を楽器にする方法を楽器にする方法楽器にする方法にするサウンドプログラミング方法
4.
きょう話すこと話すことさないこと ● PortAudio/cl-portaudioの詳細 – デバイス選択方法とか選択方法とか ● 音プログラミングの基本ソフトウェアの構築方法の構築方法 – フレームワークのアーキテクチャとかのアの構築方法ーキテクのアーキテクチャとかチャとかとか ● 他のソフトウェアとの関係のソフトウェアの構築方法との関係 –
Ableton Live, Max/MSP, SuperColliderなどなど
5.
こんな人におすすめにおすすめ ● 音プログラミングの基本プロから始めるサウンドプログラミンググラミングに興味があるがあるサウンドプログラミング – シンセサイザーやギターのエフェクターギターのエフェクのアーキテクチャとかター – サウンド系を楽器にする方法ソフトウェアの構築方法 –
チップチューンとかGB音プログラミングの基本源のしくみとかのしくみとか ● 音プログラミングの基本を楽器にする方法この手でつくりたいでつくりたい – あたたかみのあるサウンドプログラミングサウンド ● 「その波形、波形、Common Lisp製じゃないの??」じゃないの波形、??」
6.
では、いきましょう
7.
前提: 計算機で音を扱う で音プログラミングの基本を楽器にする方法扱う
う話すこと (1) ● 音プログラミングの基本は連続データ連続データデータ ● 計算機で音を扱う は連続データ離散データしか扱えないデータしか扱う えない ● 音プログラミングの基本を楽器にする方法離散データしか扱えない的に近似する必要があるに近似する必要があるするサウンドプログラミング必要があるがあるサウンドプログラミング
8.
前提: 計算機で音を扱う で音プログラミングの基本を楽器にする方法扱う
う話すこと (2) ● パルス選択方法とか符号変調 (Pulse Code Modulation) ● 一定周期毎の信号の振幅を量子化して記録の信号の振幅を量子化して記録を楽器にする方法量子化して記録して記録記録 – 信号を楽器にする方法時間方向と振幅方向に離散化と振幅を量子化して記録方向と振幅方向に離散化に離散データしか扱えない化して記録
9.
プロから始めるサウンドプログラミンググラムで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングすしくみ ● 音プログラミングの基本ス選択方法とかレッドの中で以下を繰り返すで以下を繰り返すを楽器にする方法繰り返すり返すす 1. シス選択方法とかテムは連続データバッファを読んで音を鳴らすを楽器にする方法読んで音を鳴らすんで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす 2. バッファを読んで音を鳴らすが空になったらプログラムに知らせるになったら始めるサウンドプログラミングプロから始めるサウンドプログラミンググラムに知らせるら始めるサウンドプログラミングせるサウンドプログラミング 3.
プロから始めるサウンドプログラミンググラムは連続データバッファを読んで音を鳴らすを楽器にする方法データで埋めるめるサウンドプログラミング 4. 1に戻るるサウンドプログラミング コールバック関数関数 として実現される実現されるされる
10.
プロから始めるサウンドプログラミンググラムで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングすしくみ
11.
Common Lispで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす ● cl-portaudioを楽器にする方法利用して記録以下を繰り返すを楽器にする方法実行するするサウンドプログラミング 1.デバイス選択方法とか初期化して記録マクのアーキテクチャとかロから始めるサウンドプログラミングの中で以下を繰り返すで、 2.バッファを読んで音を鳴らすを楽器にする方法用意して、して記録、 3.ス選択方法とかトリームを楽器にする方法開いておき、いて記録おき、 4.値をバッファに書き込む。を楽器にする方法バッファを読んで音を鳴らすに書き込む。き込む。む。
12.
Common Lispで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす ● 440Hzのサイン波が鳴るコードが鳴らすしくみるサウンドプログラミングコード CL-USER> (let*
((inch 0) (outch 1) (sample-rate 44100.0D0) (buffer-size 1024) (buffer (make-array buffer-size :element-type 'single-float))) (portaudio:with-audio (portaudio:with-default-audio-stream (s inch outch :sample-format :float :sample-rate sample-rate :frames-per-buffer buffer-size) (let ((ph 0)) (loop (loop :for idx :from 0 :below buffer-size :for val := (coerce (sin ph) 'single-float) :do (progn (setf (aref buffer idx) val) (incf ph (* (/ 440 sample-rate) PI)))) (portaudio:write-stream s buffer))))))
13.
Common Lispで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす ● 440Hzのサイン波が鳴るコードが鳴らすしくみるサウンドプログラミングコード CL-USER> (let*
((inch 0) (outch 1) (sample-rate 44100.0D0) (buffer-size 1024) (buffer (make-array buffer-size :element-type 'single-float))) (portaudio:with-audio (portaudio:with-default-audio-stream (s inch outch :sample-format :float :sample-rate sample-rate :frames-per-buffer buffer-size) (let ((ph 0)) (loop (loop :for idx :from 0 :below buffer-size :for val := (coerce (sin ph) 'single-float) :do (progn (setf (aref buffer idx) val) (incf ph (* (/ 440 sample-rate) PI)))) (portaudio:write-stream s buffer)))))) デバイスを初期化しを初期化し初期化しし スを初期化しトリームを作成を初期化し作成 サイン波波(440Hz)Hz))で バッファを埋めるを初期化し埋めるめる
14.
WAVファを読んで音を鳴らすイルだって記録鳴らすしくみら始めるサウンドプログラミングす CL-USER> (flet ((find-chunk
(name chunks) (find name chunks :test #'string= :key (lambda (c) (getf c :chunk-id)))) (16bit->float (lsb msb) (float (if (= (logand msb #x80) #x80) (- (- (/ (lognot (+ (ash (logand msb #x7f) 8) lsb)) (expt 2 15))) 1) (/ (+ (ash msb 8) lsb) (expt 2 15)))))) (let* ((wav (wav:read-wav-file "ev.wav")) (data (getf (find-chunk "data" wav) :chunk-data)) (buf (make-array (/ (length data) 2)))) (loop :for i :from 0 :below (length data) :by 4 :do (setf (aref buf (/ i 2)) (16bit->float (aref data (+ i 0)) (aref data (+ i 1))) (aref buf (1+ (/ i 2))) (16bit->float (aref data (+ i 2)) (aref data (+ i 3))))) (portaudio:with-audio (portaudio:with-default-audio-stream (s 0 2 :sample-format :float :sample-rate 44100.0D0 :frames-per-buffer (/ (length buf) 2)) (loop (portaudio:write-stream s buf))))))
15.
WAVファを読んで音を鳴らすイルだって記録鳴らすしくみら始めるサウンドプログラミングす CL-USER> (flet ((find-chunk
(name chunks) (find name chunks :test #'string= :key (lambda (c) (getf c :chunk-id)))) (16bit->float (lsb msb) (float (if (= (logand msb #x80) #x80) (- (- (/ (lognot (+ (ash (logand msb #x7f) 8) lsb)) (expt 2 15))) 1) (/ (+ (ash msb 8) lsb) (expt 2 15)))))) (let* ((wav (wav:read-wav-file "ev.wav")) (data (getf (find-chunk "data" wav) :chunk-data)) (buf (make-array (/ (length data) 2)))) (loop :for i :from 0 :below (length data) :by 4 :do (setf (aref buf (/ i 2)) (16bit->float (aref data (+ i 0)) (aref data (+ i 1))) (aref buf (1+ (/ i 2))) (16bit->float (aref data (+ i 2)) (aref data (+ i 3))))) (portaudio:with-audio (portaudio:with-default-audio-stream (s 0 2 :sample-format :float :sample-rate 44100.0D0 :frames-per-buffer (/ (length buf) 2)) (loop (portaudio:write-stream s buf)))))) WAVファを埋めるイルを初期化し バッファを埋めるに読み込み読み込みみ込み込みみ込み バッファを埋めるの内容で内容でで スを初期化しトリームを作成を初期化し埋めるめる
16.
つまり…… ● シス選択方法とかテムのバッファを読んで音を鳴らす埋めるめ要がある求に応え続ければに応え続ければえ続データければ ● 好きなように音を鳴らせますきなように読み込み音を鳴らせますを初期化し鳴らせますらせます
17.
こんなのつくれたら始めるサウンドプログラミングヤバい
18.
Sound Experiments; Pukunui ● 音プログラミングの基本ソフトウェアの構築方法の実験中で以下を繰り返すです! –
https://github.com/t-sin/pukunui ● できるサウンドプログラミングこと – オシレータ(ざっくり)波が鳴るコード形を生成する)を楽器にする方法生成する)するサウンドプログラミング) – エフェクのアーキテクチャとかタ(ざっくり)波が鳴るコード形を生成する)を楽器にする方法加工する)するサウンドプログラミング) – シーケンサ(ざっくり)譜面を鳴らす)を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす) – ユニットのモジュラーな接続データ ● ユニットジェネレータ
19.
ユニットジェネレータ ● 信号処理を楽器にする方法モジュール化して記録したもの – 信号が出入りする箱を線で繋ぐイメージりするサウンドプログラミング箱を線で繋ぐイメージを楽器にする方法線で繋ぐイメージで繋ぐイメージぐイメージイメージ
20.
Pukunuiのunit ● unitは連続データ2つのもので構成する)されるサウンドプログラミング – 状態やパラメータを格納する構造体やギターのエフェクターパラメータを楽器にする方法格納する構造体するサウンドプログラミング構造体 – ス選択方法とかテレオ2chの値をバッファに書き込む。を楽器にする方法多値をバッファに書き込む。で返すす関数 (defunit
unit () (((src :export) :default nil) ((gain :export) :default 1 :max 1 :min 0) ((pan :export) :default 0 :max 1 :min -1)) (multiple-value-bind (l r) #@unit-src (stereo-mix l r #@unit-gain #@unit-pan)))
21.
Pukunuiのunit ● unitは連続データ2つのもので構成する)されるサウンドプログラミング – 状態やパラメータを格納する構造体やギターのエフェクターパラメータを楽器にする方法格納する構造体するサウンドプログラミング構造体 – ス選択方法とかテレオ2chの値をバッファに書き込む。を楽器にする方法多値をバッファに書き込む。で返すす関数 (defunit
unit () (((src :export) :default nil) ((gain :export) :default 1 :max 1 :min 0) ((pan :export) :default 0 :max 1 :min -1)) (multiple-value-bind (l r) #@unit-src (stereo-mix l r #@unit-gain #@unit-pan))) @# はリーダマクロリーダマク関数ロ スを初期化しロットの内容で値を計算するを初期化し計算するする 状態やパラメータ。やパラメータ。パラメータ。 これが別のユニット別のユニットの内容でユニット であって実現されるもよい
22.
unit例: オシレータ ● 三角波が鳴るコードを楽器にする方法鳴らすしくみら始めるサウンドプログラミングして記録みるサウンドプログラミング
23.
unit例: オシレータ ● 三角波が鳴るコードを楽器にする方法鳴らすしくみら始めるサウンドプログラミングして記録みるサウンドプログラミング ● ユニットの状態やパラメータを格納する構造体・パラメータパラメータ: – 周波が鳴るコード数
(f)) – 初期位相角 (φ0) – 位相角 (φ)
24.
unit例: オシレータ ● 三角波が鳴るコードを楽器にする方法鳴らすしくみら始めるサウンドプログラミングして記録みるサウンドプログラミング – コードとデモ (defunit
osc (unit) ((ph :default 0) ((init-ph :export) :default 0))) (defunit tri (osc) (((freq :export) :default 440 :max 20000 :min 0.05 :step 0.01)) (let ((v (tri (+ #@osc-ph #@osc-init-ph)))) (incf (osc-ph u) (/ #@tri-freq (masterinfo-sample-rate pinfo) 2)) (stereo-mix v v #@unit-gain #@unit-pan)))
25.
unit例: ディレイ ● 音プログラミングの基本を楽器にする方法遅らせて重ねるエフェクトら始めるサウンドプログラミングせて記録重ねるエフェクトねるサウンドプログラミングエフェクのアーキテクチャとかト – 山びこのようなものびこのよう話すことなもの –
段数を楽器にする方法増やすと奥行感がでるやギターのエフェクターすと奥行する感がでるがでるサウンドプログラミング – 左右で遅れ時間を変えると奥行き感がでるで遅らせて重ねるエフェクトれ時間を楽器にする方法変えるサウンドプログラミングと奥行するき感がでるがでるサウンドプログラミング ● バッファを読んで音を鳴らすに過去の音を入れ、それを参照の音プログラミングの基本を楽器にする方法入りする箱を線で繋ぐイメージれ、それを楽器にする方法参照 – リングバッファを読んで音を鳴らすを楽器にする方法利用 – mod演算でお尻と頭を繋げた配列と頭を繋げた配列を楽器にする方法繋ぐイメージげた配列
26.
参考: リングバッファを読んで音を鳴らす ● mod演算でお尻と頭を繋げた配列と頭を繋げた配列を楽器にする方法繋ぐイメージげた配列 – 一定期間の過去の音を入れ、それを参照のデータを楽器にする方法保持するのに便利するサウンドプログラミングのに便利 (defstruct
ring-buffer buf pos) (defun make-ring-buffer* (size) (make-ring-buffer :buf (make-array size) :pos 0)) (defun rbref (rb idx) (let ((len (length (ring-buffer-buf rb)))) (aref (ring-buffer-buf rb) (mod (+ len (- (ring-buffer-pos rb) (1+ idx))) len)))) (defun rbpush (v rb) (setf (aref (ring-buffer-buf rb) (ring-buffer-pos rb)) v) (setf (ring-buffer-pos rb) (mod (1+ (ring-buffer-pos rb)) (length (ring-buffer-buf rb))))) idx時間前の値をの内容で値を計算するを初期化し 参照するする 値を計算するを初期化し書き込むとき込みむと バッファを埋めるはリーダマクロ正の方向にの内容で方向にに読み込み 伸びるびる
27.
unit例: ディレイ ● ただ音プログラミングの基本が遅らせて重ねるエフェクトれるサウンドプログラミングだけのunit – リングバッファを読んで音を鳴らすに今の音を追加の音プログラミングの基本を楽器にする方法追加 –
tap位置(ざっくり)過去の音を入れ、それを参照)の音プログラミングの基本を楽器にする方法返すす –(defunit delay (unit) ((lbuf :default nil) (rbuf :default nil) ((tap :export) :default 0)) (multiple-value-bind (l r) #@unit-src (rbpush l (delay-lbuf u)) (rbpush r (delay-rbuf u)) (values (rbref (delay-lbuf u) #@delay-tap) (rbref (delay-rbuf u) #@delay-tap))))
28.
unit例: ディレイ ● 過去の音を入れ、それを参照の音プログラミングの基本たちと現在の音をミックスすると…の音プログラミングの基本を楽器にする方法ミックのアーキテクチャとかス選択方法とかするサウンドプログラミングと… (defunit delay-1
(unit) ((size) (time) (delay) (taps) ((mix :export) :default 0)) (let* ((bufsize (delay-1-size u)) (dtime (delay-1-time u)) (delay (delay-1-delay u)) (taps #@delay-1-taps) (mix #@delay-1-mix) (rdiff (/ (1+ (length taps))))) (multiple-value-bind (l r) #@unit-src (update-taps taps bufsize dtime pinfo) (rbpush l (delay-lbuf delay)) (rbpush r (delay-rbuf delay)) (loop :for tap :across taps :for ratio := (- 1 rdiff) :then (- ratio rdiff) :do (incf l (gain (rbref (delay-lbuf delay) tap) (* mix ratio))) :do (incf r (gain (rbref (delay-rbuf delay) tap) (* mix ratio)))) (values l r))))
29.
シーケンサ ● 譜面を鳴らす)に従って音を鳴らすって記録音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす – 信号のシーケンス選択方法とかを楽器にする方法送る =
シーケンサるサウンドプログラミング = シーケンサ ● どんな信号を楽器にする方法送る = シーケンサるサウンドプログラミングべき? – 音プログラミングの基本の高さの信号さの信号 (Control Voltage; CV) ● オシレータの周波が鳴るコード数 – 音プログラミングの基本の長さ・大きさの信号 さ・パラメータ大きさの信号 きさの信号 (Gate) ● エンベロから始めるサウンドプログラミングープ信号を楽器にする方法掛けるけるサウンドプログラミング
30.
エンベロから始めるサウンドプログラミングープ ● 音プログラミングの基本の長さ・大きさの信号 さやギターのエフェクター立ち上がり方・消え方ち上がり方・消え方がり方・パラメータ消え方え方 – Attack,
Decay, Sustin, Release – オシレータの出力と掛け合わせると掛けるけ合わせるわせるサウンドプログラミング
31.
シーケンサに渡すもの(譜面)すもの(ざっくり)譜面を鳴らす)) ● 今の音を追加回は以下のようなデータを渡すは連続データ以下を繰り返すのよう話すことなデータを楽器にする方法渡すもの(譜面)す – timeposは連続データ譜面を鳴らす)上がり方・消え方の位置を楽器にする方法表現するサウンドプログラミング構造体 – note→freqは連続データMIDIノート番号から始めるサウンドプログラミング周波が鳴るコード数への変換 –
:onやギターのエフェクター:offは連続データシーケンサが処理するサウンドプログラミングイベント名 ● 今の音を追加後の拡張を見据えてみたの拡張を見据えてみたを楽器にする方法見据えてみたえて記録みた (defparameter *space-invador-seq* `((,(make-timepos :bar 0 :beat 0 :pos 0) :on ,(note->freq 48)) (,(make-timepos :bar 0 :beat 0 :pos 0.25) :off) (,(make-timepos :bar 0 :beat 1 :pos 0) :on ,(note->freq 46)) (,(make-timepos :bar 0 :beat 1 :pos 0.25) :off) ...))
32.
シーケンサのやギターのエフェクターるサウンドプログラミングこと ● 現在の音をミックスすると…の譜面を鳴らす)上がり方・消え方の時間を楽器にする方法見て記録、 – キュートップのイベントの時間が来るまで待機るサウンドプログラミングまで待機で音を扱う –
時間が来るまで待機たら始めるサウンドプログラミングデキューして記録発振器にする方法やギターのエフェクターADSRに指示 – …を楽器にする方法ずっと繰り返すり返すす
33.
シーケンサ (コード) (defunit useq
(unit) (((queue :export) :default (make-queue :simple-cqueue)) (osc :default nil) (adsr :default (create-uadsr 0 100 100 1 100)) (multi :default (create-umultiply))) (let ((timepos (masterinfo-timepos pinfo)) (tick (masterinfo-tick pinfo)) (ev (qtop (useq-queue u)))) (multiple-value-bind (l r) (calc-unit (useq-multi u) pinfo) (when (and ev (timepos< (nth 0 ev) timepos)) (ecase (nth 1 ev) (:on (setf (uadsr-state (useq-adsr u)) :a (osc-freq (useq-osc u)) (nth 2 ev) (uadsr-start (useq-adsr u)) tick)) (:off (setf (uadsr-state (useq-adsr u)) :r (uadsr-start (useq-adsr u)) tick))) (qpop (useq-queue u))) (values l r))))
34.
シーケンサ (コード) (defunit useq
(unit) (((queue :export) :default (make-queue :simple-cqueue)) (osc :default nil) (adsr :default (create-uadsr 0 100 100 1 100)) (multi :default (create-umultiply))) (let ((timepos (masterinfo-timepos pinfo)) (tick (masterinfo-tick pinfo)) (ev (qtop (useq-queue u)))) (multiple-value-bind (l r) (calc-unit (useq-multi u) pinfo) (when (and ev (timepos< (nth 0 ev) timepos)) (ecase (nth 1 ev) (:on (setf (uadsr-state (useq-adsr u)) :a (osc-freq (useq-osc u)) (nth 2 ev) (uadsr-start (useq-adsr u)) tick)) (:off (setf (uadsr-state (useq-adsr u)) :r (uadsr-start (useq-adsr u)) tick))) (qpop (useq-queue u))) (values l r)))) pulseはリーダマクロ発振器、 adsrはリーダマクロエン波ベロープ、 multiはリーダマクロ乗算する器。 イベン波ト時刻が来たらが別のユニット来たらたら - :on ならadsrを初期化し開始 - :offならadsrを初期化し停止 発振器とadsrの内容で値を計算するを初期化し 乗算するして実現されるいる
35.
なので音プログラミングの基本がなるサウンドプログラミング ● シーケンサのデモ
36.
ユニットジェネレータするサウンドプログラミング ● ユニットを楽器にする方法自由に接続可能に接続データ可能 ● ユニットのパラメータを楽器にする方法ユニットで制御可能 – 周波が鳴るコード数やギターのエフェクター振幅を量子化して記録など – モジュラーシンセサイザーの音プログラミングの基本作りでよくやるりでよくやギターのエフェクターるサウンドプログラミング
37.
ユニットジェネレータするサウンドプログラミング ● ユニットを楽器にする方法自由に接続可能に接続データ可能 ● ユニットのパラメータを楽器にする方法ユニットで制御可能 – 周波が鳴るコード数やギターのエフェクター振幅を量子化して記録など – モジュラーシンセサイザーの音プログラミングの基本作りでよくやるりでよくやギターのエフェクターるサウンドプログラミング へ、変調だーー!だーー!
38.
unit接続データ例: 周波が鳴るコード数変調 ● 周波が鳴るコード数変調 (f)requency
modulation; FM) – 変調: あるサウンドプログラミング信号を楽器にする方法別の波の上に載せるの波が鳴るコードの上がり方・消え方に載せるせるサウンドプログラミング – FM: あるサウンドプログラミング信号を楽器にする方法別の波の上に載せるの波が鳴るコードの周波が鳴るコード数で表す – 制約の中で信号を伝達するのに用いられるの中で以下を繰り返すで信号を楽器にする方法伝達するのに用いられるするサウンドプログラミングのに用いら始めるサウンドプログラミングれるサウンドプログラミング ● YAMAHAのアの構築方法レです – メガドライブのアレですのアの構築方法レです – アの構築方法ーケードゲームのアの構築方法レです ● 源のしくみとか平討魔伝のアの構築方法レです
39.
なので音プログラミングの基本がなるサウンドプログラミング ● 周波が鳴るコード数変調のデモ
40.
まとめ ● シス選択方法とかテムのバッファを読んで音を鳴らす埋めるめ要がある求に応え続ければに答え続ければえ続データければ 好きなように音を鳴らすきなように音を鳴らす音を鳴らすを鳴らす鳴らすらすことができるサウンドプログラミング – 音プログラミングの基本を楽器にする方法発振し、エフェクのアーキテクチャとかトを楽器にする方法かけ、譜面を鳴らす)通り鳴らすり鳴らすしくみら始めるサウンドプログラミングす – ユニットを楽器にする方法組み合わせた音づくりみ合わせるわせた音プログラミングの基本づくり ● もちろんCommon
Lispでもできるサウンドプログラミング!
41.
まとめ ● 既存のフレームワークとしては…のフレームワークのアーキテクチャとかとして記録は連続データ… – Max/MSP やギターのエフェクターPureData
(独自ビジュアの構築方法ル言語) – SuperCollider (C風言語) – Overtone (Clojure; SuperColliderラッパー) – Open Music (Common Lisp; CLOSベース選択方法とか; 古いい) – Opusmodus (Common Lisp; Macのみ; 本業の人も使ってるの人におすすめも使ってるって記録るサウンドプログラミング) とかあるサウンドプログラミングけど… ● 自分でつくると楽しいですでつくるサウンドプログラミングと楽しいです
42.
あなたのREPLを叩いてみれば叩いてみればいてみれば Common Lispの音が鳴る!が鳴る!鳴る!る!
43.
参考文献ズズ ● 青木 直史『サウンドプロから始めるサウンドプログラミンググラミング入りする箱を線で繋ぐイメージ門 音プログラミングの基本響合わせる成する)の基本とC言語によるサウンドプログラミング実装
』 – https://www.amazon.co.jp/dp/4774155225 – 音プログラミングの基本処理の基本・パラメータ音プログラミングの基本合わせる成する)(ざっくり)Pukunuiでいう話すことと発振器にする方法まわり) ● 小坂直敏『サウンドエフェクのアーキテクチャとかトのプロから始めるサウンドプログラミンググラミング Cによるサウンドプログラミング音プログラミングの基本の加工する)と音プログラミングの基本源のしくみとか合わせる成する)』 – https://www.amazon.co.jp/dp/4274068943/ – ディレイとか声の合成とかの合わせる成する)とか ● Curtis Roads『コンピュータ音プログラミングの基本楽 歴史・パラメータテクのアーキテクチャとかノロから始めるサウンドプログラミングジー・パラメータアの構築方法ート』 – https://www.amazon.co.jp/dp/4501532106 – 信号処理の理論から音合成、エフェクト、ユニットジェネレータから始めるサウンドプログラミング音プログラミングの基本合わせる成する)、エフェクのアーキテクチャとかト、ユニットジェネレータ – 扱う う話すこと分でつくると楽しいです野が幅広いので辞書的に使えるヤバい本(厚さが)が幅を量子化して記録広いので辞書的に使えるヤバい本(厚さが)いので辞書き込む。的に近似する必要があるに使ってるえるサウンドプログラミングヤバい本(ざっくり)厚さが)さが)
Download now