不同性格的声音特征提取

某些人工智能工程需要对不同人性格的声音进行分类,基于不同目的,可以将不同特征值的权值进行调整

一,声音的特征值

  • 语音质量变化: 不同性格可能导致说话模式、节奏或语音质量的变化。通过分析语音的自然度、流畅度和韵律等特征,可以尝试捕捉这些变化。

  • 情感表达: 不同性格可能影响个体的情感表达方式。通过语音中的情感成分,如语调、音调和情感强度,可能能够检测到情感的变化。

  • 说话速度和节奏:不同性格可能导致说话速度的显着变化,包括过快或过慢的说话。节奏的改变也可能是一个指示因素。

  • 声调变化: 变化的声调模式可能与不同性格相关。这包括语音的高低、变化的音高以及意义强调的方式。

  • 语音的情感内容: 分析语音中的词汇和情感内容,可能有助于了解个体的情绪状态和心理健康状况。

  • 频谱特征: 提取频谱特征,如MFCCs(梅尔频率倒谱系数)和梅尔频谱图,可以提供关于语音内容的信息,包括说话者的声音特征和语音动力学的变化。

  • 语音的稳定性: 通过分析语音信号的变异程度,可以尝试检测是否存在不正常的波动。

  • 言语障碍: 特别注意一些言语障碍的迹象,例如语音结构的混乱、说话的不连贯等。

二,不同库的特征提取 

Python中,可以使用不同的库和工具来提取声音特征,例如LibrosapyAudioAnalysis、scipy

1.Librosa

 Librosa 是一个用于音频和音乐分析的库,提供了许多有用的工具,包括提取梅尔频率倒谱系数(MFCCs)、梅尔频谱图等特征。可以使用以下方式安装 Librosa:

pip install librosa

然后可以使用 Librosa 来提取 MFCCs:

import librosa 
import librosa.display 
import matplotlib.pyplot as plt # 读取音频文件 
audio_path = 'path/to/audio/file.wav' 
y, sr = librosa.load(audio_path) # 提取MFCCs 
mfccs = librosa.feature.mfcc(y=y, sr=sr) # 可视化MFCCs 
librosa.display.specshow(mfccs, x_axis='time') 
plt.colorbar() 
plt.show()

2.pyAudioAnalysis

 pyAudioAnalysis 是一个用于音频分析的库,提供了许多工具,包括音频分类、特征提取等。可以使用以下方式安装 pyAudioAnalysis:

pip install pyAudioAnalysis

然后可以使用 pyAudioAnalysis 提取一系列特征:

from pyAudioAnalysis import audioFeatureExtraction

# 读取音频文件
audio_path = 'path/to/audio/file.wav'

# 提取特征
features, _, _ = audioFeatureExtraction.file_feature_extraction(audio_path)

3.scipy

scipy 库中的信号处理模块也提供了一些用于声音分析的工具。可以使用以下方式安装 scipy:

pip install scipy

然后可以使用 scipy 提取一些基本的特征,如过零率:

from scipy.stats import skew
from scipy.io import wavfile

# 读取音频文件
audio_path = 'path/to/audio/file.wav'
rate, data = wavfile.read(audio_path)

# 提取过零率
zero_crossings = skew(data)

三,代码演示

使用 Python 的 librosa 库来分析音频文件的特征,代码主要实现了以下功能:

  1. 读取音频文件,并提取 MFCCs 特征进行可视化展示。
  2. 提取时域特征,计算说话速度。
  3. 提取音调特征(基本频率 F0)。
  4. 提取音量特征(能量)。
  5. 估算语速特征(音节率)。
  6. 提取稳定性特征,包括短时能量、短时过零率和频谱质心。
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

# 读取音频文件
audio_path = './person/1.wav'
y, sr = librosa.load(audio_path)

# 提取MFCCs
mfccs = librosa.feature.mfcc(y=y, sr=sr)

# 可视化MFCCs
librosa.display.specshow(mfccs, x_axis='time')
plt.colorbar()
plt.title('MFCCs')
plt.show()

# 提取时域特征,比如说话速度
speech_rate = len(y) / sr
print(f"Speech rate: {speech_rate} seconds")

# 提取音调特征 - 基本频率 (F0)
f0, harmonic = librosa.core.piptrack(y=y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'))

# 取最大能量的频率作为基本频率
f0 = np.max(f0, axis=0)

# 提取音量特征 - 能量
energy = np.sum(np.abs(y) ** 2)

# 估算语速特征 - 音节率
onset_env = librosa.onset.onset_strength(y=y, sr=sr)
tempo, _ = librosa.beat.beat_track(onset_envelope=onset_env, sr=sr)
syllable_rate = tempo / 60.0  # Convert tempo to syllable rate (beats per second)

# 提取稳定性特征
# 1. 短时能量
energy_stability = np.std(librosa.feature.rms(y=y))

# 2. 短时过零率
zero_crossings_stability = np.std(librosa.feature.zero_crossing_rate(y))

# 3. 频谱质心
centroid_stability = np.std(librosa.feature.spectral_centroid(y=y, sr=sr))

# 打印提取的特征值
print(f"Fundamental Frequency (F0): {np.mean(f0)} Hz")
print(f"Energy: {energy}")
print(f"Syllable Rate: {syllable_rate} syllables/second")
print(f"Energy Stability: {energy_stability}")
print(f"Zero Crossings Stability: {zero_crossings_stability}")
print(f"Centroid Stability: {centroid_stability}")

四,结果展示 

1.MFCCs(梅尔频率倒谱系数)

  • X 轴表示时间,Y 轴表示 MFCC 系数的索引。
  • 不同颜色的区域表示不同的 MFCC 系数。
  • 这个图表提供了声音信号在不同频率下的能量分布,可以帮助分析语音的声学特征。具体而言,观察每个MFCC在时间上的变化,你可以看到声音在频域上的分布如何随时间而变化。

 

2.其他数据打印

  1. 基本频率(Fundamental Frequency,F0)的平均值:以赫兹(Hz)为单位。
  2. 音频信号的能量。
  3. 估算的语速特征,即每秒钟的音节数。
  4. 短时能量的稳定性特征。
  5. 短时过零率的稳定性特征。
  6. 频谱质心的稳定性特征。

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值