1

Je voudrais jouer un fichier audio Pendant ce temps traçant et mettant à jour un diagramme. Cependant, mon fichier audio est interrompu. Je voudrais jouer doucement le fichier audio en arrière-plan et mettre à jour la figure en même temps.Comment lire un fichier audio en traçant un diagramme simultanément dans matlab?

for i=1:10 
player = audioplayer(audio, Fs); 
play(player); 
scatter(x(i),y(i),'r.') 
end 
+0

HI, Il semble que vous essayez de jouer un son différent à chaque itération est que ce but? –

+0

oui quelque chose comme ça mais il n'entend pas bien :( – Amir

+0

Essayez d'arrêter le lecteur à la fin de la boucle et d'utiliser une pause quelque part –

Répondre

1

Votre problème est que le jeu est un appel asynchrone: cela signifie que l'exécution du programme continue immédiatement après l'appel à «jouer (joueur).

Si vous avez l'intention de jouer différents fichiers à chaque itération, essayez d'attendre jusqu'à ce que les finitions de fichiers en cours, vous pouvez utiliser quelque chose comme:

while player.isplaying 
    pause(0.001) 
end 

Si vous vouliez jouer un signal et changer les parcelles, déplacez le jouer (joueur) à l'extérieur de la boucle, et ajouter un délai entre chaque point de traçage par exemple avec votre code:

player = audioplayer(audio, Fs); 
play(player); 
for i=1:10 
    scatter(x(i),y(i),'r.') 
    pause(0.1) 
end 

exemple pour un signal en cours de lecture et l'intrigue mise à jour:

Construire un signal chirp:

Fs = 16e3; 
T = 10; 
t = 0:1/Fs:T; 
f0 = 100; 
phi = 2*pi*t.^2*f0; 
sig = 0.1*sin(phi); 


% Start playing the sound: 
player = audioplayer(sig,Fs); 
play(player); 


% Plotting stuff: 
dPhi = gradient(phi)*Fs;  
figure; 
numPlots = 20; 
N = numel(t); 
for n = 1 : numPlots 
    pause(T/numPlots) 
    ind = 1:N/numPlots*n; 
    plot(t(ind), dPhi(ind)) 
end 

En général lors du traçage « en temps réel », il est préférable d'utiliser le tic-tac pour déterminer l'heure par rapport au temps de l'audio a commencé à jouer. Pour améliorer également les performances, il est préférable de définir les données xdata & des tracés au lieu de les retravailler à chaque fois car cette action est beaucoup plus rapide (ne met pas à jour toutes les autres propriétés des axes).

Vous pouvez regarder un vieux script que je partageais une fois à faire tracer « temps réel »: https://www.mathworks.com/matlabcentral/fileexchange/14397-real-time-scope-display--simple-script-