Как я могу дождаться окончания команды (воспроизведения аудио) перед выполнением следующей, в Octave? - PullRequest
0 голосов
/ 21 марта 2019

Я запускаю следующий простой сценарий воспроизведения звука, который воспроизводит некоторый белый шум, используя 2 разных метода.Однако, если я не поставлю pause (T+1) после первой команды play , вторая (кажется?) Будет выполнена одновременно.

fs = 44100;         % sampling frequency, Hz
T = 5;              % signal duration, s
N = round(fs*T);    % number of samples

% use rand to create noise, wave is then normalized to a max of 1:
wave = 2*(rand(N,1)-0.5);
wave = wave./max(abs(wave));

disp ("Now playing: White noise 1")
player = audioplayer (wave, 44100, 8);
play (player);
pause(T+1)  % We need pause, otherwise multi thread will play next command at the same time!

disp ("Now playing: White noise 2")
soundsc(wave, fs)

Как мне дождаться окончания 1-й команды воспроизведения, прежде чем начинать 2-ю, без использования искусственной паузы ?

PS.Это октава 5.1.0 , работающая в Windows.

1 Ответ

2 голосов
/ 21 марта 2019

Вы можете сделать цикл занятости в состоянии воспроизведения:

while strcmpi(player.Running, 'on')
  pause(.1);
endwhile

Пауза не требуется или может вместо этого делать что-то другое - я просто использую в примере, чтобы ограничить использование ЦП.

Или

while isplaying(player)
  pause(.1);
endwhile

Вместо этого вы также можете использовать плейблок (игрок)


С здесь :

 33.3.1 Playback

 The following methods are used to control player playback. 
 ...
 playblocking (player)
 playblocking (player, start)
 playblocking (player, limits)

   Play audio stored in the audioplayer object player with blocking.

   Given optional argument start, begin playing at start samples in 
   the recording. Given a two-element vector limits, begin and end
   playing at the number of samples specified by the elements of the
   vector.

 isplaying (player)

   Return true if the audioplayer object player is currently playing 
   back audio and false otherwise.
...