狠狠撸

狠狠撸Share a Scribd company logo
2
Most read
6
Most read
22
Most read
Copyright (c) 2011 Ransui Iso, All rights reserved.
Pytnonで作る
俺様Sound Effector
2015-10-10
Python Conference JP 2015
Ransui Iso
Copyright (c) 2011 Ransui Iso, All rights reserved.
おまえ誰よ?
http://www.facebook.com/ransui
@ransui
Ransui Iso (磯 蘭水)
Pythonは1998年から使っています。E-Commerceエンジンやサーチエンジンの開
発、Zopeを用いたWebサイト開発、ネット広告配信システムについての研究開発
などを経て、今はクラウドシステム関連のお仕事をしています。
Copyright (c) 2011 Ransui Iso, All rights reserved.
Demo Programのありか
●
デモプログラムは以下のURLで入手できます
http://alpa.homeip.net/files/PyConJP2015/pyconjp2015_soundeffector.tar.bz2
Copyright (c) 2011 Ransui Iso, All rights reserved.
音って何だ?
Copyright (c) 2011 Ransui Iso, All rights reserved.
音ってなんだ?
●
空気の密度の時間変化
– 粗密波として視覚化するのは面倒なので普通はグラフを使う
Copyright (c) 2011 Ransui Iso, All rights reserved.
音の3要素
音量
周期
●
音量
– 波の高さ
●
音高
– 波の周波数
●
音色
– 波の形
この3つの要素をコントロールできればOK
Copyright (c) 2011 Ransui Iso, All rights reserved.
音を出す装置
●
信号を空気の粗密波に変換する
Analog
Source
Amplifier Speaker
DACDigital
Source
微小電圧信号 電流信号
微小電圧信号
エンコードされた
数値信号
Copyright (c) 2011 Ransui Iso, All rights reserved.
楽器とかの場合
●
全部を通してアナログ信号の変換
Instrument Amplifier
Speaker
微小電圧信号
電流信号
EffectorEffector Effector
Copyright (c) 2011 Ransui Iso, All rights reserved.
アンプとスピーカー
●
最終段は「電流」で制御する
F(t) = q E(t, r(t)) + qv(t) × B(t, r(t))
要するに、強い地場の中で大電流が流れれば
より多くの力が発生するということ
Copyright (c) 2011 Ransui Iso, All rights reserved.
コンピュータと音
Copyright (c) 2011 Ransui Iso, All rights reserved.
デジタル化された音
●
サンプリング周波数
– 1秒あたりの分割数
●
量子化
– 振幅方向の分割数
CD音質の場合
– サンプリング周波数 44100Hz
– 量子化ビット数 16bit (65536段階)
Copyright (c) 2011 Ransui Iso, All rights reserved.
PCの場合
●
プログラムから信号を送り込むことができる
Amplifier
Output
Terminal
DAC
Device
Driver
OS
Sound API
Application
1:送り込むデータの形式を設定
2:音声信号を数値データとして送り込む
データは数値列なのでプログラムで
好き放題作成可能
Copyright (c) 2011 Ransui Iso, All rights reserved.
音の入出力
●
APIに対してバイナリ列でやりとりする
●
16bit符号付き量子化?ステレオの時
– インタリーブ形式
– エンディアンに気をつける
Left Channel
2bytes
Right Channel
2bytes
Left Channel
2bytes
Right Channel
2bytes
???
これで1サンプル分
Copyright (c) 2011 Ransui Iso, All rights reserved.
コンポーネント構成
Copyright (c) 2011 Ransui Iso, All rights reserved.
コンポーネントとデータの流れ
●
入力?演算?出力の繰り返し
– データを加工しながら次のプロセスに送る
Device
Driver
OS
Sound API
Capture PlaybackEffector Effector EffectorCapture
Copyright (c) 2011 Ransui Iso, All rights reserved.
Capture / Playback Server
●
OS / デバイスドライバとのやりとり
OS
Sound API
ALSA
Capture
UI
ZMQ
EndPoint
OS
Sound API
ALSA
Playback
UI
ZMQ
EndPoint
●
独立したプログラムとして動作
●
ネットワークを使って送受信
●
通信にはZeroMQを利用
Copyright (c) 2011 Ransui Iso, All rights reserved.
ZeroMQ
●
ネットワーク通信を簡単に
import?zmq
def?publisher():
context?=?zmq.Context()
zmq_socket?=?context.socket(zmq.PUB)
zmq_socket.bind(“tcp://localhost:9999”)
zmq_socket.send(“Hello?World”)
def?subscriber():
Context?=?zmq.Context()
zmq_socket?=?context.socket(zmq.SUB)
zmq_socket.setsockopt(zmq.SUBSCRIBE,?b””)
zmq_socket.connect(“tcp://localhost:9999”)
print(zmq_socket.recv())
import?zmq
def?publisher():
context?=?zmq.Context()
zmq_socket?=?context.socket(zmq.PUB)
zmq_socket.bind(“tcp://localhost:9999”)
zmq_socket.send(“Hello?World”)
def?subscriber():
Context?=?zmq.Context()
zmq_socket?=?context.socket(zmq.SUB)
zmq_socket.setsockopt(zmq.SUBSCRIBE,?b””)
zmq_socket.connect(“tcp://localhost:9999”)
print(zmq_socket.recv())
Copyright (c) 2011 Ransui Iso, All rights reserved.
エフェクト処理部分
●
QtのSIGNAL/SLOTを使う
Capture
Client
ZMQ
output
Effector
input
output
Effector
input
output
Playback
Client
ZMQ
input
Copyright (c) 2011 Ransui Iso, All rights reserved.
コードで見ると……
●
outputをinputにつなぐだけでOK
from?component?import?CaptureClient,?PlaybackClient
from?overdrive?import?Overdrive
from?chorus?import?Chorus
capture_client?=?CaptureClient()
playback_client?=?PlaybackClient()
overdrive?=?Overdrive()
chorus?=?Chorus()
captureClient.output.connect(overdrive.input)
overdrive.output.connect(chorus.input)
chorus.output.connect(playback_client.input)
from?component?import?CaptureClient,?PlaybackClient
from?overdrive?import?Overdrive
from?chorus?import?Chorus
capture_client?=?CaptureClient()
playback_client?=?PlaybackClient()
overdrive?=?Overdrive()
chorus?=?Chorus()
captureClient.output.connect(overdrive.input)
overdrive.output.connect(chorus.input)
chorus.output.connect(playback_client.input)
Copyright (c) 2011 Ransui Iso, All rights reserved.
Effects
Copyright (c) 2011 Ransui Iso, All rights reserved.
Overdrive
●
音に歪みを付加する
– 元々はアンプへの過大入力による「音割れ」
– クリッピングと増幅でもっと歪ませる
Copyright (c) 2011 Ransui Iso, All rights reserved.
StereoEnhancer
●
音に広がりを持たせる
– 左右チャネルで波形を反転
– どちらかのチャネルの位相をずらす
def?input(self,?channels_data):
????if?self.effect_on?is?True:
????????right?=?channels_data[1].tolist()
????????delayed_right?=?scipy.array(
????????????self.delay_queue?+?right[:self.depth])
????????self.delay_queue?=?right[self.depth:]
????????self.output.emit((channels_data[0],
??????????????????????????delayed_right?*??1))
????else:
????????self.output.emit(channels_data)
def?input(self,?channels_data):
????if?self.effect_on?is?True:
????????right?=?channels_data[1].tolist()
????????delayed_right?=?scipy.array(
????????????self.delay_queue?+?right[:self.depth])
????????self.delay_queue?=?right[self.depth:]
????????self.output.emit((channels_data[0],
??????????????????????????delayed_right?*??1))
????else:
????????self.output.emit(channels_data)
Copyright (c) 2011 Ransui Iso, All rights reserved.
Thank you for listening
Happy Hacking with Python!

More Related Content

What's hot (20)

PDF
Open3DでSLAM入門 PyCon Kyushu 2018
Satoshi Fujimoto
?
PDF
骋辞入门
Takuya Ueda
?
PPTX
[DL輪読会]Pyramid Stereo Matching Network
Deep Learning JP
?
PDF
One Class SVMを用いた異常値検知
Yuto Mori
?
PDF
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
Hiroharu Kato
?
PPTX
LLM は言葉の意味を理解しているのか?
Hide Koba
?
PDF
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~?
KLab Inc. / Tech
?
PDF
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
Deep Learning JP
?
PDF
惭滨搁鲍2013チュートリアル:厂滨贵罢とそれ以降のアプローチ
Hironobu Fujiyoshi
?
PPTX
摆顿尝轮読会闭骋蚕狈と関连研究,世界モデルとの関係について
Deep Learning JP
?
PDF
LiDAR-SLAM チュートリアル資料
Fujimoto Keisuke
?
PPTX
形状解析のための楕円フーリエ変换
Tsukasa Fukunaga
?
PDF
NLP2023 緊急パネル:ChatGPTで自然言語処理は終わるのか? 説明スライド
JunSuzuki21
?
PDF
Recurrent Neural Networks
Seiya Tokui
?
PPTX
マルチモーダル深层学习の研究动向
Koichiro Mori
?
PDF
痴颈蝉耻补濒厂贵惭と惭别蝉丑尝补产と颁濒辞耻诲颁辞尘辫补谤别によるドローン撮影画像を用いたデジタル地図作成
Hiroshi Yamaguchi
?
PPTX
JIRA / Confluence の 必須プラグインはこれだ
Narichika Kajihara
?
PDF
エキスハ?ート骋辞
Takuya Ueda
?
PDF
自然言语処理に基づく商品情报の整理および构造化
Rakuten Group, Inc.
?
PDF
奥颈苍诲辞飞蝉フォームで大丈夫か?一番良いのを頼む。
Yuya Yamaki
?
Open3DでSLAM入門 PyCon Kyushu 2018
Satoshi Fujimoto
?
骋辞入门
Takuya Ueda
?
[DL輪読会]Pyramid Stereo Matching Network
Deep Learning JP
?
One Class SVMを用いた異常値検知
Yuto Mori
?
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
Hiroharu Kato
?
LLM は言葉の意味を理解しているのか?
Hide Koba
?
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~?
KLab Inc. / Tech
?
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
Deep Learning JP
?
惭滨搁鲍2013チュートリアル:厂滨贵罢とそれ以降のアプローチ
Hironobu Fujiyoshi
?
摆顿尝轮読会闭骋蚕狈と関连研究,世界モデルとの関係について
Deep Learning JP
?
LiDAR-SLAM チュートリアル資料
Fujimoto Keisuke
?
形状解析のための楕円フーリエ変换
Tsukasa Fukunaga
?
NLP2023 緊急パネル:ChatGPTで自然言語処理は終わるのか? 説明スライド
JunSuzuki21
?
Recurrent Neural Networks
Seiya Tokui
?
マルチモーダル深层学习の研究动向
Koichiro Mori
?
痴颈蝉耻补濒厂贵惭と惭别蝉丑尝补产と颁濒辞耻诲颁辞尘辫补谤别によるドローン撮影画像を用いたデジタル地図作成
Hiroshi Yamaguchi
?
JIRA / Confluence の 必須プラグインはこれだ
Narichika Kajihara
?
エキスハ?ート骋辞
Takuya Ueda
?
自然言语処理に基づく商品情报の整理および构造化
Rakuten Group, Inc.
?
奥颈苍诲辞飞蝉フォームで大丈夫か?一番良いのを頼む。
Yuya Yamaki
?

More from Ransui Iso (15)

PPTX
「笔测迟丑辞苍でやってみた」~広がるプログラミングの愉しみ~
Ransui Iso
?
PDF
アドテクを支える人と技术
Ransui Iso
?
PDF
Playing with curses
Ransui Iso
?
PDF
小中学生贬补肠办-补-迟丑辞苍にオッサンが乗り込んだ话
Ransui Iso
?
PDF
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
?
PDF
ソフトシンセを作りながら学ぶ笔测迟丑辞苍プログラミング
Ransui Iso
?
PDF
Introduction of ToySynth
Ransui Iso
?
PDF
笔测蚕迟ではじめる骋鲍滨プログラミング
Ransui Iso
?
PDF
PySynth : A toy pure python software synthesizer.
Ransui Iso
?
PDF
Lisp Tutorial for Pythonista Day 6
Ransui Iso
?
PDF
Lisp Tutorial for Pythonista : Day 5
Ransui Iso
?
PDF
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
?
PDF
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
?
PDF
Lisp tutorial for Pythonista : Day 2
Ransui Iso
?
PDF
Lisp tutorial for Pythonista : Day 1
Ransui Iso
?
「笔测迟丑辞苍でやってみた」~広がるプログラミングの愉しみ~
Ransui Iso
?
アドテクを支える人と技术
Ransui Iso
?
Playing with curses
Ransui Iso
?
小中学生贬补肠办-补-迟丑辞苍にオッサンが乗り込んだ话
Ransui Iso
?
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
?
ソフトシンセを作りながら学ぶ笔测迟丑辞苍プログラミング
Ransui Iso
?
Introduction of ToySynth
Ransui Iso
?
笔测蚕迟ではじめる骋鲍滨プログラミング
Ransui Iso
?
PySynth : A toy pure python software synthesizer.
Ransui Iso
?
Lisp Tutorial for Pythonista Day 6
Ransui Iso
?
Lisp Tutorial for Pythonista : Day 5
Ransui Iso
?
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
?
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
?
Lisp tutorial for Pythonista : Day 2
Ransui Iso
?
Lisp tutorial for Pythonista : Day 1
Ransui Iso
?
Ad

笔测迟丑辞苍で作る俺様サウンドエフェクター

  • 1. Copyright (c) 2011 Ransui Iso, All rights reserved. Pytnonで作る 俺様Sound Effector 2015-10-10 Python Conference JP 2015 Ransui Iso
  • 2. Copyright (c) 2011 Ransui Iso, All rights reserved. おまえ誰よ? http://www.facebook.com/ransui @ransui Ransui Iso (磯 蘭水) Pythonは1998年から使っています。E-Commerceエンジンやサーチエンジンの開 発、Zopeを用いたWebサイト開発、ネット広告配信システムについての研究開発 などを経て、今はクラウドシステム関連のお仕事をしています。
  • 3. Copyright (c) 2011 Ransui Iso, All rights reserved. Demo Programのありか ● デモプログラムは以下のURLで入手できます http://alpa.homeip.net/files/PyConJP2015/pyconjp2015_soundeffector.tar.bz2
  • 4. Copyright (c) 2011 Ransui Iso, All rights reserved. 音って何だ?
  • 5. Copyright (c) 2011 Ransui Iso, All rights reserved. 音ってなんだ? ● 空気の密度の時間変化 – 粗密波として視覚化するのは面倒なので普通はグラフを使う
  • 6. Copyright (c) 2011 Ransui Iso, All rights reserved. 音の3要素 音量 周期 ● 音量 – 波の高さ ● 音高 – 波の周波数 ● 音色 – 波の形 この3つの要素をコントロールできればOK
  • 7. Copyright (c) 2011 Ransui Iso, All rights reserved. 音を出す装置 ● 信号を空気の粗密波に変換する Analog Source Amplifier Speaker DACDigital Source 微小電圧信号 電流信号 微小電圧信号 エンコードされた 数値信号
  • 8. Copyright (c) 2011 Ransui Iso, All rights reserved. 楽器とかの場合 ● 全部を通してアナログ信号の変換 Instrument Amplifier Speaker 微小電圧信号 電流信号 EffectorEffector Effector
  • 9. Copyright (c) 2011 Ransui Iso, All rights reserved. アンプとスピーカー ● 最終段は「電流」で制御する F(t) = q E(t, r(t)) + qv(t) × B(t, r(t)) 要するに、強い地場の中で大電流が流れれば より多くの力が発生するということ
  • 10. Copyright (c) 2011 Ransui Iso, All rights reserved. コンピュータと音
  • 11. Copyright (c) 2011 Ransui Iso, All rights reserved. デジタル化された音 ● サンプリング周波数 – 1秒あたりの分割数 ● 量子化 – 振幅方向の分割数 CD音質の場合 – サンプリング周波数 44100Hz – 量子化ビット数 16bit (65536段階)
  • 12. Copyright (c) 2011 Ransui Iso, All rights reserved. PCの場合 ● プログラムから信号を送り込むことができる Amplifier Output Terminal DAC Device Driver OS Sound API Application 1:送り込むデータの形式を設定 2:音声信号を数値データとして送り込む データは数値列なのでプログラムで 好き放題作成可能
  • 13. Copyright (c) 2011 Ransui Iso, All rights reserved. 音の入出力 ● APIに対してバイナリ列でやりとりする ● 16bit符号付き量子化?ステレオの時 – インタリーブ形式 – エンディアンに気をつける Left Channel 2bytes Right Channel 2bytes Left Channel 2bytes Right Channel 2bytes ??? これで1サンプル分
  • 14. Copyright (c) 2011 Ransui Iso, All rights reserved. コンポーネント構成
  • 15. Copyright (c) 2011 Ransui Iso, All rights reserved. コンポーネントとデータの流れ ● 入力?演算?出力の繰り返し – データを加工しながら次のプロセスに送る Device Driver OS Sound API Capture PlaybackEffector Effector EffectorCapture
  • 16. Copyright (c) 2011 Ransui Iso, All rights reserved. Capture / Playback Server ● OS / デバイスドライバとのやりとり OS Sound API ALSA Capture UI ZMQ EndPoint OS Sound API ALSA Playback UI ZMQ EndPoint ● 独立したプログラムとして動作 ● ネットワークを使って送受信 ● 通信にはZeroMQを利用
  • 17. Copyright (c) 2011 Ransui Iso, All rights reserved. ZeroMQ ● ネットワーク通信を簡単に import?zmq def?publisher(): context?=?zmq.Context() zmq_socket?=?context.socket(zmq.PUB) zmq_socket.bind(“tcp://localhost:9999”) zmq_socket.send(“Hello?World”) def?subscriber(): Context?=?zmq.Context() zmq_socket?=?context.socket(zmq.SUB) zmq_socket.setsockopt(zmq.SUBSCRIBE,?b””) zmq_socket.connect(“tcp://localhost:9999”) print(zmq_socket.recv()) import?zmq def?publisher(): context?=?zmq.Context() zmq_socket?=?context.socket(zmq.PUB) zmq_socket.bind(“tcp://localhost:9999”) zmq_socket.send(“Hello?World”) def?subscriber(): Context?=?zmq.Context() zmq_socket?=?context.socket(zmq.SUB) zmq_socket.setsockopt(zmq.SUBSCRIBE,?b””) zmq_socket.connect(“tcp://localhost:9999”) print(zmq_socket.recv())
  • 18. Copyright (c) 2011 Ransui Iso, All rights reserved. エフェクト処理部分 ● QtのSIGNAL/SLOTを使う Capture Client ZMQ output Effector input output Effector input output Playback Client ZMQ input
  • 19. Copyright (c) 2011 Ransui Iso, All rights reserved. コードで見ると…… ● outputをinputにつなぐだけでOK from?component?import?CaptureClient,?PlaybackClient from?overdrive?import?Overdrive from?chorus?import?Chorus capture_client?=?CaptureClient() playback_client?=?PlaybackClient() overdrive?=?Overdrive() chorus?=?Chorus() captureClient.output.connect(overdrive.input) overdrive.output.connect(chorus.input) chorus.output.connect(playback_client.input) from?component?import?CaptureClient,?PlaybackClient from?overdrive?import?Overdrive from?chorus?import?Chorus capture_client?=?CaptureClient() playback_client?=?PlaybackClient() overdrive?=?Overdrive() chorus?=?Chorus() captureClient.output.connect(overdrive.input) overdrive.output.connect(chorus.input) chorus.output.connect(playback_client.input)
  • 20. Copyright (c) 2011 Ransui Iso, All rights reserved. Effects
  • 21. Copyright (c) 2011 Ransui Iso, All rights reserved. Overdrive ● 音に歪みを付加する – 元々はアンプへの過大入力による「音割れ」 – クリッピングと増幅でもっと歪ませる
  • 22. Copyright (c) 2011 Ransui Iso, All rights reserved. StereoEnhancer ● 音に広がりを持たせる – 左右チャネルで波形を反転 – どちらかのチャネルの位相をずらす def?input(self,?channels_data): ????if?self.effect_on?is?True: ????????right?=?channels_data[1].tolist() ????????delayed_right?=?scipy.array( ????????????self.delay_queue?+?right[:self.depth]) ????????self.delay_queue?=?right[self.depth:] ????????self.output.emit((channels_data[0], ??????????????????????????delayed_right?*??1)) ????else: ????????self.output.emit(channels_data) def?input(self,?channels_data): ????if?self.effect_on?is?True: ????????right?=?channels_data[1].tolist() ????????delayed_right?=?scipy.array( ????????????self.delay_queue?+?right[:self.depth]) ????????self.delay_queue?=?right[self.depth:] ????????self.output.emit((channels_data[0], ??????????????????????????delayed_right?*??1)) ????else: ????????self.output.emit(channels_data)
  • 23. Copyright (c) 2011 Ransui Iso, All rights reserved. Thank you for listening Happy Hacking with Python!