wav转txt格式的代码实现(c,python)

时间:2022-09-27 20:33:17

  平时经常做音频算法,经常用得到wav转txt的转换,这里就做个备忘,自己写了一些小代码来实现这个目标:

第一个是c代码的实现:

 #include <stdio.h>
#include <stdlib.h>
#include <math.h> #define W 128 int FileSet = ;
int FileEnd = ;
int FileLength = ;
short InputData[W];
void buf_txt(short *buf,int len,FILE*ttt)
{
for(int i=; i < len; i++)
{
fprintf(ttt, ",%d",buf[i]);
if(i % == )
{
fprintf(ttt, "\n");
}
}
} int main(int argc, char** argv)
{ FILE *Ifp,*ttt; if(argc != )
{
printf("usage:./wav2txt XX.wav EEE.txt\n\t");
return ;
} Ifp = fopen(argv[],"rb"); ttt = fopen(argv[],"w"); fseek(Ifp,0L,SEEK_END);
FileEnd=ftell(Ifp);
rewind(Ifp);
FileLength = FileEnd/; while(FileLength >= W)
{
fread(InputData,sizeof(short),W,Ifp);
buf_txt(InputData,W,ttt);
FileLength -= W; } fread(InputData,sizeof(short),FileLength,Ifp); buf_txt(InputData,FileLength,ttt); return ;
}
~

第二个是python的代码:

 # -*- coding: utf-8 -*-
import wave
import matplotlib.pyplot as plt
import numpy as np
import sys f = wave.open(sys.argv[1], 'rb' )
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4] np.set_printoptions(threshold='nan') Data_str = f.readframes(nframes)
Data_num = np.fromstring(Data_str,dtype=np.int16)
print(Data_num)
print(nframes) #np.savetxt("test.txt",Data_num) fw =file(sys.argv[2],"w")
fw.write(str(list(Data_num)))
fw.close() f.close()

python和c代码放在一起的时候,才会发现,它是多么的简洁,看来以后要经常使用了。把python作为一个重点使用的语言来重视起来。

备忘问题:

1 一个数组无穷大,numpy在输出时会自动省略中间部分而只打印部分。

  解决方法:使用numpy.set_printoptions(threshold='nan')

2 Python中list里面的元素没有以逗号为分割,而是以空格为分割:

 解决方法:基础知识不够牢固,list中元素是以逗号做分割的,matrix中是以空格为分割的,强转即可。

参考文档:

1 https://www.cnblogs.com/dupuleng/articles/5028291.html

2 https://blog.csdn.net/bowean/article/details/80868965