cacophony 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ import { IAudioContext } from "standardized-audio-context";
2
+ export declare class CacheManager {
3
+ private static pendingRequests;
4
+ private static openCache;
5
+ private static getAudioBufferFromCache;
6
+ private static fetchAndCacheAudioBuffer;
7
+ static getAudioBuffer(url: string, context: IAudioContext): Promise<AudioBuffer>;
8
+ }
9
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,eAAe,CAA2C;mBAEpD,SAAS;mBAST,uBAAuB;mBAcvB,wBAAwB;WAazB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;CAqBhG"}
package/dist/cache.js ADDED
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheManager = void 0;
13
+ class CacheManager {
14
+ static openCache() {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ try {
17
+ return yield caches.open('audio-cache');
18
+ }
19
+ catch (error) {
20
+ console.error('Failed to open cache:', error);
21
+ throw error;
22
+ }
23
+ });
24
+ }
25
+ static getAudioBufferFromCache(url, cache, context) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ try {
28
+ const response = yield cache.match(url);
29
+ if (response) {
30
+ const arrayBuffer = yield response.arrayBuffer();
31
+ return context.decodeAudioData(arrayBuffer);
32
+ }
33
+ return null;
34
+ }
35
+ catch (error) {
36
+ console.error('Failed to get audio data from cache:', error);
37
+ throw error;
38
+ }
39
+ });
40
+ }
41
+ static fetchAndCacheAudioBuffer(url, cache, context) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ try {
44
+ const fetchResponse = yield fetch(url);
45
+ const responseClone = fetchResponse.clone();
46
+ cache.put(url, responseClone);
47
+ const arrayBuffer = yield fetchResponse.arrayBuffer();
48
+ return context.decodeAudioData(arrayBuffer);
49
+ }
50
+ catch (error) {
51
+ console.error('Failed to fetch and cache audio data:', error);
52
+ throw error;
53
+ }
54
+ });
55
+ }
56
+ static getAudioBuffer(url, context) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ const cache = yield this.openCache();
59
+ // First, check if there's a pending request.
60
+ let pendingRequest = this.pendingRequests.get(url);
61
+ if (pendingRequest) {
62
+ return pendingRequest;
63
+ }
64
+ // Try getting the buffer from cache.
65
+ const bufferFromCache = yield this.getAudioBufferFromCache(url, cache, context);
66
+ if (bufferFromCache) {
67
+ return bufferFromCache;
68
+ }
69
+ // If it's not in the cache, fetch and cache it.
70
+ pendingRequest = this.fetchAndCacheAudioBuffer(url, cache, context);
71
+ this.pendingRequests.set(url, pendingRequest);
72
+ return pendingRequest;
73
+ });
74
+ }
75
+ }
76
+ exports.CacheManager = CacheManager;
77
+ CacheManager.pendingRequests = new Map();
78
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAa,YAAY;IAGb,MAAM,CAAO,SAAS;;YAC1B,IAAI;gBACA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC3C;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC9C,MAAM,KAAK,CAAC;aACf;QACL,CAAC;KAAA;IAEO,MAAM,CAAO,uBAAuB,CAAC,GAAW,EAAE,KAAY,EAAE,OAAsB;;YAC1F,IAAI;gBACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,QAAQ,EAAE;oBACV,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACjD,OAAO,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;iBAC/C;gBACD,OAAO,IAAI,CAAC;aACf;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;gBAC7D,MAAM,KAAK,CAAC;aACf;QACL,CAAC;KAAA;IAEO,MAAM,CAAO,wBAAwB,CAAC,GAAW,EAAE,KAAY,EAAE,OAAsB;;YAC3F,IAAI;gBACA,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC5C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;gBACtD,OAAO,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC/C;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;gBAC9D,MAAM,KAAK,CAAC;aACf;QACL,CAAC;KAAA;IAEM,MAAM,CAAO,cAAc,CAAC,GAAW,EAAE,OAAsB;;YAClE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAErC,6CAA6C;YAC7C,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,cAAc,EAAE;gBAChB,OAAO,cAAc,CAAC;aACzB;YAED,qCAAqC;YACrC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAChF,IAAI,eAAe,EAAE;gBACjB,OAAO,eAAe,CAAC;aAC1B;YAED,gDAAgD;YAChD,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAE9C,OAAO,cAAc,CAAC;QAC1B,CAAC;KAAA;;AA3DL,oCA4DC;AA3DkB,4BAAe,GAAG,IAAI,GAAG,EAAgC,CAAC"}
@@ -0,0 +1,166 @@
1
+ import { AudioContext, IAudioBuffer, IAudioBufferSourceNode, IAudioListener, IBiquadFilterNode, IGainNode, IMediaStreamAudioSourceNode, IPannerOptions } from 'standardized-audio-context';
2
+ type GainNode = IGainNode<AudioContext>;
3
+ type BiquadFilterNode = IBiquadFilterNode<AudioContext>;
4
+ type AudioBufferSourceNode = IAudioBufferSourceNode<AudioContext>;
5
+ type MediaStreamAudioSourceNode = IMediaStreamAudioSourceNode<AudioContext>;
6
+ export type Position = [number, number, number];
7
+ export type LoopCount = number | 'infinite';
8
+ export type FadeType = 'linear' | 'exponential';
9
+ export interface BaseSound {
10
+ play(): BaseSound[];
11
+ seek?(time: number): void;
12
+ stop(): void;
13
+ pause(): void;
14
+ resume(): void;
15
+ addFilter(filter: BiquadFilterNode): void;
16
+ removeFilter(filter: BiquadFilterNode): void;
17
+ volume: number;
18
+ position: Position;
19
+ loop?(loopCount?: LoopCount): LoopCount;
20
+ threeDOptions?: IPannerOptions;
21
+ }
22
+ export declare class Cacophony {
23
+ context: AudioContext;
24
+ globalGainNode: GainNode;
25
+ listener: IAudioListener;
26
+ private prevVolume;
27
+ constructor(context?: AudioContext);
28
+ createSound(buffer: AudioBuffer): Promise<Sound>;
29
+ createSound(url: string): Promise<Sound>;
30
+ createGroup(sounds: Sound[]): Promise<Group>;
31
+ createGroupFromUrls(urls: string[]): Promise<Group>;
32
+ createBiquadFilter(type: BiquadFilterType): BiquadFilterNode;
33
+ pause(): void;
34
+ resume(): void;
35
+ stopAll(): void;
36
+ setGlobalVolume(volume: number): void;
37
+ get volume(): number;
38
+ set volume(volume: number);
39
+ mute(): void;
40
+ unmute(): void;
41
+ getMicrophoneStream(): Promise<MicrophoneStream>;
42
+ }
43
+ declare class FilterManager {
44
+ protected filters: BiquadFilterNode[];
45
+ addFilter(filter: BiquadFilterNode): void;
46
+ removeFilter(filter: BiquadFilterNode): void;
47
+ applyFilters(connection: any): any;
48
+ }
49
+ export declare class Sound extends FilterManager implements BaseSound {
50
+ buffer: IAudioBuffer;
51
+ context: AudioContext;
52
+ playbacks: Playback[];
53
+ private globalGainNode;
54
+ private _position;
55
+ loopCount: LoopCount;
56
+ constructor(buffer: AudioBuffer, context: AudioContext, globalGainNode: IGainNode<AudioContext>);
57
+ preplay(): Playback[];
58
+ play(): Playback[];
59
+ stop(): void;
60
+ pause(): void;
61
+ resume(): void;
62
+ seek(time: number): void;
63
+ set position(position: Position);
64
+ get position(): Position;
65
+ loop(loopCount?: LoopCount): LoopCount;
66
+ addFilter(filter: BiquadFilterNode): void;
67
+ removeFilter(filter: BiquadFilterNode): void;
68
+ get volume(): number;
69
+ set volume(volume: number);
70
+ isPlaying(): boolean;
71
+ }
72
+ declare class Playback extends FilterManager implements BaseSound {
73
+ private context;
74
+ private source?;
75
+ private gainNode?;
76
+ private panner?;
77
+ loopCount: LoopCount;
78
+ currentLoop: number;
79
+ private buffer;
80
+ constructor(source: AudioBufferSourceNode, gainNode: GainNode, context: AudioContext, loopCount?: LoopCount);
81
+ handleLoop(): void;
82
+ play(): this[];
83
+ get threeDOptions(): IPannerOptions;
84
+ set threeDOptions(options: Partial<IPannerOptions>);
85
+ seek(time: number): void;
86
+ get volume(): number;
87
+ set volume(v: number);
88
+ set sourceLoop(loop: boolean);
89
+ fadeIn(time: number, fadeType?: FadeType): Promise<void>;
90
+ fadeOut(time: number, fadeType?: FadeType): Promise<void>;
91
+ isPlaying(): boolean;
92
+ cleanup(): void;
93
+ loop(loopCount?: LoopCount): LoopCount;
94
+ stop(): void;
95
+ pause(): void;
96
+ resume(): void;
97
+ addFilter(filter: BiquadFilterNode): void;
98
+ removeFilter(filter: BiquadFilterNode): void;
99
+ set position(position: Position);
100
+ get position(): Position;
101
+ private refreshFilters;
102
+ }
103
+ export declare class Group implements BaseSound {
104
+ sounds: Sound[];
105
+ private _position;
106
+ loopCount: LoopCount;
107
+ seek(time: number): void;
108
+ addSound(sound: Sound): void;
109
+ preplay(): Playback[];
110
+ play(): Playback[];
111
+ stop(): void;
112
+ pause(): void;
113
+ resume(): void;
114
+ loop(loopCount?: LoopCount): LoopCount;
115
+ addFilter(filter: BiquadFilterNode): void;
116
+ removeFilter(filter: BiquadFilterNode): void;
117
+ set position(position: [number, number, number]);
118
+ get position(): [number, number, number];
119
+ get volume(): number;
120
+ set volume(volume: number);
121
+ }
122
+ export declare class StreamPlayback extends FilterManager implements BaseSound {
123
+ private context;
124
+ private source?;
125
+ private gainNode?;
126
+ private panner?;
127
+ loopCount: LoopCount;
128
+ currentLoop: number;
129
+ constructor(source: MediaStreamAudioSourceNode, gainNode: GainNode, context: AudioContext, loopCount?: LoopCount);
130
+ play(): this[];
131
+ get volume(): number;
132
+ set volume(v: number);
133
+ stop(): void;
134
+ pause(): void;
135
+ resume(): void;
136
+ addFilter(filter: BiquadFilterNode): void;
137
+ removeFilter(filter: BiquadFilterNode): void;
138
+ set position(position: Position);
139
+ get position(): Position;
140
+ private refreshFilters;
141
+ }
142
+ export declare class MicrophoneStream extends FilterManager implements BaseSound {
143
+ context: AudioContext;
144
+ private _position;
145
+ loopCount: LoopCount;
146
+ private prevVolume;
147
+ private microphoneGainNode;
148
+ private streamPlayback?;
149
+ private stream;
150
+ private streamSource?;
151
+ constructor(context: AudioContext);
152
+ play(): StreamPlayback[];
153
+ seek(time: number): void;
154
+ stop(): void;
155
+ pause(): void;
156
+ resume(): void;
157
+ addFilter(filter: BiquadFilterNode): void;
158
+ removeFilter(filter: BiquadFilterNode): void;
159
+ get volume(): number;
160
+ set volume(volume: number);
161
+ get position(): Position;
162
+ set position(position: Position);
163
+ loop(loopCount?: LoopCount): LoopCount;
164
+ }
165
+ export {};
166
+ //# sourceMappingURL=cacophony.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacophony.d.ts","sourceRoot":"","sources":["../src/cacophony.ts"],"names":[],"mappings":"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"}