Pythonを使用してオーディオ処理を行う・一般的な章(継続的な更新)

見られるように:
Pythonオーディオ処理
Pythonpydubオーディオ処理

1.一般的に使用されるツールとライブラリ

概要概要

wave これはPythonの標準モジュールです。Pythonでオーディオデータを処理するための2つの一般的なモジュールがあります。

  • librosa:オーディオ信号処理が得意で、numpyを使用してデータを内部に保存し、ファイルの読み取りと書き込みはサウンドファイルモジュールに依存します(mp3はサポートされていません)
  • pydub:基礎となるffmpeg読み取りおよび書き込みファイル、コードシンプル、カッティングサポート、フォーマット変換、ボリューム、ID3およびその他の一般的な機能、低しきい値に基づいています。ffmpeg非常に強力なオープンソースのビデオ処理ソフトウェアです)

使用法の提案:毎日の使用pydubで十分であり、より強力な信号処理にはlibrosaが必要ですが、特定の数学的しきい値があり、信号処理の原理を理解し、フーリエ変換などの基本的なアルゴリズムを習得する必要があります。

waveこれはPythonの標準モジュールであり、Pythonオーディオ処理:waveはいくつかの簡単な紹介とソースコードを記録しました

pydub

Pydubを使用すると、愚かではない方法でオーディオに何かを行うことができます

pydubオーディオファイルを処理できますが、Pydubはネイティブwav格式ファイル処理のみをサポートしています。したがって、オーディオを他の形式で処理する場合、またはオーディオをメディアファイルで処理する場合は、FFmpegサポートをローカルにインストールする必要があります

多くのシンプルで実用的なコードサンプルが公式ドキュメントに記録されています:APIドキュメント

pydubのAudioSegment()は変更不可能なオブジェクトであり、音量の増減、オーディオのマージ、オーディオの読み取り時間、オーディオの傍受などの操作オブジェクトが豊富に含まれています。複数のオーディオを処理する場合は、最初に、チャネル数、フレームレート、サンプルレート、ビット深度などが同じであることを確認してください。

以下は、すべての基本的な使用法の簡単な記録です。

  • AudioSegment(…).from_file()、オーディオを開き、AudioSegmentインスタンスを返します
  • AudioSegment(...)。export()、AudioSegmentをファイルに書き込みます。
  • AudioSegment.empty()は、空の(持続時間がゼロの)AudioSegmentを作成します。
  • AudioSegment.silent()、サイレントオーディオセグメントを作成します
  • 複数のシングルチャネルオーディオの融合であるAudioSegment.from_mono_audiosegments()は、フレームのタイミングが開始されるまで、各シングルチャネルオーディオの長さが同じである必要があることに注意してください。
  • AudioSegment(...)。dBFSは、dBFSで測定されたサウンドラウドネスを返します(可能な最大ラウドネスに対するdb)。
  • AudioSegment(…).rms、rmsによって測定されたラウドネスを返します
  • AudioSegment(…).channels
  • AudioSegment(…).sample_width
  • AudioSegment(…).frame_rate
  • AudioSegment(…).frame_width
  • AudioSegment(…).max、オーディオの最大振幅を返します
  • AudioSegment(…).max_dBFS、オーディオの最大振幅をdBFSで返します
  • AudioSegment(…).duration_seconds、オーディオの持続時間を返します。単位はミリ秒(ミリ秒)です。
  • AudioSegment(…).raw_data、元のオーディオを返します
  • AudioSegment(…).frame_count()は、フレーム数を返します
  • AudioSegment(…).append()、オーディオのマージ、たとえばcombined = sound1.append(sound2)、デフォルトのクロスフェード= 100ms
  • AudioSegment(...)。overlay()、オーディオでオーバーレイしますが、余分な部分は切り取られます。(調査予定)
  • AudioSegment(...)。apply_gain(gain)、振幅(通常はラウドネス)を変更します。ここで、Gainの単位はdBです。
  • より一般的な(より柔軟な)フェードメソッドであるAudioSegment(...)。fade()では、開始点と終了点、または開始点と期間などのパラメーターを設定できます。
  • AudioSegment(…).fade_out()、フェードアウト
  • AudioSegment(…).fade_in()、フェードイン
  • AudioSegment(…).reverse()、逆再生のコピーを生成します
  • AudioSegment(…).set_frame_rate()、指定されたフレームレートを設定します。単位はHzです。
  • AudioSegment(…).set_channels()
  • AudioSegment(…).split_to_mono()、チャンネルを分割
  • AudioSegment(…).apply_gain_stereo()、ステレオの左右のチャンネルにゲインを追加します(ゲイン)
  • AudioSegment(…).pan()、-1.0(左100%)や+1.0(右100%)などのパンパラメータを設定します
  • AudioSegment(...)。get_array_of_samples()は、元のオーディオデータを(数値の)サンプルの配列として返します
  • AudioSegment(...)。get_dc_offset()は、チャネルのDCオフセットを示す-1.0〜1.0の値を返します。
  • AudioSegment(...)。remove_dc_offset()、チャネルからDCオフセットを削除します
  • AudioSegment(...)。invert_phase()、このオーディオセグメントをコピーし、信号の位相を反転します。

追加されていないドキュメントがまだいくつかあります。

ここに画像の説明を挿入

他の人が要約したいくつかの使用法も、参考のために以下に記録されています。

# -*- 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()

ffmpeg

pyaudio(そしてこれ、最初に穴を掘る)

2.その他の一般的な処理の概要

参照:クリック

おすすめ

転載: blog.csdn.net/Robin_Pi/article/details/109607764