精华内容
下载资源
问答
  • Librosa音频处理(二)
    千次阅读
    2019-05-17 13:55:49

    对音频信号的处理可以通过 librosa.ifgram 方法获取 stft 短时傅立叶变换的矩阵,对该矩阵进行修改搬移,再进行 istft 逆转换获得处理后的音频信号。

    y, sr = librosa.load(path)
    frequencies, D = librosa.ifgram(y, sr=sr)
    '''
         中间对D进行处理就行了
    '''
    y = librosa.istft(D)
    

    D为stft变换的矩阵,x 轴为时间序列,y轴为频率序列坐标对应frequencies,值为幅度。

    由于D类型为numpy.ndarray,所以我们很方便就可以通过numpy库对矩阵处理。

     

     

    1. 回音
      D = np.repeat(D, 2, axis=1)
    2. 间断
      D[:,::2] = 0

       

    3. 音色
      D = np.roll(D, 50, axis=0)
    4. 压缩频率
      def _pool(D, poolsize):
          x = D.shape[1] // poolsize
          restsize = D.shape[1] % poolsize
          if restsize > 0:
              x += 1
              rightlist = np.zeros([ D.shape[0], poolsize-restsize])
              D = np.c_[D, rightlist]
          D = D.reshape( (-1, poolsize) )
          D = D.sum(axis=1).reshape(-1,x)
          return D
      
      def rewardshape(D, shape):
          x = shape[0] - D.shape[0]
          y = shape[1] - D.shape[1]
          if x > 0:
              bottomlist = np.zeros([x, D.shape[1]])
              D = np.r_[D, bottomlist]
          if y > 0:
              rightlist = np.zeros([ D.shape[0], y])
              D = np.c_[D, rightlist]
          return D
      
      def pool(D, size=(3,3), shapeed=False):
          _shape = D.shape
          if size[1] > 1:
              D = _pool(D, size[1])
          if size[0] > 1:
              D = _pool(D.T, size[0]).T
          if shapeed:
              D = rewardshape(D, _shape)
          return D

       

     

    更多相关内容
  • 注意:librosa只能读取wav格式音频文件 代码如下 import numpy as np import librosa # 1.加载音频文件 audio_path1 = './audio1.wav' y1, sr1 = librosa.load(audio_path1) dur1 = librosa.get_duration(y1, sr=...

    注意:librosa只能读取wav格式音频文件

    代码如下

    import numpy as np
    import librosa
    
    # 1.加载音频文件
    audio_path1 = './audio1.wav'
    y1, sr1 = librosa.load(audio_path1)
    dur1 = librosa.get_duration(y1, sr=sr1)
    print('数据x类型和采样率sr类型', type(y1), type(sr1))
    print('数据x尺寸和采样率', y1.shape, sr1)
    print('该音频的时长为:', dur1)
    
    audio_path2 = './audio2.wav'
    y2, sr2 = librosa.load(audio_path2)
    dur2 = librosa.get_duration(y2, sr=sr2)
    print('数据x类型和采样率sr类型', type(y2), type(sr2))
    print('数据x尺寸和采样率', y2.shape, sr2)
    print('该音频的时长为:', dur2)
    
    # 2.音频拼接
    audio_dst = np.hstack((y1, y2))
    print('数据x尺寸和采样率', audio_dst.shape)
    librosa.output.write_wav('./拼接.wav', audio_dst, sr2)
    
    # 3.音频截取
    start = 12
    duration = 20
    stop = start +duration
    audio_dst = y2[start*sr2:stop*sr2]
    librosa.output.write_wav('./截取-2.wav', audio_dst, sr2)
    
    # 4.音频叠加
    num_min = min(len(y1), len(y2))
    num_max = max(len(y1), len(y2))
    audio_dst = np.zeros(num_max)
    for i in range(num_max):
        if i<num_min:
            audio_dst[i] = y1[i] + y2[i]
        else:
            if len(y1)>=len(y2):
                audio_dst[i] = y1[i]
            else:
                audio_dst[i] = y2[i]
    librosa.output.write_wav('./叠加.wav', audio_dst, sr2)
    
    # 5.生成静音音频
    num = 3*sr2
    audio_dst = np.zeros(num)
    librosa.output.write_wav('./静音.wav', audio_dst, sr2)
    
    # 6.调整音频音量
    librosa.output.write_wav('./调整音量.wav', y2*0.1, sr2)
    
    

    结果展示

    在这里插入图片描述

    展开全文
  • librosa wavio thikdsp-github soundfile 需要注意不同库读取音频得到的data类型是不同的,有的是array有的是list,元素也不同有的是整数,有的是浮点数,也即是归一化了的。 norm:boolean [scalar] enable ...

    目前我接触到的处理音频的python库有:
    wave-标准库
    scipy.io.wavfile
    librosa
    wavio
    thikdsp-github
    soundfile
    需要注意不同库读取音频得到的data类型是不同的,有的是array有的是list,元素也不同有的是整数,有的是浮点数,也即是归一化了的。

    norm:boolean [scalar]
    enable amplitude normalization. For floating point y, scale the data to the range [-1, +1].

    本此实验还是采用librosa
    为啥呢?
    1.以array形式读取和存入的数值——用numpy处理数据
    2.读取和存入都会自动归一化处理——保证音量一致了
    3.其它的一些读出竖排的数据或者list我试了试没这个方便

    src_root = 'D:\workspace\Jupyter\speech\wavfiles'
    
    classes = os.listdir(src_root)
    
    for _cls in sorted(classes):
        for fn in sorted(os.listdir(os.path.join(src_root, _cls))):
            f = wave.open(os.path.join(src_root, _cls, fn))
            SampleRate = f.getframerate()
            frames = f.getnframes()
            # Duration 也就是音频时长 = 采样点数/采样率 
            Duration = wav_time = frames / float(SampleRate)  # 单位为s
            wav,sr = librosa.load(os.path.join(src_root, _cls, fn),sr=16000)  #所有都需要librosa处理归一
            if Duration<=2.0:
                n = 32000-wav.shape[0]#需要补齐的0
                ndarray=np.pad(wav,(0,n),'constant', constant_values=(0,0.0000000e+00)) 
                librosa.output.write_wav(os.path.join('D:\workspace\Jupyter\speech\clean', _cls, fn), ndarray, 16000)
            elif Duration>2.0:
                ndarray=wav[:32000]#从尾部截掉
                print(os.path.join(src_root, _cls, fn))
                librosa.output.write_wav(os.path.join('D:\workspace\Jupyter\speech\clean', _cls, fn), ndarray, 16000)
            else:
            	continue
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 向量x ∈ R N x\in R^Nx∈RN表示时间区间上的音频信号,x i x_ixi​表示t = h i t=h_it=hi​时的声压x i = α p ( h i ) , i = 1 , . . . , N x_i=\alpha p(h_i),i=1,...,Nxi​=αp(hi​),i=1,...,N 每个x i x_ixi...

    声音的向量表示

    原理

    1. 向量x ∈ R N x\in R^Nx∈RN表示时间区间上的音频信号,x i x_ixi​表示t = h i t=h_it=hi​时的声压x i = α p ( h i ) , i = 1 , . . . , N x_i=\alpha p(h_i),i=1,...,Nxi​=αp(hi​),i=1,...,N
    2. 每个x i x_ixi​称为样本
    3. h(>0)为采样时间
    4. 1/h为采样率,典型的采样率为1 / h = 44100 / s e c 1/h=44100/sec1/h=44100/sec或48000 / s e c 48000/sec48000/sec
    5. α \alphaα被称为比率因子

    使用python的librosa库可以读取音频信号,并用matplotlib显示波形

    y,sr = librosa.load("MUSIC STEM.wav",sr=None)	#y为长度等于采样率sr*时间的音频向量
    plt.figure()
    librosa.display.waveplot(y, sr)	#创建波形图
    plt.show()	#显示波形图
    
    • 1
    • 2
    • 3
    • 4

    结果

    在这里插入图片描述

    分析

    音频信号每一位分别对应一个采样点,其位数等于“采样率*音频时长(以秒为单位)”,记录了每个样本上音频的振幅信息

    缩放音频信号

    原理

    音频的响度由音频信号每个样本的数值绝对值大小决定,因此对音频信号作代数乘法运算,可以增减音频的响度

    numpy数组提供的代数乘法功能可以用于增减音频响度,并利用librosa库将音频向量写回文件

    y=2*y	#增加一倍振幅
    y=0.5*y	#减小振幅为原来一半
    y=-y	#翻转振幅
    y=10*y	#大幅增加振幅
    librosa.output.write_wav(dir,y,sr)	#将音频向量写回文件
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果

    四种操作结果的波形分别如图所示

    在这里插入图片描述

    1. y=2*y时,得到的音频响度略大于原音频
    2. y=0.5*y时,得到的音频响度略小于原音频
    3. y=-y时,得到的音频响度与原音频一致
    4. y=10*y时,得到的音频响度远大于原来音频

    分析

    1. 音频信号每个样本的数值反应了振动离开平衡点的距离,即振幅,振幅越大,声音具有的能量越大,声音听起来响度就越大
    2. 对样本数值进行倍增,若倍增系数绝对值大于1则声音响度增加,若倍增系数绝对值小于1则声音响度下降
    3. 由于振动离开平衡点的距离是一个绝对值,因此倍增系数为负数时效果与倍增系数是其相反数时一致

    线性组合和混音

    原理

    1. 对多个音频信号进行线性运算y = a 1 x 1 + a 2 x 2 + . . . + a k x k y=a_1x_1+a_2x_2+...+a_kx_ky=a1​x1​+a2​x2​+...+ak​xk​可以实现混音

    2. 此时每个音频信号x k x_kxk​称为音轨

    3. 混合后的结果y称为混合

    4. 每个系数a k a_kak​是音轨在混合中的权重

    numpy数组提供的线性运算功能可以用于实现混音

    再尝试人声与伴奏的混合,取一段人声轨和一段伴奏轨,分别赋予权重(0.25,0.75)、(0.5,0.5)、(0.4,0.6)进行线性混合

    y=0.25*x1+0.75*x2
    y=0.5*x1+0.5*x2
    y=0.6*x1+0.4*x2
    
    • 1
    • 2
    • 3

    结果

    波形图如下所示:
    在这里插入图片描述

    得到的音频为在伴奏上加上人声的效果

    分析

    1. 音频是线性相加,得到的波形图中无法直观分出人声和伴奏,但由于人声和伴奏中各频率谐波分量与伴奏中不同,线性相加在频域被分配到了各频率谐波上,所以可以在频谱图上清晰区分出来

    2. 为了得到足够清晰的混音音频,需要不断更改每个混音音轨的权重以得到最适合的混合模式

    拓展

    虽然人声和伴奏中谐波分量基本不同,但相同频率上的相加也容易导致撞频的发生,使得混合的人声和伴奏难以区分,因此对于双声道音频,我们常常采用偏置的方法,为两个声道中人声和伴奏设不同的权重(通常一个声道人声大,一个声道伴奏声大)

    形状为(2,n)的numpy数组可以用于容纳双声道音频信号。两个声道分别取权重(0.4,0.6)、(0.6,0.4)进行混合,波形如下:
    在这里插入图片描述

    乐音

    1. 对于声音信号p(t),若满足p ( t + T ) ≈ p ( t ) p(t+T)\approx p(t)p(t+T)≈p(t),其中周期T取值在0.0005秒到0.01秒之间,则p被视为乐音
    2. 周期长短(决定频率并)决定音高
    3. 每个周期内波形的特点决定了音色
    4. 乐音的能量决定了响度,即声压

    音高

    原理

    1. f = 440 H z f=440Hzf=440Hz是中央A
    2. 一个八度在频率上翻了一倍
    3. 十二平均律中,每个半音在频率上翻了2 1 / 12 2^{1/12}21/12倍
    4. 每个半音的距离就是黑白键上两个键之间的距离,从do到升do,各白键之间的差音为全全半全全全半,而每个全音中的半音被分到了黑键上
    5. 任意两个音之间的距离称为音程,音程的单位是,相同单音之间音程为1度,之后每差一个音级增加1度

    实验步骤:

    1. 设置基频f为440Hz,用numpy以440Hz生成正弦函数
    2. 每隔1/44100s设置一个采样点,每间隔1s生成1s的440Hz正弦波
    3. 在这基础上,第n次生成时再生成1s频率为440 ⋅ 2 ( n − 1 ) / 12 H z 440·2^{(n-1)/12}Hz440⋅2(n−1)/12Hz的正弦波,与原正弦波线性相加进行和弦,从而模拟小二度到纯八度的所有音程
    x=np.empty((0,))	#生成空数组
    for i in range(0,13):
        x1=np.linspace(0,1, num=44100, endpoint=True, dtype=float)	#生成采样点
        x1=5*np.sin(2*np.pi*440*np.power(2,i/12)*x1)+5*np.sin(2*np.pi*440*x1)	#生成波形与和弦
        x2=np.zeros((44100,))	#留空部分
        x=np.concatenate((x,x1,x2),axis=0)	#连接数组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果

    生成的26s音频中有13段不同音程的和弦,有的和弦听起来和谐,有的和弦听起来不和谐

    分析

    1. 小二度音程(相差一个半音)、大七度音程(相差五个全音一个半音)是极不协和音程
    2. 大二度音程(相差一个全音)、小七度音程(相差五个全音)、三全音(三个全音)是不协和音程
    3. 小三度音程(相差一个全音一个半音)、大三度音程(相差两个全音)、小六度音程(相差四个全音)、大六度音程(相差四个全音一个半音)是不完全协和音程
    4. 纯四度音程(相差两个全音一个半音)、纯五度音程(相差三个全音一个半音)是完全协和音程
    5. 纯八度音程(相差六个全音)是极完全协和音程

    音色

    1. 对于周期性信号p ( t ) = ∑ k = 1 K ( a k c o s ( 2 π f k t ) + b k s i n ( 2 π f k t ) ) p(t)=\displaystyle \sum_{k=1}^K (a_kcos(2\pi fkt)+b_ksin(2\pi fkt))p(t)=k=1∑K​(ak​cos(2πfkt)+bk​sin(2πfkt)),每个分解信号为谐波泛音

    2. f为频率

    3. a与b为谐波系数

    4. 在K足够大时,任意周期性信号都可以通过积分变换为这种形式

    5. 谐波振幅的配比决定了音色,对于每个频率由k决定的谐波,其谐波振幅为c k = a k 2 + b k 2 c_k=\sqrt{a_k^2+b_k^2}ck​=ak2​+bk2​​,因此谐波振幅可以组成一个长度为k的向量c = ( 0.3 , 0.4 , . . . ) c=(0.3,0.4,...)c=(0.3,0.4,...),足够多的谐波以不同振幅数值混合可以组成不同音色

    在220-11000Hz之间分别生成1、5、10、20、50个频段的正弦、余弦信号,随机生成谐波系数

    结果

    五种情况下混合波形图如下所示:

    在这里插入图片描述
    得到一段每隔1s播放1s不同音色音频的音频文件

    分析

    1. 使用不同足够多的谐波以不同谐波系数混合可以组成不同音色音频
    2. 现实中已知乐器也可以利用频谱分析提取音色特征,供计算机再现
    3. 利用谐波原理可以制作各种各样的电子合成器,供作曲家使用
    展开全文
  • librosa 音频分析

    2021-04-28 11:26:35
    该篇博文是对librosa能量_librosa语音信号处理重新编辑 读取音频 读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。 y, sr = librosa.load...# offset:float,在此时间之后开始阅读(以
  • librosa音频处理教程

    2022-05-05 21:43:27
    librosa音频处理教程
  • librosa 音频处理库

    千次阅读 2018-11-09 10:36:32
    1. 名词解释 名称 含义 sr(sample_rate) 采样率,表示一秒采样多少个样本点 hop_length 步幅;...librosa.amplitude_to_db(melspec)#计算log mel 谱 参考:文献 github doc librosa paper 博客 librosa 音频处理库 - 简书
  • 采样之后,生成音频时间序列 y,其中 len(y) = T * sr = 2 × 24000 = 48000,y.shape = (48000, ),sr=24000。 import librosa # 读取音频 y, sr = librosa.load(path='path.wav', sr=24000) print(len(y), y....
  • import librosa import wave import contextlib import eyed3 def get_duration_mp3(file_path): """ 获取mp3音频文件时长 :param file_path: :return: """ mp3Info = eyed3.load(file_path) return mp3...
  • 文章目录[librosa学习(一 ~八)点此处](https://blog.csdn.net/qq_44250700/article/details/119685358)九、写音频(1)soundfile.write(2)缩放音频subplot绘图代码:(3)线性组合和混音(4)变速(更改采样率)...
  • librosa处理音频信号

    万次阅读 多人点赞 2019-12-14 19:59:15
    这会将音频时间序列作为numpy数组返回,默认采样率(sr)为22KHZ mono。我们可以通过以下方式更改此行为: librosa . load ( audio_path , sr = 44100 ) 以44.1KHz重新采样,或禁用重新采样。采样率是每秒...
  • 英文文档地址:...一、Audio processing1.1 librosa.core.load加载音频,audioread这种方式能加载的音频格式,我一般都把音频处理成wav格式然后通过该函数加载。参数为:path:音频路径 sr:音频频率(...
  • 时间:2017-05-06 11:20:47前言本文主要记录librosa工具包的使用,librosa音频、乐音信号的分析中经常用到,是python的一个工具包,这里主要记录它的相关内容以及安装步骤,用的是python3.5以及win8.1环境。...
  • 使用Librosa音频处理库和openSMILE工具包,进行简单的声学特征提取,包括韵律学特征(持续时间、短时能量、过零率、基频等)、基于谱的相关特征(MFCC特征)和声音质量特征(共振峰、频率微扰、振幅微扰)。如果您觉得有.....
  • 【NLP】音频特征工程(librosa库)(1)

    千次阅读 2020-09-20 19:06:40
    librosa库提取音频特征
  • 文章目录librosa安装分析步骤读取音频提取特征Log-Mel SpectrogramMFCC绘制波形图和梅尔频谱图 librosa Librosa是一个用于音频、音乐分析、处理的python工具包,一些常见的时频处理、特征提取、绘制声音图形等功能...
  • librosa语音信号处理

    2021-09-24 10:28:53
    时域1.1 读取音频1.2 重采样1.3 读取时长1.4 读取采样率1.5 写音频1.6过零率1.7 波形图2. 频域2.1 短时傅里叶变换2.2 幅值和相位2.3 短时傅里叶逆变换2.4 幅值转dB2.5功率转dB2.6 绘制频谱图2.7 Mel滤波器组2.8 计算...
  • 向量x∈RNx\in R^Nx∈RN表示时间区间上的音频信号,xix_ixi​表示t=hit=h_it=hi​时的声压xi=αp(hi),i=1,...,Nx_i=\alpha p(h_i),i=1,...,Nxi​=αp(hi​),i=1,...,N 每个xix_ixi​称为样本 h(>0)为采样时间 1...
  • 做的项目需要提一些音频特征,而librosa这个库非常给力,这里写一些介绍。Youtube上有一个介绍的视频,台上这位大佬非常帅呀,想想他也是librosa team member,我会更喜欢librosa的。下面根据文档简单的介绍下...
  • librosa | 系统实战(一 ~ 四)

    千次阅读 2021-08-13 22:51:16
    librosa是python中用于提取音乐特征的库 一、安装 参考 https://blog.csdn.net/qq_39516859/article/details/80333431 二、
  • 音频处理库—librosa的安装与使用

    千次阅读 2019-03-04 16:48:11
    目录 序言 一、libsora安装 pypi conda source 二、librosa常用功能 核心音频处理函数 音频处理 频谱表示 幅度转换 时频转换 特征提取 绘图显示 ...读取音频 ...Librosa是一个用于音频...
  • python的 librosa包操作音频

    千次阅读 2020-01-09 17:09:47
    import librosa import librosa.display import matplotlib.pyplot as plt import numpy as np filepath = 'MWdVM0VuQU9NTDQ...# y音频时间序列 sr:音频的采样率 y, sr = librosa.load(filepath, sr=Non...
  • 音频分析工具librosa

    2020-09-01 11:58:27
    librosa.feature.mfcc 主要学习利用该库提取mfcct特征,望各位批评指正。 MFCCs (Mel-frequency cepstral coefficients):梅尔倒谱系数 librosa.feature.mfcc(y...y: 语音时间序列。np.ndarray [shape=(n,)] or None sr:
  • 前言 本文主要记录librosa工具包的使用,librosa音频、乐音信号的分析中经常用到,是python的一个工具包,这里主要记录它的相关内容以及安装步骤,用的是python3.5以及win10环境。一、MIR简介音乐信息检索(Music...
  • <p>RuntimeError: stack expects each tensor to be equal size, but got [3751, 128] at entry 0 and [2979, 128] at entry 3 <p><img alt="" height="379" src=... ...
  • 音频文件的写入

    千次阅读 2020-04-15 08:00:04
    音频文件读取与存储的话,目前有librosa,scipy.io.wavfile,soundfile,essentia其中前两者是一样的程序,sf的读取与写入只能是wav/ogg/flac的,最后一个库win安装失败,这个问题我给官方提过,服务器没有问题,我似乎...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 758
精华内容 303
关键字:

librosa音频时间