当前位置 博文首页 > 使用Python实现音频双通道分离

    使用Python实现音频双通道分离

    作者:何雨龙 时间:2021-02-19 18:35

    某些音频是双方对话,有可能需要对音频作通道的分离。

    示例代码如下:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    音频双通道分离
    """
    import sys
    import numpy as np
    from scipy.io import wavfile
    from converter import mp3_to_wav
    
    
    def split_channel(wav_path, left_wav_path, right_wav_path):
     """
     通道分离
     :param wav_path: wav音频的路径
     :param left_wav_path: 左声道的wav音频路径
     :param right_wav_path: 右声道的wav音频路径
     :return None:
     """
     try:
      sample_rate, wav_data = wavfile.read(wav_path)
      left = []
      right = []
      for item in wav_data:
       left.append(item[0])
       right.append(item[1])
      wavfile.write(left_wav_path, sample_rate, np.array(left))
      wavfile.write(right_wav_path, sample_rate, np.array(right))
     except IOError as e:
      print('error is %s' % str(e))
     except:
      print('other error', sys.exc_info())
    
    
    if __name__ == '__main__':
     mp3_to_wav('input/test.mp3', 'tmp/tmp.wav')
     split_channel('tmp/tmp.wav', 'output/left.wav', 'output/right.wav')

    其中调用了一个自定义的库,converter.py 加入了代码:

    from pydub import AudioSegment
    
    
    def mp3_to_wav(source, destin):
     """
     mp3 转 wav
     :param source:
     :param destin:
     :return None:
     """
     data = AudioSegment.from_mp3(source)
     data.export(destin, format='wav')

    本代码示例可以生成两个通道分离后的 wav 文件。

    注意:如果源文件的格式是 wav 文件,可以省掉转换格式的过程。

    js
    下一篇:没有了