Wait for sound to finish and then execute

17 次查看(过去 30 天)
I am trying to create a lamp that turns green while the audio is playing and red after the audio is played. I wrote the following function
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') )
app.xn_flag = 1; % Waiting for sound to finish here
end
end
app.xn_flag = 0;
app.playingxnLamp.Color = 'r';
end
But it creates huge lag that I have to terminate the program using task manager.
Any idea how to fix this?
Thank you

采纳的回答

Steven Lord
Steven Lord 2021-4-27
Instead of calling play on your audioplayer object you should call playblocking.
  2 个评论
Adham Elkhouly
Adham Elkhouly 2021-4-27
it intially worked but now I get an error that says Invalid or deleted object.
if(app.wav_flag == 1 && app.yn_flag ==0)
app.playingxnLamp.Color = 'g';
app.player = audioplayer(app.x, app.fs);
app.xn_flag = 1;
playblocking(app.player,app.fs);
app.playingxnLamp.Color = 'r'; %<-- here
end

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2021-4-27
Use a stopFcn callback https://www.mathworks.com/help/matlab/ref/audioplayer.html#mw_ce25e74d-6a00-44d6-9ae9-9a6e6335962c

产品


版本

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by