dentoo lt 4 - octave の旋律 -
DESCRIPTION
Dentoo LT #4 Octave の旋律 written by Tomohiro MinagawaTRANSCRIPT
Octave の 旋律 - Dentoo-LT #4 -
Tomohiro Minagawa
( @fusha_san )
2013/7/7 Octave の 旋律 1
DentooLT #4
>> あなたは誰 ?
2013/7/7 Octave の 旋律 2
Tomohiro Minagawa
twitter : @fusha_san
cluster : UEC / I / M2
研究 : 信号処理に関する何か 趣味 : パソコン,写真,クルマ,旅行, アニメ,ゲーム,音楽,黒猫氏[1] あといろいろ
[1] 伏見つかさ/かんざきひろ, “俺の妹がこんなに可愛いわけがない”,アスキー・メディアワークス, 2008-2013
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]. (裏紙にやるような概算とかがむっちゃ速い先生だった.)
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 までの周波数を記録可能
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
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
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 関数 余弦関数の曲線を使った 窓関数を生成する関数
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
+ =
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/
DentooLT #4
2013/7/7 Octave の 旋律 10
音楽のピッチを変更する
テンポを一定にしたまま音のピッチだけを変更する
spline関数で補完 spline関数で間引き
データを補完したり間引いたりする関数を用いて,音楽のピッチを変更する • サンプリング周波数一定にして再生すると...
補完 :サンプルが増えた分,周波数が低くなる 間引き:サンプルが減った分,周波数が高くなる
• しかし... 補完 : サンプルが増えた分,テンポが遅くなる 間引き:サンプルが減った分,テンポが速くなる
例)テープの倍速やスロー
DentooLT #4
2013/7/7 Octave の 旋律 11
音楽のピッチを変更する
テンポを一定にしたまま音のピッチだけを変更する
spline関数で補完 spline関数で間引き
テンポを維持する為に... 短い時間区間で音を切り出して,補完後さらに必要なサンプル分を切り出す 短い時間区間で音を切り出して,間引後さらに必要なサンプル分を繰り返す
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
DentooLT #4
>> 結局なにが言いたかったの ?
2013/7/7 Octave の 旋律 13
音楽は Octave で楽しめる!
つまり 楽しい!!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
• 今回は,Octave を用いた波形操作を紹介 • 時間領域の波形処理だけではなく,
周波数領域のスペクトル処理だって簡単に出来る! (イコライザとかが簡単に作れる)
結論: 楽しい!!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌ Octave Life !!
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