欢迎访问宙启技术站
智能推送

使用Python编写的6个音频处理函数

发布时间:2023-06-30 20:48:54

1. 音频剪切函数:

import wave

def audio_cut(input_audio, start_time, end_time, output_audio):
    """
    将音频从指定的开始时间剪切到结束时间之间的部分,并保存为新的音频文件
    :param input_audio: 输入音频文件名
    :param start_time: 开始剪切的时间(单位:秒)
    :param end_time: 结束剪切的时间(单位:秒)
    :param output_audio: 输出音频文件名
    """
    with wave.open(input_audio, 'rb') as wf:
        parameters = wf.getparams()
        frames = wf.readframes(parameters.nframes)
    
    start_frame = int(start_time * parameters.framerate)
    end_frame = int(end_time * parameters.framerate)
    
    cut_frames = frames[start_frame:end_frame]
    
    with wave.open(output_audio, 'wb') as wf:
        wf.setparams(parameters)
        wf.writeframes(cut_frames)

2. 音频合并函数:

import wave

def audio_merge(input_audio_list, output_audio):
    """
    将多个音频文件合并为一个音频文件
    :param input_audio_list: 输入音频文件列表
    :param output_audio: 输出音频文件名
    """
    output_frames = bytearray()
    
    for audio_file in input_audio_list:
        with wave.open(audio_file, 'rb') as wf:
            output_frames += wf.readframes(wf.getnframes())
    
    with wave.open(output_audio, 'wb') as wf:
        parameters = wf.getparams()
        wf.setparams(parameters)
        wf.writeframes(output_frames)

3. 音频转换函数(比特率、采样率等):

import wave

def audio_convert(input_audio, output_audio, new_parameters):
    """
    将音频文件转换为指定的参数配置,并保存为新的音频文件
    :param input_audio: 输入音频文件名
    :param output_audio: 输出音频文件名
    :param new_parameters: 新的参数配置
    """
    with wave.open(input_audio, 'rb') as wf:
        frames = wf.readframes(wf.getnframes())
    
    with wave.open(output_audio, 'wb') as wf:
        wf.setparams(new_parameters)
        wf.writeframes(frames)

4. 音频降噪函数:

import noisereduce as nr
import soundfile as sf

def audio_noise_reduce(input_audio, output_audio, noise_profile, sr):
    """
    使用给定的噪声剖面去除音频中的噪声,保存为新的音频文件
    :param input_audio: 输入音频文件名
    :param output_audio: 输出音频文件名
    :param noise_profile: 噪声剖面文件名
    :param sr: 采样率
    """
    audio, _ = sf.read(input_audio)
    noise, _ = sf.read(noise_profile)
    
    reduced_audio = nr.reduce_noise(y=audio, sr=sr, noise_profile=noise)
    
    sf.write(output_audio, reduced_audio, sr)

5. 音频增益函数:

import numpy as np

def audio_gain(input_audio, output_audio, gain):
    """
    调整音频的增益,并保存为新的音频文件
    :param input_audio: 输入音频文件名
    :param output_audio: 输出音频文件名
    :param gain: 增益(单位:dB)
    """
    audio, sr = sf.read(input_audio)
    
    adjusted_audio = audio * (10 ** (gain / 20))
    
    sf.write(output_audio, adjusted_audio, sr)

6. 音频频域分析函数:

import numpy as np
import matplotlib.pyplot as plt

def audio_spectrum(input_audio, plot=True):
    """
    计算音频的频域分析,并可选择是否进行可视化绘制
    :param input_audio: 输入音频文件名
    :param plot: 是否进行可视化绘制
    :return: 频域分析结果
    """
    audio, sr = sf.read(input_audio)
    audio_fft = np.fft.fft(audio)
    audio_magnitude = np.abs(audio_fft)
    audio_freq = np.fft.fftfreq(len(audio), d=1/sr)
    
    if plot:
        plt.plot(audio_freq, audio_magnitude)
        plt.xlabel('Frequency (Hz)')
        plt.ylabel('Magnitude')
        plt.title('Audio Spectrum Analysis')
        plt.show()
    
    return audio_freq, audio_magnitude

以上是使用Python编写的6个音频处理函数,可以进行音频剪切、音频合并、音频转换、音频降噪、音频增益以及音频频域分析等操作。