SlideShare ist ein Scribd-Unternehmen logo
1 von 23
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!

Weitere ähnliche Inhalte

Was ist angesagt?

PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...Tatsuya Watanabe
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境yuichi_komatsu
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springTakuya Ueda
 
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMPRTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMPMasashi Shibata
 
Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기SangWoo Kim
 
RFC 〜 ネットワーク勉強会
RFC 〜 ネットワーク勉強会RFC 〜 ネットワーク勉強会
RFC 〜 ネットワーク勉強会Ken SASAKI
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門Hiroshi Tokumaru
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
Gunosyにおけるパーソナライズシステム
GunosyにおけるパーソナライズシステムGunosyにおけるパーソナライズシステム
GunosyにおけるパーソナライズシステムShunsuke Kozawa
 
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링BOAZ Bigdata
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいYuji Oshima
 
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Panda Yamaki
 
IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話YasunobuToyota
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Panda Yamaki
 
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtc
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtcYJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtc
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtcYahoo!デベロッパーネットワーク
 
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석BOAZ Bigdata
 
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~NTT DATA OSS Professional Services
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)Euijin Jeong
 

Was ist angesagt? (20)

PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
 
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMPRTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
 
Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기Apache Zeppelin으로 데이터 분석하기
Apache Zeppelin으로 데이터 분석하기
 
RFC 〜 ネットワーク勉強会
RFC 〜 ネットワーク勉強会RFC 〜 ネットワーク勉強会
RFC 〜 ネットワーク勉強会
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
Gunosyにおけるパーソナライズシステム
GunosyにおけるパーソナライズシステムGunosyにおけるパーソナライズシステム
Gunosyにおけるパーソナライズシステム
 
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링
제 16회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [하둡메이트 팀] : 하둡 설정 고도화 및 맵리듀스 모니터링
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したい
 
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
 
IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
 
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtc
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtcYJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtc
YJTC19 B-5 Kubernetesで実現したYahoo! JAPANの次世代開発環境 ~ 100以上のクラスタを少人数で運用する秘訣 ~ #yjtc
 
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석
제 18회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [투니버스] : 스파크 기반 네이버 웹툰 댓글 수집 및 분석
 
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Implementing SSH in Java
Implementing SSH in JavaImplementing SSH in Java
Implementing SSH in Java
 
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
 

Ähnlich wie Pythonで作る俺様サウンドエフェクター

2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」aitc_jp
 
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)株式会社MonotaRO Tech Team
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynoteHaruo Sato
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。tak9029
 
Pepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみたPepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみたForex Robotics Co., Ltd.
 
html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」robotstart
 
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座Shinichiro Yoshida
 
Dutch PHP Conference 2009 report
Dutch PHP Conference 2009 reportDutch PHP Conference 2009 report
Dutch PHP Conference 2009 reportYusuke Ando
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Atsuo Ishimoto
 
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用Daiyu Hatakeyama
 
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~NTT DATA OSS Professional Services
 
システム開発体験プログラム
システム開発体験プログラムシステム開発体験プログラム
システム開発体験プログラムHajime Ookoshi
 
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化Yutaka Kato
 

Ähnlich wie Pythonで作る俺様サウンドエフェクター (20)

2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
2015年5月期 AITCオープンラボ 「第二回 デジタルガジェット祭り!」
 
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
Pythonエンジニアの最適なキャリアを考える (PyCon JP 2016 ジョブフェア LT)
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynote
 
PepperとWatson音声関連API
PepperとWatson音声関連APIPepperとWatson音声関連API
PepperとWatson音声関連API
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
ETロボコンのすすめ
ETロボコンのすすめETロボコンのすすめ
ETロボコンのすすめ
 
Pepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみたPepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみた
 
html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」html5jロボット部 第3回勉強会「ロボット × ビジネス」
html5jロボット部 第3回勉強会「ロボット × ビジネス」
 
RPAって何、どんなことできるの
RPAって何、どんなことできるのRPAって何、どんなことできるの
RPAって何、どんなことできるの
 
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座TV会議をオープンソースで実現!RED5によるストリーミング配信講座
TV会議をオープンソースで実現!RED5によるストリーミング配信講座
 
業務の自動化をはじめよう!!
業務の自動化をはじめよう!!業務の自動化をはじめよう!!
業務の自動化をはじめよう!!
 
Dutch PHP Conference 2009 report
Dutch PHP Conference 2009 reportDutch PHP Conference 2009 report
Dutch PHP Conference 2009 report
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29
 
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
 
Ipythonを使ってみよう
Ipythonを使ってみようIpythonを使ってみよう
Ipythonを使ってみよう
 
使ってみようPTSV
使ってみようPTSV使ってみようPTSV
使ってみようPTSV
 
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
 
システム開発体験プログラム
システム開発体験プログラムシステム開発体験プログラム
システム開発体験プログラム
 
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
 
アフレコ企画書
アフレコ企画書 アフレコ企画書
アフレコ企画書
 

Mehr von Ransui Iso

「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~Ransui Iso
 
アドテクを支える人と技術
アドテクを支える人と技術アドテクを支える人と技術
アドテクを支える人と技術Ransui Iso
 
Playing with curses
Playing with cursesPlaying with curses
Playing with cursesRansui Iso
 
小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話Ransui Iso
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングRansui Iso
 
Introduction of ToySynth
Introduction of ToySynthIntroduction of ToySynth
Introduction of ToySynthRansui Iso
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.Ransui Iso
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Ransui Iso
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 

Mehr von Ransui Iso (15)

「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~
 
アドテクを支える人と技術
アドテクを支える人と技術アドテクを支える人と技術
アドテクを支える人と技術
 
Playing with curses
Playing with cursesPlaying with curses
Playing with curses
 
小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 
Introduction of ToySynth
Introduction of ToySynthIntroduction of ToySynth
Introduction of ToySynth
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 

Pythonで作る俺様サウンドエフェクター

  • 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!