jwb361的专栏

TIMIT语音库为大多数论文及研究中常用的语音库,适用于语音识别、说话人识别等语音信号处理。

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

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

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

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

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

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

function [ wav_files ] = find_wav( path )%FIND_WAV, find all wav file recursivelywav_files = [];if(isdir(path) == 0)return;endpath_files = dir(path);fileNum = length(path_files);for k= 3:fileNumfile = [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);elsewav_files = char(wav_files, ret);endendelseif strfind(path_files(k).name, ‘.wav’)if(isempty(wav_files))wav_files = char(file);elsewav_files = char(wav_files, file);endendendendstep2 文件转换conver_wav.m%SPHERE 文件转换为wav文件clear all;fs = 16000;files = find_wav(‘.’);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;endfrewind(fileID);allData = fread(fileID, inf, ‘short’);fclose(fileID);delete(file);wavwrite(allData(513:end)./32768, fs, file); %SPHERE 文件头1024字节endstep3 检查 check_wav.mclear all;files = find_wav(‘.’);for fileIdx = 1:length(files)file = files(fileIdx,:);[y, fs, nbits] = wavread(file);%不是wav文件就会报错if(fs~=16000)fprintf(‘%s: fs~=16000n’, file);endif(nbits ~= 16)fprintf(‘%s: nbits ~= 16n’, file);endend大功告成

我想,旅行需要孤独,需要一个人慢慢体会,静静思考。

jwb361的专栏

相关文章:

你感兴趣的文章:

标签云: