Rewrite attempt number two. Now using array lists of audio chunks, with each chunk having its format and optionally losslessness stashed along with it. This replaces the old virtual ring buffer method. As a result of this, the HRIR toggle now works instantaneously. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
91 lines
1.7 KiB
Objective-C
91 lines
1.7 KiB
Objective-C
//
|
|
// OutputCoreAudio.h
|
|
// Cog
|
|
//
|
|
// Created by Vincent Spader on 8/2/05.
|
|
// Copyright 2005 Vincent Spader. All rights reserved.
|
|
//
|
|
|
|
#import <AssertMacros.h>
|
|
#import <Cocoa/Cocoa.h>
|
|
|
|
#import <CoreAudio/AudioHardware.h>
|
|
#import <AudioToolbox/AudioToolbox.h>
|
|
#import <AudioUnit/AudioUnit.h>
|
|
#import <AVFoundation/AVFoundation.h>
|
|
#import <CoreAudio/CoreAudioTypes.h>
|
|
|
|
#import <stdatomic.h>
|
|
|
|
#import "Downmix.h"
|
|
|
|
#import "Semaphore.h"
|
|
|
|
//#define OUTPUT_LOG
|
|
#ifdef OUTPUT_LOG
|
|
#import <stdio.h>
|
|
#endif
|
|
|
|
@class OutputNode;
|
|
|
|
@interface OutputCoreAudio : NSObject {
|
|
OutputNode * outputController;
|
|
|
|
Semaphore * writeSemaphore;
|
|
Semaphore * readSemaphore;
|
|
|
|
BOOL stopInvoked;
|
|
BOOL running;
|
|
BOOL stopping;
|
|
BOOL stopped;
|
|
BOOL started;
|
|
BOOL paused;
|
|
BOOL stopNext;
|
|
|
|
BOOL eqEnabled;
|
|
|
|
BOOL streamFormatStarted;
|
|
|
|
atomic_long bytesRendered;
|
|
atomic_long bytesHdcdSustained;
|
|
|
|
BOOL listenerapplied;
|
|
BOOL observersapplied;
|
|
|
|
float volume;
|
|
|
|
AVAudioFormat *_deviceFormat;
|
|
|
|
AudioDeviceID outputDeviceID;
|
|
AudioStreamBasicDescription deviceFormat; // info about the default device
|
|
AudioStreamBasicDescription streamFormat; // stream format last seen in render callback
|
|
|
|
AUAudioUnit *_au;
|
|
size_t _bufferSize;
|
|
|
|
AudioUnit _eq;
|
|
|
|
DownmixProcessor * downmixer;
|
|
|
|
#ifdef OUTPUT_LOG
|
|
FILE *_logFile;
|
|
#endif
|
|
}
|
|
|
|
- (id)initWithController:(OutputNode *)c;
|
|
|
|
- (BOOL)setup;
|
|
- (OSStatus)setOutputDeviceByID:(AudioDeviceID)deviceID;
|
|
- (BOOL)setOutputDeviceWithDeviceDict:(NSDictionary *)deviceDict;
|
|
- (void)start;
|
|
- (void)pause;
|
|
- (void)resume;
|
|
- (void)stop;
|
|
|
|
- (void)setVolume:(double) v;
|
|
|
|
- (void)setEqualizerEnabled:(BOOL)enabled;
|
|
|
|
- (void)sustainHDCD;
|
|
|
|
@end
|