似た種類のファイルがたくさんあって、それらをひとつずつ読み込んで処理したい、ということがときどきあります。たとえば、複数のWAVファイルすべてをノーマライズしたいとか、たくさんあるテキストファイルの1行目だけを読み込んで別ファイルに書き出したいとか。
そんなとき、僕は以下のようにやっています。あるディレクトリ中のWAVファイルの音圧を半分にして、filename_half.wavという別名で保存するプログラムです。
% 特定の拡張子のファイルのみをリストにする files = dir('*.wav'); for n=1:length(files) % ファイル名を部品に分割 [path, name, ext] = fileparts(files(n).name); % ファイル名を表示 disp(name); % n番目のWAVファイルを読み込む [x,fs,nbits] = wavread(files(n).name); % 音圧を半分にする y = x / 2; % WAVファイルを書き出す wavwrite(y, fs, nbits, [name '_half.wav']); end
知ってしまえば単純ですが、こういった処理は利用機会が多いものです。今ではファイル名の一括変更なども(PerlやRubyを使えばいいのですが、いつも起動してあるので)Matlabでやってしまいます。