Visualization now buffers in the audio output pipeline, and uses a container system to delay multiple buffer chains from emitting visualization data over top of each other. This should stabilize display output significantly, while introducing minimal lag before DSP configuration changes take effect. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
106 lines
2.3 KiB
Objective-C
106 lines
2.3 KiB
Objective-C
//
|
|
// BufferChain.h
|
|
// CogNew
|
|
//
|
|
// Created by Vincent Spader on 1/4/06.
|
|
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
//
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
|
|
#import "AudioPlayer.h"
|
|
#import "ConverterNode.h"
|
|
#import "DSPRubberbandNode.h"
|
|
#import "DSPFSurroundNode.h"
|
|
#import "DSPHRTFNode.h"
|
|
#import "DSPEqualizerNode.h"
|
|
#import "VisualizationNode.h"
|
|
#import "InputNode.h"
|
|
|
|
@interface BufferChain : NSObject {
|
|
InputNode *inputNode;
|
|
ConverterNode *converterNode;
|
|
DSPRubberbandNode *rubberbandNode;
|
|
DSPFSurroundNode *fsurroundNode;
|
|
DSPHRTFNode *hrtfNode;
|
|
DSPEqualizerNode *equalizerNode;
|
|
VisualizationNode *visualizationNode;
|
|
|
|
NSURL *streamURL;
|
|
id userInfo;
|
|
NSDictionary *rgInfo;
|
|
|
|
id finalNode; // Final buffer in the chain.
|
|
|
|
id controller;
|
|
}
|
|
|
|
- (id)initWithController:(id)c;
|
|
- (void)buildChain;
|
|
|
|
- (BOOL)open:(NSURL *)url withOutputFormat:(AudioStreamBasicDescription)outputFormat withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
|
|
|
// Used when changing tracks to reuse the same decoder
|
|
- (BOOL)openWithInput:(InputNode *)i withOutputFormat:(AudioStreamBasicDescription)outputFormat withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
|
|
|
// Used when resetting the decoder on seek
|
|
- (BOOL)openWithDecoder:(id<CogDecoder>)decoder
|
|
withOutputFormat:(AudioStreamBasicDescription)outputFormat
|
|
withUserInfo:(id)userInfo
|
|
withRGInfo:(NSDictionary *)rgi;
|
|
|
|
- (void)seek:(double)time;
|
|
|
|
- (void)launchThreads;
|
|
|
|
- (InputNode *)inputNode;
|
|
|
|
- (id)finalNode;
|
|
|
|
- (id)userInfo;
|
|
- (void)setUserInfo:(id)i;
|
|
|
|
- (NSDictionary *)rgInfo;
|
|
- (void)setRGInfo:(NSDictionary *)rgi;
|
|
|
|
- (NSURL *)streamURL;
|
|
- (void)setStreamURL:(NSURL *)url;
|
|
|
|
- (void)setShouldContinue:(BOOL)s;
|
|
|
|
- (void)initialBufferFilled:(id)sender;
|
|
|
|
- (BOOL)endOfInputReached;
|
|
- (BOOL)setTrack:(NSURL *)track;
|
|
|
|
- (BOOL)isRunning;
|
|
|
|
- (id)controller;
|
|
|
|
- (ConverterNode *)converter;
|
|
- (AudioStreamBasicDescription)inputFormat;
|
|
- (uint32_t)inputConfig;
|
|
|
|
- (DSPRubberbandNode *)rubberband;
|
|
|
|
- (DSPFSurroundNode *)fsurround;
|
|
|
|
- (DSPHRTFNode *)hrtf;
|
|
|
|
- (DSPEqualizerNode *)equalizer;
|
|
|
|
- (VisualizationNode *)visualization;
|
|
|
|
- (double)secondsBuffered;
|
|
|
|
- (void)sustainHDCD;
|
|
|
|
- (void)restartPlaybackAtCurrentPosition;
|
|
|
|
- (void)pushInfo:(NSDictionary *)info;
|
|
|
|
- (void)setError:(BOOL)status;
|
|
|
|
- (double)getPostVisLatency;
|
|
|
|
@end
|