Hi, I want to remove a frequency from all my mp3 songs, my idea is to use the audioread and audioinfo functions to copy a song in my workspace, see if i can use the filter I created, with a sample rate of 44.1kHz and cut out the frequency (1kHz +/- 300Hz). With audiowrite I can create a .wav file without that frequency. But its a lot of work to do that for every song, is it possible to read the first song in one directory, filter it and generate a wav file in another directory and continue with the second song in the directory and so on? audioread expects the whole filename, I have no idea how to find out how many and which songs are in the directory, can anyone help me?
MATLAB: Read all audio files in one directory
audiofilereadfilterFilter Design Toolboxit's in the faqmp3
Related Solutions
filename = fullfile(pathname, file);[data, Fs] = wavread(filename);freqdata = fft(data);
You can get a directory and then use randperm to get a list of random, non-repeated indexes, or randi to get a list of possibly repeated indexes, or you can use this program I wrote that will play either a random wave file or one that you specify:
% Play a wav file. You can pass in 'random' and it will pick one at random from the folder to play.
% PlaySoundFile(handles.soundFolder, 'chime.wav');
% PlaySoundFile(handles.soundFolder, 'random');
function PlaySoundFile(soundFolder, baseWavFileName) try % Read the sound file into MATLAB, and play the audio.
% soundFolder = fullfile(soundFolder, 'Sound Files');
if ~exist(soundFolder, 'dir') warningMessage = sprintf('Warning: sound folder not found:\n%s', soundFolder); WarnUser(warningMessage); return; end if strcmpi(baseWavFileName, 'random') itWorked = false; tryCount = 1; while itWorked == false % Pick a file at random.
filePattern = fullfile(soundFolder, '*.wav'); waveFiles = dir(filePattern); numberOfFiles = length(waveFiles); % Get a random number
fileToPlay = randi(numberOfFiles, 1); baseWavFileName = waveFiles(fileToPlay).name; fullWavFileName = fullfile(soundFolder, baseWavFileName); waveFileData = -1; try if exist(fullWavFileName, 'file') [waveFileData, Fs, nbits, readinfo] = wavread(fullWavFileName); sound(waveFileData, Fs); % soundsc(y,Fs,bits,range);
else warningMessage = sprintf('Warning: sound file not found:\n%s', fullWavFileName); WarnUser(warningMessage); end % It worked. It played because the audio format was OK.
itWorked = true; catch % Increment the try count and try again to find a file that plays.
tryCount = tryCount + 1; if tryCount >= numberOfFiles break; end end end % of while()
else % baseWavFileName = 'Chime.wav';
fullWavFileName = fullfile(soundFolder, baseWavFileName); waveFileData = -1; if exist(fullWavFileName, 'file') [waveFileData, Fs, nbits, readinfo] = wavread(fullWavFileName); sound(waveFileData, Fs); % soundsc(y,Fs,bits,range); else warningMessage = sprintf('Warning: sound file not found:\n%s', fullWavFileName); WarnUser(warningMessage); end end catch ME if strfind(ME.message, '#85') % Unrecognized format. Play chime instead.
fprintf('Error in PlaySoundFile(): %s.\nUnrecognized sound format in file:\n\n%s\n', ME.message, fullWavFileName); baseWavFileName = 'Chime.wav'; fullWavFileName = fullfile(soundFolder, baseWavFileName); waveFileData = -1; if exist(fullWavFileName, 'file') [waveFileData, Fs, nbits, readinfo] = wavread(fullWavFileName); sound(waveFileData, Fs); % soundsc(y,Fs,bits,range); end end errorMessage = sprintf('Error in PlaySoundFile().\nThe error reported by MATLAB is:\n\n%s', ME.message); fprintf('%s\n', errorMessage); WarnUser(errorMessage); end return; % from PlaySoundFile
By the way, WarnUser is simply
function WarnUser(message)uiwait(warndlg(message));
Best Answer