possible_yes 2022-04-21 00:27 采纳率: 0%
浏览 383

请问有关于多人声分离的方法吗?python或者matlab

感觉很多代码讲解的都是分离背景音乐和人声,但是如果一段音频是几个人在讲话,如何把每个人说的话分离出来呢?

  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2022-04-21 08:39
    关注

    试试独立成分分析(Independent Component Analysis,ICA)。不过,这并不容易实现,因为很多时候我们只有录音,并不知道房间里有几个人在讲话,因此独立成分分析又被称为盲源分离问题。如果预先知道有几个人讲话,这个问题就容易得多。以下内容摘自拙作《Python高手修炼之道》,仅供参考。

    假设房间里有两位演讲者在讲话,他们发出的声音分别是 s1 和 s2,有两台录音设备记录了他们混合在一起的声音,得到的记录是 x1 和 x2。下面的代码用正弦波和三角波表示两位演讲者的声音 s1 和 s2,用两个合成信号 x1 和 x2 表示两台录音设备的记录数据,再使用Scikit-learn 的成分分析子模块 decomposition 提供的 FastICA 类来实现独立成分分析。

    # -*- encoding: utf-8 -*-
    
    """
    8.7.4 独立成分分析(ICA)
    """
    
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.decomposition import FastICA
    
    plt.rcParams['font.sans-serif'] = ['FangSong']
    plt.rcParams['axes.unicode_minus'] = False
    
    # 用正弦波和三角波表示两位演讲者的声音s_1和s_2,两个合成信号x_1和x_2表示两台录音设备的记录数据
    
    _x = np.linspace(0, 8*np.pi, 1000)
    k1 = np.where(np.int_(0.5*_x/np.pi)%2==0, 1, -1)/np.pi
    k2 = np.where(np.int_(_x/np.pi)%2==0, 1, 0)
    k3 = np.where(np.int_(_x/np.pi)%2==0, 0, 1)
    
    s1 = np.sin(_x) # 第1位演讲者的声音
    s2 = _x%(np.pi)*k1*k2 + (np.pi-_x%(np.pi))*k1*k3 # 第2位演讲者的声音
    x1 = 0.4*s1 + 0.5*s2 # 录音1
    x2 = 1.2*s1 - 0.3*s2 # 录音2
    
    plt.subplot(121)
    plt.plot(_x, s1, label='s1')
    plt.plot(_x, s2, label='s2')
    plt.legend()
    plt.subplot(122)
    plt.plot(_x, x1, label='x1')
    plt.plot(_x, x2, label='x2')
    plt.legend()
    plt.show()
    
    # 从合成信号x_1和x_2中分离出s_1和s_2这样的独立音源
    
    X = np.stack((x1,x2), axis=1) # 将两个信号合并成矩阵
    
    fica = FastICA(n_components=2) # 快速独立成分分析类实例化
    fica.fit(X)
    
    X_ica = fica.transform(X) # 独立成分分析结果
    print(X_ica.shape) # (1000, 2)
    
    plt.plot(_x, X_ica[:,0], label='独立成分1')
    plt.plot(_x, X_ica[:,1], label='独立成分2')
    plt.legend()
    plt.show()
    

    结果如下图所示。

    img

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 4月21日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了