wav_to_audio自定义功能不起作用

时间:2015-08-14 10:18:47

标签: matlab audio wav

在我的智慧结束时。这个程序曾经为我工作,但现在由于某种原因我不断得到我无法打开文件。 (之前使用过相同的文件,没问题)。我试图只切换到wavread并且它工作但是它为我调试整个程序的其余部分添加了各种复杂性,所以我真的想让wav_to_audio再次工作。

错误消息是

  

使用wavread时出错(第70行)无效的Wave文件。原因:无法打开文件。

     

wav_to_audio中的错误(第108行)[f_audio,fs,nbits] = wavread(strcat(dirAbs,dirRel,wavfilename));

     

test_TempogramToolbox中的错误(第61行)[audio,sideinfo] = wav_to_audio('',dirWav,filename);

这是matlab代码:

clear close all

dirWav = 'data_wav/';

filename = 'Debussy_SonataViolinPianoGMinor-02_111_20080519-SMD-ss135-189.wav';
% filename = '110-130bpm_click.wav';
% filename = 'Faure_Op015-01_126_20100612-SMD-0-12.wav';
% filename = 'Poulenc_Valse_114_20100518-SMD-0-15.wav';
% filename = 'Schumann_Op015-03_113_20080115-SMD-0-13.wav';

%% load wav file, automatically converted to Fs = 22050 and mono
[audio,sideinfo] = wav_to_audio('',dirWav,filename); Fs = sideinfo.wav.fs;

%% wav_to_audio function
if parameter.message == 1
    fprintf('wav_to_audio: processing %s, ',wavfilename);
end

[pathstr,name,ext] = fileparts(wavfilename);
if strcmp(ext,'.wav')
    [f_audio,fs,nbits] = wavread(strcat(dirAbs,dirRel,wavfilename));
else
    error(['Unknown file format ' ext]);
end

bConverted_to_mono = 0;
if parameter.convertToMono
    if size(f_audio,2)>1
        bConverted_to_mono = 1;
        if parameter.message == 1
            fprintf('converting to mono, ');
        end
        switch parameter.monoConvertMode
            case 'leftmost_channel'
              f_audio= f_audio(:,1);
            case 'rightmost_channel'
              f_audio= f_audio(:,size(f_audio,2));
            case 'downmix' % pay attention to energy loss due to differences in phase
                           % when using this method. This is often the case for bad
                           % stereo mixes
              nChannels = size(f_audio,2);
              f_audio = sum(f_audio,2);
              f_audio = f_audio / nChannels;
            otherwise
              disp('wav_to_audio: monoConvertMode : Unknown method')
        end
    end
end
bResampled = 0;
if parameter.useResampling
    if (fs ~= parameter.destSamplerate)
        bResampled = 1;
        if parameter.message == 1
            fprintf('Resampling to %d, ', parameter.destSamplerate);
        end
        f_audio = resample (f_audio,parameter.destSamplerate,fs,100);
        fs = parameter.destSamplerate;
    end
end

%% Update sideinfo
sideinfo.wav.version = 1;
sideinfo.wav.filename = wavfilename;
sideinfo.wav.dirRel = dirRel;
sideinfo.wav.size = size(f_audio,1);
sideinfo.wav.duration = (sideinfo.wav.size-1)/fs;
sideinfo.wav.energy = sum(f_audio.^2);
sideinfo.wav.fs = fs;
sideinfo.wav.nbits = nbits;
sideinfo.wav.channels = size(f_audio,2);
sideinfo.wav.resampled = bResampled;
sideinfo.wav.monoConverted = bConverted_to_mono;
if bConverted_to_mono
    sideinfo.wav.monoConvertMode = parameter.monoConvertMode;
else
    sideinfo.wav.monoConvertMode = 'none';
end

%% Saving data
if parameter.save == 1
    if parameter.message == 1
        fprintf('Saving to file, ');
    end
    filename = strcat(parameter.saveFilename,'_audio');
    save(strcat(parameter.saveDir,filename),'f_audio','sideinfo');
end
if parameter.message == 1
    fprintf('Done\n');
end

%% Visualization
if parameter.vis
    figure;
    for k=1:sideinfo.wav.channels
        if sideinfo.wav.channels > 1
            subplot(sideinfo.wav.channels,1,k);
        end
        plot( [0:sideinfo.wav.size-1] / sideinfo.wav.fs , f_audio(:,k));
        axis tight;
    end
end

end

0 个答案:

没有答案