如何将音频样本转为numpy.ndarray以适配librosa.display.waveshow?
问题原因
你遇到的错误是因为audiofile里的元素是带空格的字符串类型,直接用np.asarray()转换时,数组的 dtype 还是字符串,并不是真正的浮点型,所以librosa判断数据类型不匹配。
解决步骤
1. 清洗并转换每个字符串元素
先遍历audiofile列表,去掉每个字符串里的空格,再转换为float类型:
import csv import numpy as np import librosa.display with open("./test.csv", "r") as csv_file: reader = csv.reader(csv_file, quoting=csv.QUOTE_NONE) rows = list(reader) audiofile = rows[12] # 清洗每个元素:去除空格并转为float cleaned_samples = [float(sample.strip()) for sample in audiofile] # 转为浮点型numpy数组 myarray = np.asarray(cleaned_samples, dtype=np.float32)
2. 检查音频数据范围(可选但重要)
librosa的音频处理通常期望数据在**[-1.0, 1.0]**区间内。如果你的CSV里的原始样本是整数格式(比如16位PCM的-32768到32767),需要额外做归一化:
# 假设原始是16位整数范围的样本 myarray = myarray / 32768.0
3. 验证数据类型
转换后可以用print(myarray.dtype)确认,输出应该是float32或float64,此时再调用librosa.display.waveshow(myarray)就不会报错了。
原报错信息:
librosa.util.exceptions.ParameterError: Audio data must be floating-point
内容的提问来源于stack exchange,提问作者Laulito
相关产品推荐
相关产品推荐

