TIMIT语音库-----下载和matlab读取

本文介绍如何将TIMIT语音库中的SPHERE格式文件批量转换为标准WAV格式,并提供MATLAB代码实现。通过遍历文件夹、读取SPHERE文件、转换并验证文件格式,确保所有语音文件符合统一标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

TIMIT语音库-----下载和matlab读取

 

在MIT网站可以找到一些样例, 为 16kHz sampling, 16 bit sample, PCM encoding。样例才160个句子,不够用。

这儿能找到完整版,用抓取工具全部下载下来有600多M羡慕

问题是虽然其为wav结尾,matlab中wavread却读不了抓狂,用二进制打开文件发现

google一下,原来其为 SPHERE文件格式

整个语音库有6300个文件,如何全部转换为普通的wav文件?

step1 遍历整个文件夹,把所有wav文件全找出来 find_wav.m

 
  1. function [ wav_files ] = find_wav( path )

  2. %FIND_WAV, find all wav file recursively

  3. wav_files = [];

  4. if(isdir(path) == 0)

  5. return;

  6. end

  7. path_files = dir(path);

  8. fileNum = length(path_files);

  9. for k= 3:fileNum

  10. file = [path,'\', path_files(k).name];

  11. if (path_files(k).isdir == 1)

  12. ret = find_wav(file);

  13. if(isempty(ret) ~= 1)

  14. if(isempty(wav_files))

  15. wav_files = char(ret);

  16. else

  17. wav_files = char(wav_files, ret);

  18. end

  19. end

  20. elseif strfind(path_files(k).name, '.wav')

  21. if(isempty(wav_files))

  22. wav_files = char(file);

  23. else

  24. wav_files = char(wav_files, file);

  25. end

  26. end

  27. end

  28. end


step2 文件转换conver_wav.m

 
  1. %SPHERE 文件转换为wav文件

  2. clear all;

  3. fs = 16000;

  4. files = find_wav('.');

  5. for fileIdx = 1:length(files)

  6. file = files(fileIdx,:);

  7. fileID = fopen(file);

  8.  
  9. %判断文件头,防止误操作

  10. head = fread(fileID, 1024, 'char*1');

  11. headStr = sprintf('%s',head(1:7));

  12. if(~strcmp(headStr,'NIST_1A'))

  13. fclose(fileID);

  14. continue;

  15. end

  16. frewind(fileID);

  17.  
  18. allData = fread(fileID, inf, 'short');

  19. fclose(fileID);

  20. delete(file);

  21. wavwrite(allData(513:end)./32768, fs, file); %SPHERE 文件头1024字节

  22. end


step3 检查 check_wav.m

 
  1. clear all;

  2. files = find_wav('.');

  3. for fileIdx = 1:length(files)

  4. file = files(fileIdx,:);

  5. [y, fs, nbits] = wavread(file);%不是wav文件就会报错

  6. if(fs~=16000)

  7. fprintf('%s: fs~=16000\n', file);

  8. end

  9. if(nbits ~= 16)

  10. fprintf('%s: nbits ~= 16\n', file);

  11. end

  12. end


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值