Cog/Audio/Chain/Node.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

68 lines
1.3 KiB
Objective-C

//
// Node.h
// CogNew
//
// Created by Vincent Spader on 1/4/06.
// Copyright 2006 Vincent Spader. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "ChunkList.h"
#import "Semaphore.h"
#define BUFFER_SIZE 1024 * 1024
#define CHUNK_SIZE 16 * 1024
@interface Node : NSObject {
ChunkList *buffer;
Semaphore *semaphore;
NSRecursiveLock *accessLock;
id __weak previousNode;
id __weak controller;
BOOL shouldReset;
BOOL shouldContinue;
BOOL endOfStream; //All data is now in buffer
BOOL initialBufferFilled;
AudioStreamBasicDescription nodeFormat;
BOOL nodeLossless;
}
- (id)initWithController:(id)c previous:(id)p;
- (void)writeData:(const void *)ptr amount:(size_t)a;
- (AudioChunk *)readChunk:(size_t)maxFrames;
- (void)process; //Should be overwriten by subclass
- (void)threadEntry:(id)arg;
- (void)launchThread;
- (void)setShouldReset:(BOOL)s;
- (BOOL)shouldReset;
- (void)setPreviousNode:(id)p;
- (id)previousNode;
- (BOOL)shouldContinue;
- (void)setShouldContinue:(BOOL)s;
- (ChunkList *)buffer;
- (void)resetBuffer; //WARNING! DANGER WILL ROBINSON!
- (AudioStreamBasicDescription)nodeFormat;
- (BOOL)nodeLossless;
- (Semaphore *)semaphore;
//-(void)resetBuffer;
- (BOOL)endOfStream;
- (void)setEndOfStream:(BOOL)e;
- (double)secondsBuffered;
@end