首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将voice.csv数据转换成音频wav格式?

如何将voice.csv数据转换成音频wav格式?
EN

Stack Overflow用户
提问于 2019-09-18 14:29:24
回答 1查看 670关注 0票数 2

我使用voice.csv数据将其转换为音频wav表单,但它有21列,在我的代码中,它只期望两个值(列),所以我必须在代码中进行哪些更改才能创建wav表单。

数据来自https://www.kaggle.com/primaryobjects/voicegender,它还对数据进行了描述:

测量每个声音的以下声学特性,并将其包括在CSV中:

frequency

  • median:的平均频率(以kHz计)

  • sd: description)

  • sp.ent:中值频率的标准差(以kHz计)

  • Q25:第一分位数(以kHz表示)

  • Q75:第三分位数(以kHz表示)<代码>H 114IQR:分位数范围(在编码中)<代码>H 215<代码><代码>H 116偏斜:偏斜度(见在光谱description)

  • sp.ent:熵<编码>H 221<代码>H 122H 122谱#EN3#模式中的注记)frequency

  • centroid:频率质心(见specprop)

  • peakf:峰值频率(跨声学signal

  • minfun:测量的基频频率的最高energy)

  • meanfun:平均值、跨声学signal

  • maxfun:测量的最小基频、跨声学signal

  • maxfun:测量的最大基频、跨声学signal

  • meandom:测量的主频平均值、跨声学signal

  • mindom:测量的主频最小值、跨声学signal

  • maxdom:测量的主频最大值、跨声学signal

  • modindx:调制指数测量的主频signal

  • dfrange:范围)。计算为基频相邻测量值之间的累积绝对差除以频率范围

  • 标签:男性或女性

我的代码需要两列的输入。我试图将这些列转换成时间和频率,我已经尝试过跳过多个列,但我没有得到我想要的结果。

代码语言:javascript
运行
复制
import wave
import struct
import sys
import csv
import numpy 
from scipy.io import wavfile
from scipy.signal import resample


def write_wav(data, filename, framerate, amplitude):
wavfile = wave.open(filename,'w')
nchannels = 1
sampwidth = 2
framerate = framerate
nframes = len(data)
comptype = "NONE"
compname = "not compressed"
wavfile.setparams((nchannels,
                    sampwidth,
                    framerate,
                    nframes,
                    comptype,
                    compname))
frames = []
for s in data:
    mul = int(s * amplitude)
    frames.append(struct.pack('h', mul))

frames = ''.join(frames)
wavfile.writeframes(frames)
wavfile.close()
print("%s written" %(filename))


if __name__ == "__main__":
if len(sys.argv) <= 1:
    print ("You must supply a filename to generate")
    exit(-1)
for fname in sys.argv[1:]:

    data = []
    for time, value in csv.reader(open('voice.csv'), delimiter=','):
        try:
            data.append(float(value))#Here you can see that the time column is skipped
        except ValueError:
            pass # Just skip it


    arr = numpy.array(data)#Just organize all your samples into an array
    # Normalize data
    arr /= numpy.max(numpy.abs(data)) #Divide all your samples by the max sample value
    filename_head, extension = fname.rsplit(',',1)        
    data_resampled = resample( arr, len(data) )
    wavfile.write('rec.wav', 16000, data_resampled) #resampling at 16khz
    print ("File written succesfully !")






ValueError                                Traceback (most recent call 
last)
<ipython-input-10-ad8c56a24b4d> in <module>
  6 
  7         data = []
----> 8         for time, value in csv.reader(open('voice.csv'), 
delimiter=','):
  9             try:
 10                 data.append(float(value))#Here you can see that the 
time column is skipped

ValueError: too many values to unpack (expected 2)
EN

回答 1

Stack Overflow用户

发布于 2019-09-18 14:49:01

该文件包含统计聚合,而不是实际音频数据。没有办法,你可以反向工程一个忠实的音频信号,从这些全面的测量。

用很多话来说,这就像试图在距离和时间之间的两点之间创建一个地形轮廓。额外的测量数据,如时间上的高度差异或平均加速度,将极大地限制可能猜测的次数,但你仍在胡思乱想。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57995183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档