Timit SPHERE格式轉換

timit常用來做語音識別及說話人識別,畢竟開源的語音庫太少了,格式:16k 16bit pcm編碼 完整應該是6300段語音

timit是SPHERE格式的,用的時候需要轉換下格式

參考:

http://www.360doc.com/content/17/0718/09/45512753_672245873.shtml

這個是直接替換原始的文件,後面修改下,改成在新的目錄生成,免得還要重新整理一遍

1、find_wav.m 查找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

2、sphere2Common.m

注意:這個程序在運行第二次時會將新生成的文件也處理,可以重新設置存儲的路徑,不過貌似直接設置不行,要先創建文件夾纔行

%SPHERE 文件轉換爲wav文件 %clear all; fs = 16000; files = find_wav('F:\TIMIT\TRAIN'); %SPHERE 文件轉換爲wav文件 %clear all; fs = 16000; files = find_wav('F:\TIMIT\TRAIN'); for fileIdx = 1:length(files)       file = deblank(files(fileIdx,:));     file_splits = regexp(file, '\\', 'split');     newfile =  deblank(strcat('F:\TIMIT\TRAIN', '\', file_splits(end-1), '_', file_splits(end)));     fileID = fopen(file);          newfile_path= newfile{1};          %判斷文件頭,防止誤操作     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);     wavwrite(allData(513:end)./32768, fs, newfile_path);    %SPHERE 文件頭1024字節        % fclose(fileID); end

3、check_wav.m

clear all;
files = find_wav('.');
for fileIdx = 1:length(files)
    file = files(fileIdx,:);
    [y, fs, nbits] = wavread(file);%不是wav文件就會報錯
    if(fs~=16000)
        fprintf('%s: fs~=16000\n', file);
    end
    if(nbits ~= 16)
        fprintf('%s: nbits ~= 16\n', file);
    end
end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章