Sample format can now change dynamically at play time, and the player will resample it as necessary, extrapolating edges between changes to reduce the potential for gaps. Currently supported formats for this: - FLAC - Ogg Vorbis - Any format supported by FFmpeg, such as MP3 or AAC Signed-off-by: Christopher Snowhill <kode54@gmail.com>
72 lines
1.5 KiB
Objective-C
72 lines
1.5 KiB
Objective-C
//
|
|
// Node.h
|
|
// CogNew
|
|
//
|
|
// Created by Vincent Spader on 1/4/06.
|
|
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
//
|
|
|
|
#import "ChunkList.h"
|
|
#import "Semaphore.h"
|
|
#import <Cocoa/Cocoa.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;
|
|
uint32_t nodeChannelConfig;
|
|
BOOL nodeLossless;
|
|
}
|
|
- (id _Nullable)initWithController:(id _Nonnull)c previous:(id _Nullable)p;
|
|
|
|
- (void)writeData:(const void *_Nonnull)ptr amount:(size_t)a;
|
|
- (AudioChunk *_Nonnull)readChunk:(size_t)maxFrames;
|
|
|
|
- (BOOL)peekFormat:(AudioStreamBasicDescription *_Nonnull)format channelConfig:(uint32_t *_Nonnull)config;
|
|
|
|
- (void)process; // Should be overwriten by subclass
|
|
- (void)threadEntry:(id _Nullable)arg;
|
|
|
|
- (void)launchThread;
|
|
|
|
- (void)setShouldReset:(BOOL)s;
|
|
- (BOOL)shouldReset;
|
|
|
|
- (void)setPreviousNode:(id _Nullable)p;
|
|
- (id _Nullable)previousNode;
|
|
|
|
- (BOOL)shouldContinue;
|
|
- (void)setShouldContinue:(BOOL)s;
|
|
|
|
- (ChunkList *_Nonnull)buffer;
|
|
- (void)resetBuffer; // WARNING! DANGER WILL ROBINSON!
|
|
|
|
- (AudioStreamBasicDescription)nodeFormat;
|
|
- (uint32_t)nodeChannelConfig;
|
|
- (BOOL)nodeLossless;
|
|
|
|
- (Semaphore *_Nonnull)semaphore;
|
|
|
|
//-(void)resetBuffer;
|
|
|
|
- (BOOL)endOfStream;
|
|
- (void)setEndOfStream:(BOOL)e;
|
|
|
|
- (double)secondsBuffered;
|
|
|
|
@end
|