1

Ich würde gerne eine Audiodatei spielen und gleichzeitig ein Diagramm zeichnen und aktualisieren. Meine Audiodatei ist jedoch unterbrochen. Ich möchte Audiodatei glatt im Hintergrund spielen und die Zahl gleichzeitig aktualisieren.Wie kann man eine Audiodatei gleichzeitig in Matlab mit einem Diagramm darstellen?

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

HALLO, es sieht aus wie Sie in jeder Iteration einen anderen Sound zu spielen versuchen, ist das, was beabsichtigt? –

+0

ja etwas wie es, aber es hört nicht gut :( – Amir

+0

Versuchen Sie, den Player am Ende der Schleife zu stoppen und irgendwo eine Pause zu verwenden –

Antwort

1

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-

Verwandte Themen