前回の記事は信号処理の実行方法について紹介しただけなので
今回はプログラムのコードの説明をしていきます。
Youtubeでの解説も行なっていますので、
見てみてください。
Volume Boost
def volumeBoost(sig, fs):
for i in range(len(sig)):
sig[i] = sig[i] * (1 + i/(fs/8))
return sig
これは音を線形的に大きくする処理。
sig[i] = sig[i] * (1 + i/(fs/8)) のi/(fs/8)をいじることで
線形の傾きの角度をいじることが出来ます。
syntesis
def synthesis(sigList):
maxLength = 0
tmpLength = 0
for i in sigList:
if len(i) > tmpLength:
maxLength = len(i)
tmpLength = len(i)
sig = np.zeros(maxLength)
sig = sigList[0] + sigList[1] + sigList[2]
return sig
まず入力sigListには複数の音声ファイルが入っています。
音声を合成する際、短い音声と長い音声を合成したとすると、
短い音声 + 長い音声をするとデータのはみ出た部分がでる
ため、エラーをくらいます。
ですので、長い音声に合わせるため for 文を使って一番長い音声
を見つけ出します。
そして、sig = np.zeros(maxLength)
で0埋めされた配列を作ります。
あとはそれに、好きな音声ファイルを足しこむだけです。
fastForward
def fastForward(sig):
sigFast = []
for i in range(0, len(sig), 2):
sigFast.append(sig[i] / 100)
return sigFast
sigで音声ファイルを一つ入力します。
そして、for 文で一つ飛ばしでデータを取っていきます。
配列の番号0,2,4,6,8,...でデータを取ることで
早送りを行います。