Cog/Audio/Output/OutputCoreAudio.h
Christopher Snowhill 62edb39761 Cog Audio: Major rewrite of audio buffering
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>
2022-02-06 03:08:34 -08:00

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