TIMIT语音库

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

Guess you like

Origin blog.csdn.net/u011913417/article/details/107761558