Skip to content

Commit 83305a1

Browse files
committed
Add Link Audio Support To LinkHut
1 parent 2af5b84 commit 83305a1

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

LinkKit/LinkKitResources.bundle/en.lproj/Localizable.strings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
"EnableLinkAudioTitle" = "Share Audio";
1515
"EnableLinkAudioSubtitle" = "Share audio with Link peers";
1616

17+
"PeerNameTitle" = "Peer Name";
18+
"PeerNameSubtitle" = "Other Link peers see that name";
19+
1720
"ConnectedPeersSectionTitle" = "CONNECTED PEERS";
1821

1922
"PeersConnectedZero" = "No peers connected";

examples/LinkHut/LinkHut/AudioEngine.m

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <mach/mach_time.h>
77
#include "AudioEngine.h"
88
#include <os/lock.h>
9+
#include "ABLLinkUtils.h"
910

1011
#define INVALID_BEAT_TIME DBL_MIN
1112
#define INVALID_BPM DBL_MIN
@@ -30,6 +31,7 @@
3031
*/
3132
typedef struct {
3233
ABLLinkRef ablLink;
34+
ABLLinkAudioSinkRef ablLinkAudioSink;
3335
// Shared between threads. Only write when engine not running.
3436
Float64 sampleRate;
3537
// Shared between threads. Only write when engine not running.
@@ -221,6 +223,14 @@ static OSStatus audioCallback(
221223
(SInt16*)ioData->mBuffers[0].mData);
222224
}
223225

226+
ABLLinkCommitCoreAudioBufferWithHostTime(
227+
linkData->ablLinkAudioSink,
228+
sessionState,
229+
hostTimeAtBufferBegin,
230+
linkData->localEngineData.quantum,
231+
inNumberFrames,
232+
ioData);
233+
224234
return noErr;
225235
}
226236

@@ -266,6 +276,13 @@ - (ABLLinkRef)linkRef {
266276
return _linkData.ablLink;
267277
}
268278

279+
- (void)updateSinkAudioProperties {
280+
AudioStreamBasicDescription asbd;
281+
UInt32 dataSize = sizeof(asbd);
282+
AudioUnitGetProperty(_ioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &asbd, &dataSize);
283+
ABLLinkSetPropertiesFromASBD(_linkData.ablLinkAudioSink, &asbd);
284+
}
285+
269286
# pragma mark - Handle AVAudioSession changes
270287
- (void)handleRouteChange:(NSNotification *)notification {
271288
#pragma unused(notification)
@@ -306,6 +323,8 @@ static void StreamFormatCallback(
306323
[engine start];
307324
}
308325
}
326+
327+
[engine updateSinkAudioProperties];
309328
}
310329

311330
# pragma mark - create and delete engine
@@ -342,6 +361,7 @@ - (void)dealloc {
342361
[[NSNotificationCenter defaultCenter] removeObserver:self
343362
name:@"AVAudioSessionRouteChangeNotification"
344363
object:[AVAudioSession sharedInstance]];
364+
ABLLinkAudioSinkDelete(_linkData.ablLinkAudioSink);
345365
ABLLinkDelete(_linkData.ablLink);
346366
}
347367

@@ -379,6 +399,7 @@ - (void)initLinkData:(Float64)bpm {
379399
mach_timebase_info(&timeInfo);
380400

381401
_linkData.ablLink = ABLLinkNew(bpm);
402+
_linkData.ablLinkAudioSink = ABLLinkAudioSinkNew(_linkData.ablLink, "metro", 8192);
382403
_linkData.sampleRate = [AVAudioSession sharedInstance].sampleRate;
383404
_linkData.secondsToHostTime = (1.0e9 * timeInfo.denom) / (Float64)timeInfo.numer;
384405
_linkData.sharedEngineData.outputLatency =
@@ -458,6 +479,8 @@ - (void)setupAudioEngine {
458479
(int)result,
459480
(const char *)(&result));
460481

482+
[self updateSinkAudioProperties];
483+
461484
// Set Audio Callback
462485
AURenderCallbackStruct ioRemoteInput;
463486
ioRemoteInput.inputProc = audioCallback;

examples/LinkHut/LinkHut/Info.plist

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
<dict>
55
<key>ABLLinkStartStopSyncSupported</key>
66
<true/>
7+
<key>ABLLinkAudioSupported</key>
8+
<true/>
9+
<key>ABLLinkPeerName</key>
10+
<string>LinkHut</string>
711
<key>CFBundleLocalizations</key>
812
<array>
913
<string>en</string>

0 commit comments

Comments
 (0)