我希望使用Multipeer Connectivity框架,并感谢任何有关如何最好地进行的经验的声音.
我需要一个"教练"设备和多达45个"播放器"设备之间的连接.它们都将在同一个空间,但无法预测无线网络的可用性或连接.教练设备需要每秒向所有播放器设备发送指令(小数据包).每个"玩家"需要每秒将蓝牙心率监视器(非常小的数据包)的读数发送回教练.由于每个会话的最大同等数为8,这些想法中的任何一个都能满足我需要的数字吗?
a)与教练建立连接的前7个玩家设备通告不同的会话类型,并允许7个(或者这将是6?)更多玩家加入他们.那些前7名作为其他49名(或42名?)的中间人,通过传递教练的指示并将收集的读数传回给教练.指令和心率读数之间的几秒钟滞后不是首选,但可以.
b)教练设备创建并通告一个会话.在连接了7个播放器设备后,教练设备会创建另一个会话并重复7次.重复,直到所有玩家设备都连接到教练.这似乎不太可行,但如果不了解Multipeer Connectivity的魔力,它就会浮现在脑海中.
c)教练与玩家设备1建立会话,其连接到设备2 ...在菊花链地形中.当每个设备接收到指令时,它会将自己的读数添加到数据包并发送.最后一个设备将整个数据包返回给教练.我无法预测一轮数据需要多长时间,如果一台设备离开该组,它似乎也很麻烦.
任何有关使用45个左右设备的Multipeer Connection Framework的经验的建议或声音都将受到赞赏.
我想在启用Spotify的应用程序中从一个轨道交叉淡入淡出.这两个曲目都是Spotify曲目,因为一次只有一个数据流可以来自Spotify,我怀疑我需要缓冲(我想我可以提前读取1.5倍的播放速度)第一首曲目的最后几秒,启动流对于音轨2,淡出一个并使用AudioUnit淡入两个.
我查看了示例应用程序:Viva - https://github.com/iKenndac/Viva SimplePlayer with EQ - https://github.com/iKenndac/SimplePlayer-with-EQ并试图让我的思绪围绕SPCircularBuffer,但我还需要帮助.有人能指出我另一个例子或帮助指出一个轨道交叉淡入淡出游戏计划吗?
更新:感谢iKenndac,我在那里约占95%.我会发布到目前为止的内容:
在SPPlaybackManager.m中:initWithPlaybackSession:(SPSession*)aSession {
添加:
self.audioController2 = [[SPCoreAudioController alloc] init];
self.audioController2.delegate = self;
Run Code Online (Sandbox Code Playgroud)
并在
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
...
self.audioController.audioOutputEnabled = self.playbackSession.isPlaying;
// for crossfade, add
self.audioController2.audioOutputEnabled = self.playbackSession.isPlaying;
Run Code Online (Sandbox Code Playgroud)
并添加了一个基于playTrack的新方法
-(void)crossfadeTrack:(SPTrack *)aTrack callback:(SPErrorableOperationCallback)block {
// switch audiocontroller from current to other
if (self.playbackSession.audioDeliveryDelegate == self.audioController)
{
self.playbackSession.audioDeliveryDelegate = self.audioController2;
self.audioController2.delegate = self;
self.audioController.delegate = nil;
}
else
{
self.playbackSession.audioDeliveryDelegate = self.audioController;
self.audioController.delegate = self;
self.audioController2.delegate = …Run Code Online (Sandbox Code Playgroud)