Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保证进程在iOS中准确启动_Ios_C_Core Audio - Fatal编程技术网

如何保证进程在iOS中准确启动

如何保证进程在iOS中准确启动,ios,c,core-audio,Ios,C,Core Audio,我们以时间间隔(bpm)播放节拍器音频文件,同时录制音频文件。然而,目前两个线程的开始时间并不完全同时,并且存在轻微的时间差,这对于音乐来说是不允许的 我们可以使用什么策略来保证两个进程在完全相同的时间(或几毫秒以下)启动 谢谢 我可以想出三种方法来完成这项工作(但显然我从未测试过它们) 您的每个线程都应该提前完成它们所能完成的所有初始化,然后等待一个“事件”。我能想到的几个时间事件: 使用通知-两个线程都侦听一些“启动”通知。这应该相当快 让两个线程都执行keyValue侦听-因此它们都在侦

我们以时间间隔(bpm)播放节拍器音频文件,同时录制音频文件。然而,目前两个线程的开始时间并不完全同时,并且存在轻微的时间差,这对于音乐来说是不允许的

我们可以使用什么策略来保证两个进程在完全相同的时间(或几毫秒以下)启动


谢谢

我可以想出三种方法来完成这项工作(但显然我从未测试过它们)

您的每个线程都应该提前完成它们所能完成的所有初始化,然后等待一个“事件”。我能想到的几个时间事件:

  • 使用通知-两个线程都侦听一些“启动”通知。这应该相当快

  • 让两个线程都执行keyValue侦听-因此它们都在侦听对已知对象(如appDelegate(或singleton))或它们都知道的任何对象(delegate?)上的某些属性的更改

  • 初始化完成后,让每个调用都有一个委托。当两个都“就绪”时,代理可以一个接一个地(在主线程上)发送消息到“开始”


你也可以用NSLock和friends进行实验——不确定你会得到什么样的延迟。Key Value Observing非常快速和轻量级,适用于任何线程。

我可以想出三种方法来实现这一点(但显然我从未测试过它们)

您的每个线程都应该提前完成它们所能完成的所有初始化,然后等待一个“事件”。我能想到的几个时间事件:

  • 使用通知-两个线程都侦听一些“启动”通知。这应该相当快

  • 让两个线程都执行keyValue侦听-因此它们都在侦听对已知对象(如appDelegate(或singleton))或它们都知道的任何对象(delegate?)上的某些属性的更改

  • 初始化完成后,让每个调用都有一个委托。当两个都“就绪”时,代理可以一个接一个地(在主线程上)发送消息到“开始”


你也可以用NSLock和friends进行实验——不确定你会得到什么样的延迟。Key Value Observing非常快速和轻量级,可以在任何线程上工作。

实现这一点的最准确和可靠的方法是在CoreAudio音频渲染/输入处理程序中实现音频录制和节拍器播放,而不是使用更高级别的API和依靠同步两个线程。@davidh答案中的任何机制都不能保证内核执行线程,尽管它们可能大部分时间都可以在负载较轻的系统上工作

回调是在管理CoreAudio的实时线程上调用的,并与硬件音频时钟同步,硬件音频时钟可能与内核的计时器异步


您需要将metronome示例加载到内存中,并在初始化时转换为输出格式-可能使用AudioToolbox API之一。音频渲染回调只是在适当的时间将其复制到输出缓冲区。

实现这一点的最准确和可靠的方法是在CoreAudio音频渲染/输入处理程序中实现音频录制和节拍器播放,而不是使用更高级别的API和依靠同步两个线程。@davidh答案中的任何机制都不能保证内核执行线程,尽管它们可能大部分时间都可以在负载较轻的系统上工作

回调是在管理CoreAudio的实时线程上调用的,并与硬件音频时钟同步,硬件音频时钟可能与内核的计时器异步


您需要将metronome示例加载到内存中,并在初始化时转换为输出格式-可能使用AudioToolbox API之一。音频渲染回调只是在适当的时间将其复制到输出缓冲区。

在iOS下,您不能启动新进程(除非它在越狱环境中)。@EricPostpischil您不能在iOS中分叉进程。但是,您可以创建新线程。OP在这里合并了
进程
线程
@埃里克:真的吗?iOS允许您使用
fork
?我不这么认为。@rmaddy:啊,是的,好吧,iOS允许我使用
fork
,但你不允许。很抱歉。但是,OP创建了两个线程,只想同步它们。因此,“进程”显然是用在英语意义上的,而不是操作系统意义上的。OP询问的是如何同步两件事,而不是如何创建一个新进程。@EricPostpischil是的,谢谢,我们使用的是两件事。在iOS下,您不能启动新进程(除非它处于越狱环境)。@EricPostpischil您不能
fork
iOS中的进程。但是,您可以创建新线程。OP在这里合并了
进程
线程
@埃里克:真的吗?iOS允许您使用
fork
?我不这么认为。@rmaddy:啊,是的,好吧,iOS允许我使用
fork
,但你不允许。很抱歉。但是,OP创建了两个线程,只想同步它们。因此,“进程”显然是用在英语意义上的,而不是操作系统意义上的。OP询问的是如何同步两件事,而不是如何创建一个新流程。@EricPostFischil是的,谢谢,我们使用的是两件事。谢谢,我们将进一步研究。谢谢,我们将进一步研究。