Salve a tutti ragazzi,
ho letto un po' in questa sezione per trovare qualcosa che possa aiutare la mia causa ma non ci sono riuscito e per questo sto scrivendo un nuovo argomento.
Sto provando ad apprendere qualche nozione di matlab per lo sviluppo di applicativi nel campo della crittoanalisi. Ho creato con GUIDE un'interfaccia molto semplice che permette (cliccando il tasto play) di iniziare una registrazione, un tasto stop per fermare la registrazione e automaticamente salvare con nome il file audio e successivamente riproduce il file audio appena registrato e disegna un grafico del segnale.
Il problema è il seguente: se registro 5 secondi o più vengono salvati solo 5 secondi di audio e il tutto viene eseguito correttamente. Aumentando il tempo sono vincolato sempre dal numero di secondi che passo in recordblocking perchè se dovessi registrare meno del tempo inserito (5 secondi in questo caso) registra, salva correttamente ma disegna e fa ascoltare l'audio precedente o comunque l'ultimo audio registrato correttamente (cioè quello di 5 secondi o più). Io sto cercando di modificare il tutto per poter registrare un tempo non stabilito in recordblocking ma che dipenda solo dall'utente (cliccando il tasto stop appena ha finito la registrazione) e poi eseguire tutto il resto, salvare ascoltare l'audio e disegnare il grafico.
Posto il codice con le callback dei due tasti e una funziona stoprecording che viene richiamata dalle due callback.
Qui inizio la registrazione ed è presente recordblocking con 5 secondi come tempo massimo di registrazione.
function inizioregistrazione_Callback(hObject, eventdata, handles)
RecordStatus = get(hObject,'Value');
runstr=get(hObject,'string');
if RecordStatus == 1
% start recording
fs = 44100;
obj = audiorecorder(fs, 16, 1);
recordblocking(obj, 5);
record(obj);
y = getaudiodata(obj);
clear obj
save recording.mat y
else
% stop recording
StopRecording(handles);
end
Qui abbiamo la callback del tasto per fermare la registrazione che richiama la funzione stoprecording
function fermareregistrazone_Callback(hObject, eventdata, handles)
StopRecording(guidata(hObject));
Infine la funziona che si occupa di salvare il file audio, riprodurre il file appena registrato e disegnare il grafico
function StopRecording(handles)
fs = 44100;
load recording y;
[filename, pathname] = uiputfile('*.wav', 'Save file name');
cd (pathname);
audiowrite(filename, y, fs);
sound(y,fs);
handles.x = y;
handles.fs = fs;
axes(handles.axes1);
time = 0:1/fs:(length(handles.x)-1)/fs;
plot(time,handles.x);
title('Original Signal');
axes(handles.axes2);
specgram(handles.x, 1024, handles.fs);
title('Encrypted Signal');
%guidata(handles);
Ringrazio in anticipo per le vostre risposte.
Un saluto.