dentoo lt 4 - octave の旋律 -

14
Octave 旋律 - Dentoo-LT #4 - Tomohiro Minagawa ( @fusha_san ) 2013/7/7 Octave 旋律 1

Upload: fushasan

Post on 25-Jun-2015

855 views

Category:

Education


0 download

DESCRIPTION

Dentoo LT #4 Octave の旋律 written by Tomohiro Minagawa

TRANSCRIPT

Page 1: Dentoo lt 4 - octave の旋律 -

Octave の 旋律 - Dentoo-LT #4 -

Tomohiro Minagawa

( @fusha_san )

2013/7/7 Octave の 旋律 1

Page 2: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> あなたは誰 ?

2013/7/7 Octave の 旋律 2

Tomohiro Minagawa

twitter : @fusha_san

cluster : UEC / I / M2

研究 : 信号処理に関する何か 趣味 : パソコン,写真,クルマ,旅行, アニメ,ゲーム,音楽,黒猫氏[1] あといろいろ

[1] 伏見つかさ/かんざきひろ, “俺の妹がこんなに可愛いわけがない”,アスキー・メディアワークス, 2008-2013

Page 3: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> Octave 知ってる ?

2013/7/7 Octave の 旋律 3

Octave とは,MATLABと互換性をもった フリーな数値解析ソフトウェア[2]

[2] wikipedia-GNU Octave , http://ja.wikipedia.org/wiki/GNU_Octave , 2013-07-07 [注 1] 発表者の偏見

• GNU GPL で公開されている • クロスプラットフォーム • 対話的な処理 • MATLABのコードがだいたいそれっぽく使える • ほぼ全ての理系学生のパソコンにインストールされている[注1]

Octave な特徴

Octave な由来 (蛇足)

開発者の指導教官の名前[2]. (裏紙にやるような概算とかがむっちゃ速い先生だった.)

Page 4: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> なにするの ?

2013/7/7 Octave の 旋律 4

Octave 使って,音楽ファイルをいじくりたい!

• Octave にはwavファイルの入出力関数がある[3]. → つまり音楽ファイルを数値列データとして扱うことが出来る → つまり 楽しい!!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

$ octave > [data,fs] = wavread(‘in_filename.wav’); > wavwrite(data,fs,’out_filename.wav’);

[3] Audio Processing – GNU Octave - , http://www.gnu.org/software/octave/doc/interpreter/Audio-Processing.html, 2013-07-07

data : 時系列データ(ベクトルデータ) fs : サンプリング周波数 (値データ) wavread : ファイル入力関数 wavwrite : ファイル出力関数

注意) • 基本的にOctave では,

データを行列とベクトルで表現 • サンプリング周波数(fs)とは,

1秒間に記録しているデータの個数 • ディジタル信号は,

fs/2 Hz までの周波数を記録可能

Page 5: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 5

入力されたデータの構造

モノラル

data 1

1 0.035126

2 0.039307

3 0.042084

4 0.042999

5 0.042633

⋮ ⋮

44100 0.0028381

ステレオ

data 1 2

1 0.035126 0.045126

2 0.039307 0.049307

3 0.042084 0.052084

4 0.042999 0.052999

5 0.042633 0.052633

⋮ ⋮ ⋮

44100 0.0028381 0.0128381

モノラルwavファイル サンプリング周波数:44100 Hz 長さ :1.0 s > data(3,1) ans = 0.042084

ステレオwavファイル サンプリング周波数:44100 Hz 長さ :1.0 s > data(3,2) ans = 0.052084

Page 6: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> どんなことできるの ?

2013/7/7 Octave の 旋律 6

音の切り出し程度なら余裕

> [data,fs]=wavread('./infile.wav'); > size(data) ans = 25853 1 > tmp = data(1001:1441,1); > size(tmp) ans = 441 1 > plot(tmp);

注意) • plot 関数

ベクトルデータをplotする関数

[4] ATR_PF00_050_000 – SRV-DB - , http://www.it.ice.uec.ac.jp/SRV-DB/archive/ATR25_PF00/ATR_PF00_050_000.wav, 2013-07-07

Page 7: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 7

フェードインアウトしてみる

> tmp = data(1001:1441); > w = hann(128); > w_in = w(1:64); > w_out = w(65:128); > w=vertcat(w_in,ones(441-128,1)... ,w_out); > size(w) ans = 441 1 > fade = tmp .* w;

×

=

注意) • vertcat 関数

行列データを垂直に結合する関数 • ones 関数

与えられたサイズの行列を 全て1を埋めた状態で返す関数

• hann 関数 余弦関数の曲線を使った 窓関数を生成する関数

Page 8: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 8

音をつなぎ合わせる(クロスフェード[5])

> w = hann(256); > w_in = w(1:128); > w_out = w(129:256); > w_f = vertcat(ones(256,1),... w_out,zeros(128,1)); > tmp_f = data(2001:2512) .* w_f; > w_b = vertcat(zeros(256,1),... w_in,ones(128,1)); > tmp_b = ... (-1) * data(2001:2512) .* w_b; > out = tmp_f + tmp_b;

[5]クロスフェード再生とは 【crossfading play】 - IT用語辞典 e-Words , http://e-words.jp/w/E382AFE383ADE382B9E38395E382A7E383BCE38389E5868DE7949F.html , 2013-07-07

+ =

Page 9: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> もっとおもしろい話題ないの ?

2013/7/7 Octave の 旋律 9

カラオケ音源を作る

ステレオ音源の場合... ボーカルは中央に定位される場合が多い つまり,左右で違う音だけを抜き出せば ボーカルを消せる?

> [data,fs] = wavread(‘./stereo.wav’); > bgm =data-circshift(data,[0,1]);

circshift 関数 与えられた行列を指定サイズ分 回転シフトさせる関数

on vo off vo

"Skyline Mix" by Lasswell http://ccmixter.org/files/lazztunes07/15428 is licensed under a Creative Commons license: http://creativecommons.org/licenses/by-

nc/3.0/

Page 10: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 10

音楽のピッチを変更する

テンポを一定にしたまま音のピッチだけを変更する

spline関数で補完 spline関数で間引き

データを補完したり間引いたりする関数を用いて,音楽のピッチを変更する • サンプリング周波数一定にして再生すると...

補完 :サンプルが増えた分,周波数が低くなる 間引き:サンプルが減った分,周波数が高くなる

• しかし... 補完 : サンプルが増えた分,テンポが遅くなる 間引き:サンプルが減った分,テンポが速くなる

例)テープの倍速やスロー

Page 11: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 11

音楽のピッチを変更する

テンポを一定にしたまま音のピッチだけを変更する

spline関数で補完 spline関数で間引き

テンポを維持する為に... 短い時間区間で音を切り出して,補完後さらに必要なサンプル分を切り出す 短い時間区間で音を切り出して,間引後さらに必要なサンプル分を繰り返す

Page 12: Dentoo lt 4 - octave の旋律 -

DentooLT #4

2013/7/7 Octave の 旋律 12

音楽のピッチを変更する

テンポを一定にしたまま音のピッチだけを変更する

spline関数で補完 spline関数で間引き

normal low "Skyline Mix" by Lasswell http://ccmixter.org/files/lazztunes07/15428 is licensed under a Creative Commons license: http://creativecommons.org/licenses/by-

nc/3.0/

high

Page 13: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> 結局なにが言いたかったの ?

2013/7/7 Octave の 旋律 13

音楽は Octave で楽しめる!

つまり 楽しい!!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

• 今回は,Octave を用いた波形操作を紹介 • 時間領域の波形処理だけではなく,

周波数領域のスペクトル処理だって簡単に出来る! (イコライザとかが簡単に作れる)

結論: 楽しい!!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌ Octave Life !!

Page 14: Dentoo lt 4 - octave の旋律 -

DentooLT #4

>> ご清聴ありがとうございました

2013/7/7 Octave の 旋律 14

参考文献 [1] 伏見つかさ/かんざきひろ, “俺の妹がこんなに可愛いわけがない”,アスキー・メディアワークス, 2008-2013 [2] wikipedia-GNU Octave , http://ja.wikipedia.org/wiki/GNU_Octave , 2013-07-07 [3] Audio Processing – GNU Octave - , http://www.gnu.org/software/octave/doc/interpreter/Audio-Processing.html, 2013-07-07 [4] ATR_PF00_050_000 – SRV-DB - , http://www.it.ice.uec.ac.jp/SRV-DB/archive/ATR25_PF00/ATR_PF00_050_000.wav, 2013-07-07 [5]クロスフェード再生とは 【crossfading play】 - IT用語辞典 e-Words , http://e-words.jp/w/E382AFE383ADE382B9E38395E382A7E383BCE38389E5868DE7949F.html , 2013-07-07 [6] GNU Octave , http://www.gnu.org/software/octave/, 2013-07-07 [7] wikipedia-窓関数 , http://ja.wikipedia.org/wiki/窓関数 , 2013-07-07 注釈 [注 1] 発表者の偏見 利用音源 "Skyline Mix" by Lasswell http://ccmixter.org/files/lazztunes07/15428 is licensed under a Creative Commons license: http://creativecommons.org/licenses/by-nc/3.0/

本日利用したGnu Octaveスクリプト(カラオケ音源生成,ピッチ変換)や関数は, githubにコミットしています.

https://github.com/fusha62/dentooLT-4