人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

ステレオ→モノラル変換【Pythonで音声信号処理】

f:id:hiro-htm877:20190614212321j:plain



 

f:id:hiro-htm877:20190601202549p:plain

Python・音声信号処理初心者】 

 「ステレオ音声をモノラル音声に変換したい、仕組みを知りたい!」

「プログラミングで出来るならやってみたい!」

 

 

そんな方の疑問に答えます

 

コードが知りたい方は目次のソースコードへ飛んでください!

本記事のテーマ

【完全初心者向け】ステレオ音声をモノラル音声に変換!

 

ステレオ音声とは、 

 

ー 左右2チャンネルの音声である。データとしてはL,R,L,R,L,・・・となっている。

※Lチャネル(イヤホンでは左耳)、Rチャネル(イヤホンでは右耳)

f:id:hiro-htm877:20190614220429j:plain

ステレオ→モノラル変換!

アルゴリズム

ステレオ→モノラル変換プログラム作成

1. ステレオ音声のデータを一つ飛ばしで格納していく

ステレオ→モノラル変換プログラム実装!

1.  for i in range(0,len(sig), 2):

 ←音声の長さを一つ飛ばしでループする

2. monoral.append(sig[i])

 ←値を配列に格納 

code
def stereo2monoral(sig):
    monoral = []
    for i in range(0,len(sig), 2):
        monoral.append(sig[i])
    return np.array(monoral)
出力 

モノラル音声ファイルの生成!

完成です!

ステレオ→モノラル変換プログラムを実装しました。

 

ステレオをモノラルにしただけですが自分で変換したと思うと楽しくないですか?

自分で思いついたことはどんどん実行していきましょう!

プログラミングを覚えるコツです。

 

 

main文を含むソースコードは以下に示します。 

加えて、音声ファイルのopenやsaveの関数を書いた共通ソースコードは以下の記事に書いておりますので、実行ディレクトリ(ファイル名:sorce)の一つ上にフォルダ(ファイル名:common)を作成し、その中において下さい。

f:id:hiro-htm877:20190615130219p:plain

f:id:hiro-htm877:20190615130241p:plain

 

www.hiro877.com

 

ソースコード

import sys
sys.path.append('../common')  # 親ディレクトリのファイルをインポートするための設定
#sys.path.append('..')
import os
import glob
from sound import *
import numpy as np
from pylab import *
import matplotlib.pyplot as plt

if __name__ == "__main__" :
    argvs = sys.argv
    curDirPath = os.path.dirname(os.path.abspath(__file__))
    wavDataPath = parentpath(__file__,1) + "/wav"
    wavPathList = glob.glob(wavDataPath + "/*.wav")
    print (curDirPath)
    print (wavDataPath)
    print(wavPathList)

    filedata = openFile(wavPathList[0])
    sig = filedata[0]
    fs = filedata[1]
    L = filedata[2]

    for wavPath in wavPathList:
        filedata = openFile(wavPath)
        sig = filedata[0]
        fs = filedata[1]
        L = filedata[2]

        sig = stereo2monoral(sig);
        filename_monoral = wavPath.split("/")[-1].split(".")[0]
        print(filename_monoral)
        saveFile(sig, fs, 16, filename_monoral, 1)