Utilice Python para realizar el procesamiento de audio · Capítulo general (actualización continua)

Para ser visto:
procesamiento de audio de
Python Procesamiento de audio de Python pydub

1. Herramientas y bibliotecas de uso común

Visión de conjunto

wave Es un módulo estándar de Python. Hay dos módulos comunes para procesar datos de audio en Python:

  • librosa: Bueno en el procesamiento de señales de audio, usando numpy para almacenar datos internamente, la lectura y escritura de archivos depende del módulo de archivos de sonido (no se admite mp3)
  • pydub: Basado en los ffmpegarchivos de lectura y escritura subyacentes , código simple, soporte de corte, conversión de formato, volumen, ID3 y otras funciones comunes, umbral bajo. ( ffmpegEs un software de procesamiento de video de código abierto extremadamente poderoso)

Sugerencia de uso: el uso diario de pydub es suficiente, el procesamiento de señales más potente requiere librosa, pero hay un cierto umbral matemático, es necesario comprender el principio del procesamiento de señales y dominar algoritmos básicos como la transformada de Fourier.

ola

waveEs un módulo estándar de Python , procesamiento de audio de Python: wave grabó una breve introducción y código fuente

pydub

Pydub te permite hacer cosas con el audio de una manera que no es estúpida

pydubNos permite procesar archivos de audio, pero Pydub solo admite wav格式el procesamiento de archivos nativos . Entonces, si desea procesar audio en otros formatos, o desea procesar audio en archivos multimedia, debe instalar el FFmpegsoporte localmente .

Muchos ejemplos de código simples y prácticos están registrados en su documentación oficial: Documentación API

pydubAudioSegment () en es un objeto inmutable, que contiene una gran cantidad de objetos de operación, como aumento y disminución de volumen, fusión de audio, duración de la lectura de audio, intercepción de audio y otras operaciones. Tenga en cuenta que cuando procese audio múltiple, primero asegúrese de que tengan el mismo número de canales, frecuencia de cuadros, frecuencia de muestreo, profundidad de bits, etc.

El siguiente es un registro simple de todo el uso básico:

  • AudioSegment (…) .from_file (), abre el audio y devuelve una instancia de AudioSegment
  • AudioSegment (...). Export (), escribe AudioSegment en un archivo.
  • AudioSegment.empty (), crea un AudioSegment vacío (duración cero).
  • AudioSegment.silent (), crea un segmento de audio silencioso
  • AudioSegment.from_mono_audiosegments (), fusión de múltiples audio de un solo canal, tenga en cuenta que cada audio de un solo canal debe tener la misma longitud hasta que comience la sincronización del cuadro.
  • AudioSegment (...). DBFS, devuelve la sonoridad del sonido medida en dBFS (db en relación con la sonoridad máxima posible).
  • AudioSegment (…) .rms, devuelve el volumen medido por rms
  • AudioSegment (…) .channels
  • AudioSegment (…) .sample_width
  • AudioSegment (…) .frame_rate
  • AudioSegment (…) .frame_width
  • AudioSegment (…) .max, devuelve la amplitud máxima en audio
  • AudioSegment (…) .max_dBFS, devuelve la amplitud máxima en el audio en dBFS
  • AudioSegment (…) .duration_seconds, devuelve la duración del audio, la unidad es ms (milisegundos)
  • AudioSegment (…) .raw_data, devuelve el audio original
  • AudioSegment (…) .frame_count (), devuelve el número de fotogramas
  • AudioSegment (…) .append (), fusiona audio, por ejemplo combined = sound1.append(sound2), el crossfade predeterminado = 100ms
  • AudioSegment (...). Overlay (), superpóngalo con un audio, pero la parte extra se cortará. (Para ser estudiado)
  • AudioSegment (...). Apply_gain (ganancia), cambia la amplitud (generalmente, volumen), donde la unidad de ganancia es dB.
  • AudioSegment (...). Fade (), un método de desvanecimiento más general (más flexible), puede establecer parámetros, como los puntos de inicio y finalización o el inicio y la duración.
  • AudioSegment (…) .fade_out (), desvanecimiento
  • AudioSegment (…) .fade_in (), fundido en
  • AudioSegment (…) .reverse (), para generar una copia de la reproducción inversa
  • AudioSegment (…) .set_frame_rate (), establece la velocidad de fotogramas especificada, la unidad es Hz
  • AudioSegment (…) .set_channels ()
  • AudioSegment (…) .split_to_mono (), divide el canal
  • AudioSegment (…) .apply_gain_stereo (), agrega ganancia a los canales izquierdo y derecho del estéreo (ganancia)
  • AudioSegment (…) .pan (), configure el parámetro de panorámica, como -1.0 (100% a la izquierda) y +1.0 (100% a la derecha)
  • AudioSegment (...). Get_array_of_samples (), devuelve los datos de audio originales como una matriz de muestras (numéricas)
  • AudioSegment (...). Get_dc_offset (), devuelve un valor entre -1,0 y 1,0, lo que indica el desplazamiento de CC del canal.
  • AudioSegment (...). Remove_dc_offset (), elimina el desplazamiento de CC del canal
  • AudioSegment (...). Invert_phase (), copia este segmento de audio e invierte la fase de la señal.

Todavía hay algunos documentos que no se han agregado:

Inserte la descripción de la imagen aquí

Algunos usos resumidos por otros también se registran a continuación como referencia.

# -*- coding: utf-8 -*-
# @Author  : FELIX
# @Date    : 2018/5/18 15:13

from pydub import AudioSegment

sound=AudioSegment.from_file("aaa.mp3","mp3")
sound2=AudioSegment.from_file('bbb.mp3','mp3')
# 把一个多声道音频分解成两个单声道
# index[0]为左声道
# index[1]为右声道
# sounds=sound.split_to_mono()
# print(sounds)


# 将两个单声道合并成多声道
# stereo_sound = AudioSegment.from_mono_audiosegments(sounds[0], sounds[1])



# # 取得音频的分贝数
# loudness = sound.dBFS
# print(loudness)
# # 获取音频音量大小,该值通常用来计算分贝数(dB= 20×lgX)
# loudness = sound.rms
# print(loudness)
# # 取得音频的声道数
# channel_count = sound.channels
# print(channel_count)
# # 取得音频文件采样宽度
# bytes_per_sample = sound.sample_width
# print(bytes_per_sample)
#
# # 取得音频文件采样频率
# frames_per_second = sound.frame_rate
# print(frames_per_second)
# #取得音频文件帧宽度
# bytes_per_frame = sound.frame_width
# print(bytes_per_frame)
#
# #取得音频中的最大振幅
# normalized_sound = sound.apply_gain(-sound.max_dBFS)
# print(normalized_sound)
# #取得音频的持续时间,同 len()
# print(sound.duration_seconds)
# print((len(sound) / 1000.0))
# #取得音频数据
# raw_audio_data = sound.raw_data
# # print(raw_audio_data)
# #取得音频的frame数量
# number_of_frames_in_sound = sound.frame_count()
# number_of_frames_in_200ms_of_sound = sound.frame_count(ms=200)
# print(number_of_frames_in_sound)
# print(number_of_frames_in_200ms_of_sound)

# 拼接sound1与sound2,返回一个新的AudioSegment实例
# cossfade:交叉渐变间隔 ms
# no_crossfade1 = sound.append(sound2, crossfade=5000)
# print(no_crossfade1)
# no_crossfade1.export(r'cc.wav',format='wav') # 输出

# 把sound2覆盖在sound1上,两个音频文件会叠加,如果sound2较长,则会被截断。
# 参数:
# position:覆盖起始位置(毫秒)
# loop:是否循环覆盖(true/false)
# times:重复覆盖次数(默认1)
# gain_during_overlay:调整被覆盖音频的音量(eg,-6.0)
# played_togther = sound.overlay(sound2)
# # sound2_starts_after_delay = sound.overlay(sound2, position=5000)
# # volume_of_sound1_reduced_during_overlay = sound.overlay(sound2, gain_during_overlay=-8)
# # sound2_repeats_until_sound1_ends = sound.overlay(sound2, loop=True)
# # sound2_plays_twice = sound.overlay(sound2, times=2)
# played_togther.export(r'dd.wav',format='wav') # 输出



#调整音量大小
# louder_via_method = sound.apply_gain(+3.5) # 提高
# quieter_via_method = sound.apply_gain(-5.7) # 减小


#淡出
# 参数:
# to_gain:淡出结束时音频音量下降到的分贝数
# from_gain:设置淡出前的所有音频分贝数
# start:淡出的起始位置
# end:淡出的结束位置
# duration:淡出持续时间
# fade_in_the_hard_way = sound.fade(from_gain=-120.0, start=0, duration=5000)
# fade_out_the_hard_way = sound.fade(to_gain=-120.0, end=0, duration=5000)

# 反向输出
# sound.reverse().export(r'ee.wav',format='wav') # 输出

# 调整多声道音频的左右声道音量
# 如果单声道音频调用此方法,它将先被转换为多声道
# stereo_balance_adjusted = sound.apply_gain_stereo(-6, +2)
#
# #左右声道平衡,按百分比增大一边,减小另一边
# # pan the sound 15% to the right
# panned_right = sound.pan(+0.15)
# # pan the sound 50% to the left
# panned_left = sound.pan(-0.50)
#
#
# # 基于DSP的渲染
# # 产生一个反向信号的副本,来消除反相位波,或者降低噪音
# sound.invert_phase()

librosa

ffmpeg

pyaudio (y esto, cava un hoyo primero)

2. Otro resumen de procesamiento común

Referencia: Haga clic en

Supongo que te gusta

Origin blog.csdn.net/Robin_Pi/article/details/109607764
Recomendado
Clasificación