TIMIT语音库的wav文件无法直接读取,参考该博客博主分享的matlab文件,处理过程中遇到小问题,修改后运行良好,感谢原作者的工作。
源代码
find_wav.m中将’.wav’改为‘.WAV’
function [ wav_files ] = find_wav( path )
%FIND_WAV, find all wav file recursively
wav_files = [];
if(isdir(path) == 0)
return;
end
path_files = dir(path);
fileNum = length(path_files);
for k= 3:fileNum
file = [path,'\', path_files(k).name];
if (path_files(k).isdir == 1)
ret = find_wav(file);
if(isempty(ret) ~= 1)
if(isempty(wav_files))
wav_files = char(ret);
else
wav_files = char(wav_files, ret);
end
end
elseif strfind(path_files(k).name, '.WAV')
if(isempty(wav_files))
wav_files = char(file);
else
wav_files = char(wav_files, file);
end
end
end
end
conver_wav.m,matlab中没有wavread和wavewrite,用audiowrite和audioread代替。file文件名后缀wav后是有空格的,需要去掉空格,否则无法会报错,说是后缀错误。
%SPHERE 文件转换为wav文件
clear all;
fs = 16000;
files = find_wav('TIMIT_FOLDER');
for fileIdx = 1:length(files)
file = files(fileIdx,:);
fileID = fopen(file);
%判断文件头,防止误操作
head = fread(fileID, 1024, 'char*1');
headStr = sprintf('%s',head(1:7));
if(~strcmp(headStr,'NIST_1A'))
fclose(fileID);
continue;
end
frewind(fileID);
allData = fread(fileID, inf, 'short');
fclose(fileID);
% delete(file);
audiowrite(strtrim(file), allData(513:end)./32768, fs); %SPHERE 文件头1024字节
end
check_wav.m
clear all;
files = find_wav('F:\BaiduNetdiskDownload\TIMIT\TIMIT');
for fileIdx = 1:size(files,1)
file = files(fileIdx,:);
[y, fs] = audioread(file);%不是wav文件就会报错
end
再次感谢原作者。
完整数据库下载链接
数据库下载也来源于博客原作者,感谢。在这里也分享出来,以便大家下载使用。
链接:https://pan.baidu.com/s/1bndeInZXzF6lYk3fNBT0lg
提取码:frgs