looping in all audio files

13 visualizaciones (últimos 30 días)
Abdullah Mogazi
Abdullah Mogazi el 16 de Ag. de 2022
Respondida: jibrahim el 18 de Ag. de 2022
I'm trying to remove silence in audio files I already did that in every single file but I still have thousand of another files. but to save time, how I can loop them to silence all files in the same time and be able to download all new audios?. I tried but it gets me some errors.
clc; clear all; [filenames, pathname] = uigetfile({'.wav'},'Select file .wav', ... 'MultiSelect', 'on'); fullpathnames = fullfile(pathname, cellstr(filenames)); numfiles = length(fullpathnames); audio = cell(numfiles, 1); fs = zeros(numfiles, 1); for i = 1: numfiles
[audio{i}, fs(i)] = audioread(fullpathnames{i}); end % do framing f_d = 0.25; f_size = round(f_d
fs); n = length(audio); n_f = floor(n/f_size); %no. of frames temp = 0; for i = 1 : n_f
frames(i,:) = audio(temp + 1 : temp + f_size); temp = temp + f_size; end % silence removal based on max amplitude m_amp = abs(max(frames,[],2)); % find maximum of each frame id = find(m_amp > 0.03); % finding ID of frames with max amp > 0.03 fr_ws = frames(id,:); % frames without silence % reconstruct signal audio_r = reshape(fr_ws',1,[]); plot(audio_r); title('speech without silence'); hold on; plot(audio,'r'); legend('After Silence Removal','Original Signal'); frame_analysis_silence_removal.m Displaying frame_analysis_silence_removal.m.

Respuestas (2)

Benjamin Thompson
Benjamin Thompson el 16 de Ag. de 2022
dir('*.wav') will return a struct containing all the audio file names. Then you can pass the name field of each element of that structure array to audioread in a for loop. That would take uigetfile out of the picture.
  3 comentarios
Walter Roberson
Walter Roberson el 16 de Ag. de 2022
Editada: Walter Roberson el 17 de Ag. de 2022
You should format your code first before expecting someone to edit it. With the way it is now, we cannot tell where the comments end.
Benjamin Thompson
Benjamin Thompson el 17 de Ag. de 2022
Here is a small sample to try yourself and if you have problems and want to post a new sample of your code for help, you may do that.
>> cd rtwdemo_roll_ert_rtw\
>> D = dir('*.c')
D =
2×1 struct array with fields:
name
folder
date
bytes
isdir
datenum
>> D(1).name
ans =
'ert_main.c'
>> D(2).name
ans =
'rtwdemo_roll.c'

Iniciar sesión para comentar.


jibrahim
jibrahim el 18 de Ag. de 2022
audioDatastore can simplify this type of task.
ads = audioDatastore(yourFolder);
% Read all files, one by one, using a while-loop
while hasdata(ads)
[data,info] = read(ads);
% do whatever you want with the data
end

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by