commit
86a870d0d1
|
|
@ -239,6 +239,12 @@ typedef void(^STKFrameFilter)(UInt32 channelsPerFrame, UInt32 bytesPerFrame, UIn
|
||||||
/// Disposes the STKAudioPlayer and frees up all resources before returning
|
/// Disposes the STKAudioPlayer and frees up all resources before returning
|
||||||
-(void) dispose;
|
-(void) dispose;
|
||||||
|
|
||||||
|
/// Sets playback speed
|
||||||
|
-(void)setPlaybackSpeed:(double)speed;
|
||||||
|
|
||||||
|
/// Sets playback speed to 1.0
|
||||||
|
-(void)setDefaultPlaybackSpeed;
|
||||||
|
|
||||||
/// The QueueItemId of the currently playing item
|
/// The QueueItemId of the currently playing item
|
||||||
-(NSObject*) currentlyPlayingQueueItemId;
|
-(NSObject*) currentlyPlayingQueueItemId;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,7 @@ static UInt32 maxFramesPerSlice = 4096;
|
||||||
static AudioComponentDescription mixerDescription;
|
static AudioComponentDescription mixerDescription;
|
||||||
static AudioComponentDescription nbandUnitDescription;
|
static AudioComponentDescription nbandUnitDescription;
|
||||||
static AudioComponentDescription outputUnitDescription;
|
static AudioComponentDescription outputUnitDescription;
|
||||||
|
static AudioComponentDescription playbackSpeedUnitDescription;
|
||||||
static AudioComponentDescription convertUnitDescription;
|
static AudioComponentDescription convertUnitDescription;
|
||||||
static AudioStreamBasicDescription canonicalAudioStreamBasicDescription;
|
static AudioStreamBasicDescription canonicalAudioStreamBasicDescription;
|
||||||
static AudioStreamBasicDescription recordAudioStreamBasicDescription;
|
static AudioStreamBasicDescription recordAudioStreamBasicDescription;
|
||||||
|
|
@ -201,6 +202,7 @@ static AudioStreamBasicDescription recordAudioStreamBasicDescription;
|
||||||
AUNode eqNode;
|
AUNode eqNode;
|
||||||
AUNode mixerNode;
|
AUNode mixerNode;
|
||||||
AUNode outputNode;
|
AUNode outputNode;
|
||||||
|
AUNode playbackSpeedNode;
|
||||||
|
|
||||||
AUNode eqInputNode;
|
AUNode eqInputNode;
|
||||||
AUNode eqOutputNode;
|
AUNode eqOutputNode;
|
||||||
|
|
@ -210,6 +212,7 @@ static AudioStreamBasicDescription recordAudioStreamBasicDescription;
|
||||||
AudioComponentInstance eqUnit;
|
AudioComponentInstance eqUnit;
|
||||||
AudioComponentInstance mixerUnit;
|
AudioComponentInstance mixerUnit;
|
||||||
AudioComponentInstance outputUnit;
|
AudioComponentInstance outputUnit;
|
||||||
|
AudioComponentInstance playbackSpeedUnit;
|
||||||
|
|
||||||
UInt32 eqBandCount;
|
UInt32 eqBandCount;
|
||||||
int32_t waitingForDataAfterSeekFrameCount;
|
int32_t waitingForDataAfterSeekFrameCount;
|
||||||
|
|
@ -339,6 +342,15 @@ static void AudioFileStreamPacketsProc(void* clientData, UInt32 numberBytes, UIn
|
||||||
.componentFlagsMask = 0,
|
.componentFlagsMask = 0,
|
||||||
.componentManufacturer = kAudioUnitManufacturer_Apple
|
.componentManufacturer = kAudioUnitManufacturer_Apple
|
||||||
};
|
};
|
||||||
|
|
||||||
|
playbackSpeedUnitDescription = (AudioComponentDescription)
|
||||||
|
{
|
||||||
|
.componentType = kAudioUnitType_FormatConverter,
|
||||||
|
.componentSubType = kAudioUnitSubType_AUiPodTimeOther,
|
||||||
|
.componentFlags = 0,
|
||||||
|
.componentFlagsMask = 0,
|
||||||
|
.componentManufacturer = kAudioUnitManufacturer_Apple
|
||||||
|
};
|
||||||
|
|
||||||
mixerDescription = (AudioComponentDescription)
|
mixerDescription = (AudioComponentDescription)
|
||||||
{
|
{
|
||||||
|
|
@ -1866,6 +1878,16 @@ static void AudioFileStreamPacketsProc(void* clientData, UInt32 numberBytes, UIn
|
||||||
[self stopThread];
|
[self stopThread];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)setPlaybackSpeed:(double)speed
|
||||||
|
{
|
||||||
|
AudioUnitSetParameter(playbackSpeedUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, speed, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setDefaultPlaybackSpeed
|
||||||
|
{
|
||||||
|
[self setPlaybackSpeed:1.f];
|
||||||
|
}
|
||||||
|
|
||||||
-(NSObject*) currentlyPlayingQueueItemId
|
-(NSObject*) currentlyPlayingQueueItemId
|
||||||
{
|
{
|
||||||
OSSpinLockLock(¤tEntryReferencesLock);
|
OSSpinLockLock(¤tEntryReferencesLock);
|
||||||
|
|
@ -2126,6 +2148,21 @@ static BOOL GetHardwareCodecClassDesc(UInt32 formatId, AudioClassDescription* cl
|
||||||
CHECK_STATUS_AND_RETURN(AudioUnitSetProperty(outputUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &canonicalAudioStreamBasicDescription, sizeof(canonicalAudioStreamBasicDescription)));
|
CHECK_STATUS_AND_RETURN(AudioUnitSetProperty(outputUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &canonicalAudioStreamBasicDescription, sizeof(canonicalAudioStreamBasicDescription)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void) createPlaybackSpeedUnit
|
||||||
|
{
|
||||||
|
OSStatus status;
|
||||||
|
|
||||||
|
CHECK_STATUS_AND_RETURN(AUGraphAddNode(audioGraph, &playbackSpeedUnitDescription, &playbackSpeedNode));
|
||||||
|
CHECK_STATUS_AND_RETURN(AUGraphNodeInfo(audioGraph, playbackSpeedNode, &playbackSpeedUnitDescription, &playbackSpeedUnit));
|
||||||
|
|
||||||
|
CHECK_STATUS_AND_RETURN(AudioUnitSetProperty(playbackSpeedUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, kOutputBus, &maxFramesPerSlice, sizeof(maxFramesPerSlice)));
|
||||||
|
#if TARGET_OS_IPHONE
|
||||||
|
CHECK_STATUS_AND_RETURN(AudioUnitSetParameter(playbackSpeedUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, 1, 0));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CHECK_STATUS_AND_RETURN(AudioUnitSetProperty(playbackSpeedUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &canonicalAudioStreamBasicDescription, sizeof(canonicalAudioStreamBasicDescription)));
|
||||||
|
}
|
||||||
|
|
||||||
-(void) createMixerUnit
|
-(void) createMixerUnit
|
||||||
{
|
{
|
||||||
OSStatus status;
|
OSStatus status;
|
||||||
|
|
@ -2284,6 +2321,7 @@ static BOOL GetHardwareCodecClassDesc(UInt32 formatId, AudioClassDescription* cl
|
||||||
|
|
||||||
[self createEqUnit];
|
[self createEqUnit];
|
||||||
[self createMixerUnit];
|
[self createMixerUnit];
|
||||||
|
[self createPlaybackSpeedUnit];
|
||||||
[self createOutputUnit];
|
[self createOutputUnit];
|
||||||
|
|
||||||
[self connectGraph];
|
[self connectGraph];
|
||||||
|
|
@ -2332,6 +2370,12 @@ static BOOL GetHardwareCodecClassDesc(UInt32 formatId, AudioClassDescription* cl
|
||||||
[nodes addObject:@(mixerNode)];
|
[nodes addObject:@(mixerNode)];
|
||||||
[units addObject:[NSValue valueWithPointer:mixerUnit]];
|
[units addObject:[NSValue valueWithPointer:mixerUnit]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (playbackSpeedNode)
|
||||||
|
{
|
||||||
|
[nodes addObject:@(playbackSpeedNode)];
|
||||||
|
[units addObject:[NSValue valueWithPointer:playbackSpeedUnit]];
|
||||||
|
}
|
||||||
|
|
||||||
if (outputNode)
|
if (outputNode)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue