Multithreading 在执行下一个(八度)命令之前,如何等待(音频播放)命令完成?

Multithreading 在执行下一个(八度)命令之前,如何等待(音频播放)命令完成?,multithreading,audio,octave,Multithreading,Audio,Octave,我正在运行以下简单的音频播放脚本,使用两种不同的方法播放一些白噪声。但是,除非我将暂停(T+1)放在第一个播放命令之后,否则第二个(似乎是?)将同时执行 fs=44100;%采样频率,Hz T=5;%信号持续时间,s N=圆形(fs*T);%样本数量 %使用rand创建噪波,然后将波浪规格化为最大值1: 波浪=2*(兰特(N,1)-0.5); 波浪=波浪/最大值(绝对值(波浪)); disp(“正在播放:白噪声1”) 播放器=音频播放器(wave,44100,8); 玩(玩家); 暂停(T+1)

我正在运行以下简单的音频播放脚本,使用两种不同的方法播放一些白噪声。但是,除非我将
暂停(T+1)
放在第一个播放命令之后,否则第二个(似乎是?)将同时执行

fs=44100;%采样频率,Hz
T=5;%信号持续时间,s
N=圆形(fs*T);%样本数量
%使用rand创建噪波,然后将波浪规格化为最大值1:
波浪=2*(兰特(N,1)-0.5);
波浪=波浪/最大值(绝对值(波浪));
disp(“正在播放:白噪声1”)
播放器=音频播放器(wave,44100,8);
玩(玩家);
暂停(T+1)%我们需要暂停,否则多线程将同时播放下一个命令!
disp(“正在播放:白噪音2”)
soundsc(波浪,fs)
如何在启动第二个播放命令之前等待第一个播放命令完成,而不使用人工暂停?


注:这是在Windows上运行的倍频程5.1.0

您可以在播放状态下进行忙循环:

while strcmpi(player.Running, 'on')
  pause(.1);
endwhile
暂停不是必需的,或者可能是在做其他事情——我只是在示例中使用它来限制CPU的使用

你也可以用playblocking(player)代替


发件人:


您可以对播放状态执行忙循环:

while strcmpi(player.Running, 'on')
  pause(.1);
endwhile
暂停不是必需的,或者可能是在做其他事情——我只是在示例中使用它来限制CPU的使用

你也可以用playblocking(player)代替


发件人:


那个
播放器在运行什么?它的文档在哪里?(谷歌没有返回任何相关信息,因为它太笼统了。)这是玩家的状态——不管它是否在玩什么。在已创建的player对象上,在终端窗口中键入player并按enter键,它将显示主要属性是的,我猜了很多,但它在哪里?你还可以用它检查哪些东西?特定线程?我更新了答案-您甚至不必使用属性,但是是的-它没有明确说明文档中的属性是什么
player.Running
在做什么?它的文档在哪里?(谷歌没有返回任何相关信息,因为它太笼统了。)这是玩家的状态——不管它是否在玩什么。在已创建的player对象上,在终端窗口中键入player并按enter键,它将显示主要属性是的,我猜了很多,但它在哪里?你还可以用它检查哪些东西?特定线程?我更新了答案-您甚至不必使用属性,但是是的-它没有明确说明文档中的属性是什么
 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.