MatlabでMP3を読み書きするルーチンが欲しくなって、作りました。無圧縮ファイルを使うほど音質重視じゃないけど、処理したいファイル数はたくさんある、という時にちょっと便利かもしれません。自分の環境のことしか考えてなかったので、Unix系でLAMEが入っているのが条件です。
MP3READ
function [x,fs,nbits] = mp3read(filename)
%MP3READ Read MP3 file as a matrix
% [x,fs,nbits] = mp3read(filename) reads MP3 file as a matrix. The MP3
% decoder must be specified at the beginning of the m-file.% 2008-09-10 JikanBae
MP3DECODER = '/usr/local/bin/lame --silent --decode';
TMPDIR = '/tmp';tmpfilename = ['MP3READ_' datestr(now, 'yyyymmddHHMMSSFFF')];
system(sprintf('%s %s %s/%s.wav', MP3DECODER, filename, TMPDIR, tmpfilename));[x,fs,nbits] = wavread(sprintf('%s/%s.wav', TMPDIR, tmpfilename));
system(sprintf('rm %s/%s.wav', TMPDIR, tmpfilename));
MP3WRITE
function mp3write(x, fs, filename)
%MP3WRITE Write a matrix as an MP3 file
% mp3write(x, fs, filename) writes a matrix as an MP3 file. The MP3
% encoder must be specified at the beginning of the m-file. 'fs' is the
% sampling frequency of 'x'.% 2008-09-10 JikanBae
MP3ENCODER = '/usr/local/bin/lame --silent -V 0';
TMPDIR = '/tmp';tmpfilename = ['MP3WRITE_' datestr(now, 'yyyymmddHHMMSSFFF')];
wavwrite(x, fs, 24, sprintf('%s/%s.wav', TMPDIR, tmpfilename));system(sprintf('%s %s/%s.wav %s', MP3ENCODER, TMPDIR, tmpfilename, filename));
system(sprintf('rm %s/%s.wav', TMPDIR, tmpfilename));
コメントする