Clear Filters
Clear Filters

randomly picking some files

7 views (last 30 days)
jalal Ahmad
jalal Ahmad on 10 Sep 2013
Edited: Walter Roberson on 21 Jun 2017
I want to pick some .wav files randomly from a certain directory without replacement or with no repititions .. how is that possible ? please help me in this regard

Accepted Answer

Image Analyst
Image Analyst on 10 Sep 2013
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));
  11 Comments
sabrina lenglet
sabrina lenglet on 21 Jun 2017
Edited: Walter Roberson on 21 Jun 2017
% 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, ~, ~] = audioread(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';
% baseWavFileName = 'sinus1300.wav';
fullWavFileName = fullfile(soundFolder, baseWavFileName);
waveFileData = -1;
if exist(fullWavFileName, 'file')
[waveFileData, Fs, ~, ~] = audioread(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 = 'sinus1300.wav';
% efface sab baseWavFileName = 'Chime.wav';
fullWavFileName = fullfile(soundFolder, baseWavFileName);
waveFileData = -1;
if exist(fullWavFileName, 'file')
[waveFileData, Fs, ~, ~] = audioread(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
sabrina lenglet
sabrina lenglet on 21 Jun 2017
Hi it's work !!!! Thanks a lot

Sign in to comment.

More Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 10 Sep 2013
your_folder='E:\matlab';
d=dir([your_folder '\*.wav']);
f={d.name};
n=numel(f);
idx=randi(numel(f));
file=f{idx}
f(idx)=[];
  2 Comments
jalal Ahmad
jalal Ahmad on 11 Sep 2013
thank u it works
sabrina lenglet
sabrina lenglet on 14 Jun 2017
How can I play this sound or file.wav ? thanks

Sign in to comment.


Walter Roberson
Walter Roberson on 10 Sep 2013
Yes. If your file names are in the cell array FileNames then
shuffleidx = randperm(length(fileNames));
for K = 1 : length(suffleidx)
thisfile = fileNames{shuffleidx(K)}
...
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!