将批量wav文件转换成语谱图并保存
时间: 2023-06-02 22:06:02 浏览: 296
你可以使用Python中的Librosa库将批量的wav文件转换成语谱图并保存。以下是一个可能的示例代码:
```
import librosa
import os
# 定义输入输出文件夹路径
input_dir = "/path/to/input/folder"
output_dir = "/path/to/output/folder"
# 遍历输入文件夹下的所有wav文件
for filename in os.listdir(input_dir):
if filename.endswith(".wav"):
# 读取wav文件
wav_path = os.path.join(input_dir, filename)
y, sr = librosa.load(wav_path, sr=None)
# 获取语谱图
spect = librosa.stft(y)
# 将语谱图保存为jpg图片
output_path = os.path.join(output_dir, f"{filename}.jpg")
librosa.display.specshow(librosa.amplitude_to_db(spect, ref=np.max))
plt.savefig(output_path)
```
完成转换后,批量转换的语谱图将保存在指定的输出文件夹中。
相关问题
批量提取不同文件夹下的wav格式语音数据的梅尔语谱图并保存到相应文件夹中的python代码
可以使用Python中的Librosa库来实现批量提取不同文件夹下的wav格式语音数据的梅尔语谱图并保存到相应文件夹中。以下是实现代码:
```python
import os
import librosa
import numpy as np
# 设置输入和输出文件夹路径
in_folder_path = 'input_folder'
out_folder_path = 'output_folder'
# 定义函数来提取梅尔语谱图并保存到输出文件夹中
def extract_mel_spectrogram(in_file_path, out_folder_path):
# 加载音频文件
y, sr = librosa.load(in_file_path, sr=None)
# 计算梅尔频谱
mel_spectrogram = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
# 转换为对数刻度
log_mel_spectrogram = librosa.power_to_db(mel_spectrogram, ref=np.max)
# 获取文件名
file_name = os.path.basename(in_file_path)
# 构造输出文件路径
out_file_path = os.path.join(out_folder_path, file_name.replace('.wav', '.npy'))
# 保存梅尔语谱图
np.save(out_file_path, log_mel_spectrogram)
# 遍历输入文件夹中的所有wav文件并提取梅尔语谱图
for root, dirs, files in os.walk(in_folder_path):
for file in files:
if file.endswith('.wav'):
# 构造输入文件路径
in_file_path = os.path.join(root, file)
# 构造输出文件夹路径
out_sub_folder_path = os.path.join(out_folder_path, os.path.basename(root))
# 如果输出文件夹不存在,则创建它
if not os.path.exists(out_sub_folder_path):
os.makedirs(out_sub_folder_path)
# 提取梅尔语谱图并保存到输出文件夹中
extract_mel_spectrogram(in_file_path, out_sub_folder_path)
```
这段代码将会递归地遍历输入文件夹中的所有子文件夹,并将每个wav文件的梅尔语谱图提取出来并保存到相应的子文件夹中。梅尔频谱图将以Numpy数组的形式保存在.npy文件中。你可以根据实际情况修改代码中的参数,例如n_mels来调整梅尔频谱图的分辨率。
python实现VAD技术批量清理多个wav文件中的静音片段
要批量清理多个WAV文件中的静音片段,可以使用Python中的文件操作和循环语句。以下是一种基于Python的实现VAD技术,批量清理多个WAV文件中的静音片段的方法:
1. 导入所需的库:例如pydub, webrtcvad等。
2. 使用os库列出所有待处理的WAV文件。
3. 使用pydub库加载每个WAV文件。
4. 将每个WAV文件转换为PCM数据。
5. 使用webrtcvad库检测PCM数据中的活动和静默部分。
6. 根据检测结果,将静默部分从PCM数据中删除。
7. 将处理后的PCM数据保存为WAV文件。
以下是一个简单的Python代码示例,可以实现VAD技术批量清理多个WAV文件中的静音片段:
```
import os
from pydub import AudioSegment
import webrtcvad
# 定义参数
frame_duration_ms = 30
frame_size = int(frame_duration_ms * 16 / 1000)
vad = webrtcvad.Vad()
vad.set_mode(3)
# 列出所有待处理的WAV文件
wav_files = [f for f in os.listdir() if f.endswith('.wav')]
# 循环处理每个WAV文件
for wav_file in wav_files:
# 加载音频文件
audio = AudioSegment.from_file(wav_file)
# 将音频转换为PCM数据
pcm_data = audio.raw_data
# 检测静默部分
active = []
start = 0
audio_length = len(pcm_data)
sample_rate = audio.frame_rate
while start < audio_length:
end = min(start + frame_size, audio_length)
frame = pcm_data[start:end]
if vad.is_speech(frame, sample_rate):
active.extend(range(start, end))
start = end
# 提取静默部分
segments = []
for k, g in groupby(enumerate(active), lambda i_x:i_x[0]-i_x[1]):
segment = list(map(itemgetter(1), g))
start = segment[0] * 2
end = segment[-1] * 2
segments.append((start, end))
# 删除静默部分
for segment in segments:
audio = audio[:segment[0]] + audio[segment[1]:]
# 保存处理后的音频文件
audio.export("processed_" + wav_file, format="wav")
```
这段代码使用了os库列出所有待处理的WAV文件,并使用循环语句依次处理每个WAV文件。请注意,要根据实际情况调整VAD检测器的参数以达到最佳效果。
阅读全文