Ihr Problem ist, dass das Spiel ein asynchroner Aufruf ist: es bedeutet, dass die Programmausführung fortgesetzt unmittelbar nach dem Aufruf ‚spielt (Spieler)‘.
Wenn Sie bei jeder Iteration verschiedene Dateien spielen möchten, versuchen Sie, bis die aktuelle Datei beendet warten, können Sie so etwas wie verwenden:
while player.isplaying
pause(0.001)
end
Wenn Sie bedeutete ein Signal zu spielen und die Plots ändern, die bewegen spielen (Spieler), die außerhalb der for-Schleife, und fügt eine gewisse Verzögerung zwischen jedem Plotten Punkt beispielsweise mit dem Code:
player = audioplayer(audio, Fs);
play(player);
for i=1:10
scatter(x(i),y(i),'r.')
pause(0.1)
end
Beispiel für ein Signal wiedergegeben wird und Plotten aktualisiert:
Bauen Sie ein Chirp-Signal:
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
Im Allgemeinen, wenn ‚Echtzeit‘ Plotten es besser ist, tic-toc zu verwenden aktuelle Zeit Abbildung im Vergleich zu der Zeit, die Audio-Wiedergabe gestartet. Um die Leistung zu verbessern, ist es besser, die XDaten & YData der Plots festzulegen, anstatt sie jedes Mal neu zu plotten, da diese Aktion viel schneller ist (aktualisiert nicht alle anderen Eigenschaften der Achsen).
Sie an einem alten Skript aussehen kann ich einmal ‚Echtzeit‘ Plotten zu tun geteilt: https://www.mathworks.com/matlabcentral/fileexchange/14397-real-time-scope-display--simple-script-
HALLO, es sieht aus wie Sie in jeder Iteration einen anderen Sound zu spielen versuchen, ist das, was beabsichtigt? –
ja etwas wie es, aber es hört nicht gut :( – Amir
Versuchen Sie, den Player am Ende der Schleife zu stoppen und irgendwo eine Pause zu verwenden –