SlideShare a Scribd company logo
1 of 43
Download to read offline
Sounds Like Common Lisp
ゼロから始めるサウンドプログラミングから始めるサウンドプログラミング始めるサウンドプログラミングめるサウンドプログラミングサウンドプロから始めるサウンドプログラミンググラミング
2019-04-25, lispmeetup #75
だれですか?
TANAKA Shinichi
– Common Lisp好きき
– 『3つのLisp 3つの世界』』
の著者のひとりのひとり
SNS
– Twitter: @sin_clav
– GitHub: @t-sin
きょう話すこと話すことすこと
●
音プログラミングの基本プロから始めるサウンドプログラミンググラミングの基本
●
cl-portaudioの利用方法(ざっくり)ざっくり)
●
Common Lisp処理系を楽器にする方法を楽器にする方法楽器にする方法にするサウンドプログラミング方法
きょう話すこと話すことさないこと
●
PortAudio/cl-portaudioの詳細
– デバイス選択方法とか選択方法とか
●
音プログラミングの基本ソフトウェアの構築方法の構築方法
– フレームワークのアーキテクチャとかのアの構築方法ーキテクのアーキテクチャとかチャとかとか
●
他のソフトウェアとの関係のソフトウェアの構築方法との関係
– Ableton Live, Max/MSP, SuperColliderなどなど
こんな人におすすめにおすすめ
●
音プログラミングの基本プロから始めるサウンドプログラミンググラミングに興味があるがあるサウンドプログラミング
– シンセサイザーやギターのエフェクターギターのエフェクのアーキテクチャとかター
– サウンド系を楽器にする方法ソフトウェアの構築方法
– チップチューンとかGB音プログラミングの基本源のしくみとかのしくみとか
●
音プログラミングの基本を楽器にする方法この手でつくりたいでつくりたい
– あたたかみのあるサウンドプログラミングサウンド
●
「その波形、波形、Common Lisp製じゃないの??」じゃないの波形、??」
では、いきましょう
前提: 計算機で音を扱う で音プログラミングの基本を楽器にする方法扱う う話すこと (1)
●
音プログラミングの基本は連続データ連続データデータ
●
計算機で音を扱う は連続データ離散データしか扱えないデータしか扱う えない
●
音プログラミングの基本を楽器にする方法離散データしか扱えない的に近似する必要があるに近似する必要があるするサウンドプログラミング必要があるがあるサウンドプログラミング
前提: 計算機で音を扱う で音プログラミングの基本を楽器にする方法扱う う話すこと (2)
●
パルス選択方法とか符号変調 (Pulse Code Modulation)
●
一定周期毎の信号の振幅を量子化して記録の信号の振幅を量子化して記録を楽器にする方法量子化して記録して記録記録
– 信号を楽器にする方法時間方向と振幅方向に離散化と振幅を量子化して記録方向と振幅方向に離散化に離散データしか扱えない化して記録
プロから始めるサウンドプログラミンググラムで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングすしくみ
●
音プログラミングの基本ス選択方法とかレッドの中で以下を繰り返すで以下を繰り返すを楽器にする方法繰り返すり返すす
1. シス選択方法とかテムは連続データバッファを読んで音を鳴らすを楽器にする方法読んで音を鳴らすんで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす
2. バッファを読んで音を鳴らすが空になったらプログラムに知らせるになったら始めるサウンドプログラミングプロから始めるサウンドプログラミンググラムに知らせるら始めるサウンドプログラミングせるサウンドプログラミング
3. プロから始めるサウンドプログラミンググラムは連続データバッファを読んで音を鳴らすを楽器にする方法データで埋めるめるサウンドプログラミング
4. 1に戻るるサウンドプログラミング
コールバック関数関数
として実現される実現されるされる
プロから始めるサウンドプログラミンググラムで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングすしくみ
Common Lispで音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす
●
cl-portaudioを楽器にする方法利用して記録以下を繰り返すを楽器にする方法実行するするサウンドプログラミング
1.デバイス選択方法とか初期化して記録マクのアーキテクチャとかロから始めるサウンドプログラミングの中で以下を繰り返すで、
2.バッファを読んで音を鳴らすを楽器にする方法用意して、して記録、
3.ス選択方法とかトリームを楽器にする方法開いておき、いて記録おき、
4.値をバッファに書き込む。を楽器にする方法バッファを読んで音を鳴らすに書き込む。き込む。む。
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))))))
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))で
バッファを埋めるを初期化し埋めるめる
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ファを読んで音を鳴らすイルだって記録鳴らすしくみら始めるサウンドプログラミングす
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ファを埋めるイルを初期化し
バッファを埋めるに読み込み読み込みみ込み込みみ込み
バッファを埋めるの内容で内容でで
スを初期化しトリームを作成を初期化し埋めるめる
つまり……
●
シス選択方法とかテムのバッファを読んで音を鳴らす埋めるめ要がある求に応え続ければに応え続ければえ続データければ
●
好きなように音を鳴らせますきなように読み込み音を鳴らせますを初期化し鳴らせますらせます
こんなのつくれたら始めるサウンドプログラミングヤバい
Sound Experiments; Pukunui
●
音プログラミングの基本ソフトウェアの構築方法の実験中で以下を繰り返すです!
– https://github.com/t-sin/pukunui
●
できるサウンドプログラミングこと
– オシレータ(ざっくり)波が鳴るコード形を生成する)を楽器にする方法生成する)するサウンドプログラミング)
– エフェクのアーキテクチャとかタ(ざっくり)波が鳴るコード形を生成する)を楽器にする方法加工する)するサウンドプログラミング)
– シーケンサ(ざっくり)譜面を鳴らす)を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす)
– ユニットのモジュラーな接続データ
●
ユニットジェネレータ
ユニットジェネレータ
●
信号処理を楽器にする方法モジュール化して記録したもの
– 信号が出入りする箱を線で繋ぐイメージりするサウンドプログラミング箱を線で繋ぐイメージを楽器にする方法線で繋ぐイメージで繋ぐイメージぐイメージイメージ
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)))
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)))
@# はリーダマクロリーダマク関数ロ
スを初期化しロットの内容で値を計算するを初期化し計算するする
状態やパラメータ。やパラメータ。パラメータ。
これが別のユニット別のユニットの内容でユニット
であって実現されるもよい
unit例: オシレータ
●
三角波が鳴るコードを楽器にする方法鳴らすしくみら始めるサウンドプログラミングして記録みるサウンドプログラミング
unit例: オシレータ
●
三角波が鳴るコードを楽器にする方法鳴らすしくみら始めるサウンドプログラミングして記録みるサウンドプログラミング
●
ユニットの状態やパラメータを格納する構造体・パラメータパラメータ:
– 周波が鳴るコード数 (f))
– 初期位相角 (φ0)
– 位相角 (φ)
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)))
unit例: ディレイ
●
音プログラミングの基本を楽器にする方法遅らせて重ねるエフェクトら始めるサウンドプログラミングせて記録重ねるエフェクトねるサウンドプログラミングエフェクのアーキテクチャとかト
– 山びこのようなものびこのよう話すことなもの
– 段数を楽器にする方法増やすと奥行感がでるやギターのエフェクターすと奥行する感がでるがでるサウンドプログラミング
– 左右で遅れ時間を変えると奥行き感がでるで遅らせて重ねるエフェクトれ時間を楽器にする方法変えるサウンドプログラミングと奥行するき感がでるがでるサウンドプログラミング
●
バッファを読んで音を鳴らすに過去の音を入れ、それを参照の音プログラミングの基本を楽器にする方法入りする箱を線で繋ぐイメージれ、それを楽器にする方法参照
– リングバッファを読んで音を鳴らすを楽器にする方法利用
– mod演算でお尻と頭を繋げた配列と頭を繋げた配列を楽器にする方法繋ぐイメージげた配列
参考: リングバッファを読んで音を鳴らす
●
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時間前の値をの内容で値を計算するを初期化し
参照するする
値を計算するを初期化し書き込むとき込みむと
バッファを埋めるはリーダマクロ正の方向にの内容で方向にに読み込み
伸びるびる
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))))
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))))
シーケンサ
●
譜面を鳴らす)に従って音を鳴らすって記録音プログラミングの基本を楽器にする方法鳴らすしくみら始めるサウンドプログラミングす
– 信号のシーケンス選択方法とかを楽器にする方法送る = シーケンサるサウンドプログラミング = シーケンサ
●
どんな信号を楽器にする方法送る = シーケンサるサウンドプログラミングべき?
– 音プログラミングの基本の高さの信号さの信号 (Control Voltage; CV)
●
オシレータの周波が鳴るコード数
– 音プログラミングの基本の長さ・大きさの信号 さ・パラメータ大きさの信号 きさの信号 (Gate)
●
エンベロから始めるサウンドプログラミングープ信号を楽器にする方法掛けるけるサウンドプログラミング
エンベロから始めるサウンドプログラミングープ
●
音プログラミングの基本の長さ・大きさの信号 さやギターのエフェクター立ち上がり方・消え方ち上がり方・消え方がり方・パラメータ消え方え方
– Attack, Decay, Sustin, Release
– オシレータの出力と掛け合わせると掛けるけ合わせるわせるサウンドプログラミング
シーケンサに渡すもの(譜面)すもの(ざっくり)譜面を鳴らす))
●
今の音を追加回は以下のようなデータを渡すは連続データ以下を繰り返すのよう話すことなデータを楽器にする方法渡すもの(譜面)す
– 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)
...))
シーケンサのやギターのエフェクターるサウンドプログラミングこと
●
現在の音をミックスすると…の譜面を鳴らす)上がり方・消え方の時間を楽器にする方法見て記録、
– キュートップのイベントの時間が来るまで待機るサウンドプログラミングまで待機で音を扱う 
– 時間が来るまで待機たら始めるサウンドプログラミングデキューして記録発振器にする方法やギターのエフェクターADSRに指示
– …を楽器にする方法ずっと繰り返すり返すす
シーケンサ (コード)
(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))))
シーケンサ (コード)
(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の内容で値を計算するを初期化し
乗算するして実現されるいる
なので音プログラミングの基本がなるサウンドプログラミング
●
シーケンサのデモ
ユニットジェネレータするサウンドプログラミング
●
ユニットを楽器にする方法自由に接続可能に接続データ可能
●
ユニットのパラメータを楽器にする方法ユニットで制御可能
– 周波が鳴るコード数やギターのエフェクター振幅を量子化して記録など
– モジュラーシンセサイザーの音プログラミングの基本作りでよくやるりでよくやギターのエフェクターるサウンドプログラミング
ユニットジェネレータするサウンドプログラミング
●
ユニットを楽器にする方法自由に接続可能に接続データ可能
●
ユニットのパラメータを楽器にする方法ユニットで制御可能
– 周波が鳴るコード数やギターのエフェクター振幅を量子化して記録など
– モジュラーシンセサイザーの音プログラミングの基本作りでよくやるりでよくやギターのエフェクターるサウンドプログラミング
へ、変調だーー!だーー!
unit接続データ例: 周波が鳴るコード数変調
●
周波が鳴るコード数変調 (f)requency modulation; FM)
– 変調: あるサウンドプログラミング信号を楽器にする方法別の波の上に載せるの波が鳴るコードの上がり方・消え方に載せるせるサウンドプログラミング
– FM: あるサウンドプログラミング信号を楽器にする方法別の波の上に載せるの波が鳴るコードの周波が鳴るコード数で表す
– 制約の中で信号を伝達するのに用いられるの中で以下を繰り返すで信号を楽器にする方法伝達するのに用いられるするサウンドプログラミングのに用いら始めるサウンドプログラミングれるサウンドプログラミング
●
YAMAHAのアの構築方法レです
– メガドライブのアレですのアの構築方法レです
– アの構築方法ーケードゲームのアの構築方法レです
●
源のしくみとか平討魔伝のアの構築方法レです
なので音プログラミングの基本がなるサウンドプログラミング
●
周波が鳴るコード数変調のデモ
まとめ
●
シス選択方法とかテムのバッファを読んで音を鳴らす埋めるめ要がある求に応え続ければに答え続ければえ続データければ
好きなように音を鳴らすきなように音を鳴らす音を鳴らすを鳴らす鳴らすらすことができるサウンドプログラミング
– 音プログラミングの基本を楽器にする方法発振し、エフェクのアーキテクチャとかトを楽器にする方法かけ、譜面を鳴らす)通り鳴らすり鳴らすしくみら始めるサウンドプログラミングす
– ユニットを楽器にする方法組み合わせた音づくりみ合わせるわせた音プログラミングの基本づくり
●
もちろんCommon Lispでもできるサウンドプログラミング!
まとめ
●
既存のフレームワークとしては…のフレームワークのアーキテクチャとかとして記録は連続データ…
– Max/MSP やギターのエフェクターPureData (独自ビジュアの構築方法ル言語)
– SuperCollider (C風言語)
– Overtone (Clojure; SuperColliderラッパー)
– Open Music (Common Lisp; CLOSベース選択方法とか; 古いい)
– Opusmodus (Common Lisp; Macのみ; 本業の人も使ってるの人におすすめも使ってるって記録るサウンドプログラミング)
とかあるサウンドプログラミングけど…
●
自分でつくると楽しいですでつくるサウンドプログラミングと楽しいです
あなたのREPLを叩いてみれば叩いてみればいてみれば
Common Lispの音が鳴る!が鳴る!鳴る!る!
参考文献ズズ
●
青木 直史『サウンドプロから始めるサウンドプログラミンググラミング入りする箱を線で繋ぐイメージ門 音プログラミングの基本響合わせる成する)の基本と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
– 信号処理の理論から音合成、エフェクト、ユニットジェネレータから始めるサウンドプログラミング音プログラミングの基本合わせる成する)、エフェクのアーキテクチャとかト、ユニットジェネレータ
– 扱う う話すこと分でつくると楽しいです野が幅広いので辞書的に使えるヤバい本(厚さが)が幅を量子化して記録広いので辞書的に使えるヤバい本(厚さが)いので辞書き込む。的に近似する必要があるに使ってるえるサウンドプログラミングヤバい本(ざっくり)厚さが)さが)

More Related Content

What's hot

研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有Naoaki Okazaki
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介Preferred Networks
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道nishio
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)Yasunori Ozaki
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
CoRL2021論文読み会
CoRL2021論文読み会CoRL2021論文読み会
CoRL2021論文読み会Ryo Kabutan
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用Yasunori Ozaki
 
AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方Shinagawa Seitaro
 
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう音声合成のコーパスをつくろう
音声合成のコーパスをつくろうShinnosuke Takamichi
 
LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)masayoshi takahashi
 
研究発表のやり方
研究発表のやり方研究発表のやり方
研究発表のやり方Akinori Ito
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
AAをつくろう!
AAをつくろう!AAをつくろう!
AAをつくろう!Takami Sato
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
ひたすら楽してスライド作成
ひたすら楽してスライド作成ひたすら楽してスライド作成
ひたすら楽してスライド作成Masanori Morise
 
Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用HEROZ-JAPAN
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングRansui Iso
 

What's hot (20)

研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
CoRL2021論文読み会
CoRL2021論文読み会CoRL2021論文読み会
CoRL2021論文読み会
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
 
AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方AHC-Lab M1勉強会 論文の読み方・書き方
AHC-Lab M1勉強会 論文の読み方・書き方
 
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
 
LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)LTを支える技術(LLD'11 Winter)
LTを支える技術(LLD'11 Winter)
 
研究発表のやり方
研究発表のやり方研究発表のやり方
研究発表のやり方
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
AAをつくろう!
AAをつくろう!AAをつくろう!
AAをつくろう!
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Mean Teacher
Mean TeacherMean Teacher
Mean Teacher
 
ひたすら楽してスライド作成
ひたすら楽してスライド作成ひたすら楽してスライド作成
ひたすら楽してスライド作成
 
Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用Ponanzaにおける強化学習とディープラーニングの応用
Ponanzaにおける強化学習とディープラーニングの応用
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 

Similar to Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング

20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdfAyachika Kitazaki
 
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)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つくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミy3eadgbe
 
Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10Caru Shi
 
20220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v120220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v1Ayachika Kitazaki
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!UnityサウンドSIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!UnityサウンドIGDA Japan SIG-Audio
 
Practical Web Audio API Programming
Practical Web Audio API ProgrammingPractical Web Audio API Programming
Practical Web Audio API Programmingaike
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜Kosaku Ono
 
ふつうのLinuxプログラミング
ふつうのLinuxプログラミングふつうのLinuxプログラミング
ふつうのLinuxプログラミングShuhei KONDO
 
DTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidevDTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidevTomohiro Kumagai
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
perl meets beats.
perl meets beats.perl meets beats.
perl meets beats.technocat
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるKoichi Suzuki
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 

Similar to Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング (20)

20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_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)The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)
 
VSTiつくるよゼミ
VSTiつくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミ
 
Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10
 
20220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v120220224 visual programing iotlt vol10 kitazaki v1
20220224 visual programing iotlt vol10 kitazaki v1
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!UnityサウンドSIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
SIG-Audio#6 プラグインを書かなくてもここまで出来る!Unityサウンド
 
Practical Web Audio API Programming
Practical Web Audio API ProgrammingPractical Web Audio API Programming
Practical Web Audio API Programming
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
 
C-langage
C-langageC-langage
C-langage
 
ふつうのLinuxプログラミング
ふつうのLinuxプログラミングふつうのLinuxプログラミング
ふつうのLinuxプログラミング
 
DTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidevDTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidev
 
pyssp
pyssppyssp
pyssp
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
perl meets beats.
perl meets beats.perl meets beats.
perl meets beats.
 
ADS-B on raspberry pi
ADS-B on raspberry piADS-B on raspberry pi
ADS-B on raspberry pi
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 

More from t-sin

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシンt-sin
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったt-sin
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっていますt-sin
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装したt-sin
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)t-sin
 
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うバッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うt-sin
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアートt-sin
 

More from t-sin (8)

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
 
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うバッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使う
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアート
 

Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング