在MATLAB中等待音频完成

在MATLAB中等待音频完成,matlab,matlab-app-designer,Matlab,Matlab App Designer,我试图创建一个指示灯,在播放音频时变为绿色,在播放音频后变为红色。我写了这几行 function PlayxnButtonPushed(app, event) if(app.wav_flag == 1 && app.yn_flag ==0) app.playingxnLamp.Color = 'g'; app.player = audioplayer(app.x, app.fs);

我试图创建一个指示灯,在播放音频时变为绿色,在播放音频后变为红色。我写了这几行

function PlayxnButtonPushed(app, event)
             if(app.wav_flag == 1 && app.yn_flag ==0)
            app.playingxnLamp.Color = 'g';
            app.player = audioplayer(app.x, app.fs); 
            play(app.player,app.fs);
            while( strcmp(app.player.running,'on') )
  % Waiting for sound to finish
            end 
            app.xn_flag = 1;
            end
           app.xn_flag = 0;
           app.playingxnLamp.Color = 'r';
        end
但它们造成了延迟,我最终不得不打开任务管理器来终止程序。你知道我应该做什么吗TIA

使用代替。
playblocking
功能保留控制权,直到播放完成

function PlayxnButtonPushed(app, event)
if(app.wav_flag == 1 && app.yn_flag ==0)
   app.player = audioplayer(app.x, app.fs);
   app.playingxnLamp.Color = 'g'; 
   playblocking(app.player,app.fs);   %replaced play with playblocking
   app.xn_flag = 1;
end
app.xn_flag = 0;
app.playingxnLamp.Color = 'r';
end

正如我们的朋友所说。您必须使用playblocking而不是play。无需在循环时执行此操作。考虑这一点:

 app.Lamp.Color = 'g';
 player = audioplayer(y,Fs);
 playblocking(player)
 app.Lamp.Color = 'r';