每天都在头秃 2024-01-27 20:38 采纳率: 96.7%
浏览 9
已结题

librosa重采样时遇到问题

我在将自己录制的音频用Python转换格式并转换为16khz的文件保存时,显示了如下错误ParameterError: Audio data must be of type numpy.ndarray。
我对numpy的了解还不够深入想知道该怎么解决。

img

import torchaudio
from pydub import AudioSegment
import wave
import librosa
#open the file
filename="./MyVoice.m4a"
my_file="MyVoice.wav"
#with open(my_file,'rb') as M:
    #content=M.read()
    #print(content)
    
#convert .m4a into .wav
sound = AudioSegment.from_file(filename, format="m4a")
sound.export(my_file, format="wav")

#get the initial data
waveform, sampling_rate=torchaudio.load(my_file)
#print the basic size of waveform and sampling rate
print("The size of waveform:{}".format(waveform.size()))
print("The sampling rate :{}".format(sampling_rate))

#get the information of the file
f=wave.open(my_file,'rb')
params = f.getparams()  
print(params)
nchannels, sampwidth, framerate, nframes = params[:4]
print(sampwidth)

#resampe and get new data with 16khz sampling rate and 16-bit depth
new_file="Re_MyVoice.wav"
resampler_16k = librosa.resample(y=waveform,orig_sr=sampling_rate,target_sr=16000)
librosa.output.write_wav(new_file, resampler_16k, 16000)

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2024-01-27 21:33
    关注

    torchaudio.load函数返回类型是torch.Tensor的waveform,而不是一个numpy.ndarray类型。
    librosa.resample函数需要传一个numpy数组。

    
    resampler_16k = librosa.resample(y=waveform,orig_sr=sampling_rate,target_sr=16000)
    改为:
    resampler_16k = librosa.resample(y=waveform.numpy(), orig_sr=sampling_rate, target_sr=16000)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月27日

悬赏问题

  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补
  • ¥15 用Matlab实现图中的光线追迹
  • ¥15 联想笔记本开机出现系统更新界面