Skip to content

Commit 5ff3990

Browse files
committed
Monorepoize
1 parent a124177 commit 5ff3990

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+6421
-56
lines changed

.npmignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
packages/
2+
fixtures/
3+
test.js
4+
test.browser.js
5+
.work/

package-lock.json

Lines changed: 77 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
},
1414
"./package.json": "./package.json"
1515
},
16+
"workspaces": [
17+
"packages/*"
18+
],
1619
"dependencies": {
1720
"@audio/aac-decode": "^1.0.2",
1821
"@audio/aiff-decode": "^1.0.0",

packages/aac-decode/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules/
2+
lib/faad2/
3+
src/aac.wasm.cjs
4+
/.claude

packages/aac-decode/LICENSE

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
This work is offered to Krishna (https://github.com/krishnized/license).
2+
3+
---
4+
5+
This package is licensed under the GNU General Public License v2.0 (GPL-2.0),
6+
as required by the included FAAD2 library.
7+
8+
FAAD2 Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
9+
Full GPL-2.0 text: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

packages/aac-decode/README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# aac-decode
2+
3+
Decode AAC/M4A audio to PCM float samples. FAAD2 compiled to WASM — works in Node.js and browsers, no native dependencies.
4+
5+
## Install
6+
7+
```
8+
npm i @audio/aac-decode
9+
```
10+
11+
## Usage
12+
13+
```js
14+
import decode from '@audio/aac-decode'
15+
16+
// M4A or raw ADTS — auto-detected
17+
let { channelData, sampleRate } = await decode(uint8array)
18+
// channelData: Float32Array[] (one per channel)
19+
// sampleRate: number
20+
```
21+
22+
### Streaming
23+
24+
```js
25+
import { decoder } from '@audio/aac-decode'
26+
27+
let dec = await decoder()
28+
let { channelData, sampleRate } = dec.decode(chunk)
29+
dec.free()
30+
```
31+
32+
## API
33+
34+
### `decode(src: Uint8Array | ArrayBuffer): Promise<AudioData>`
35+
36+
Whole-file decode. Auto-detects M4A (MP4 container) vs raw ADTS.
37+
38+
### `decoder(): Promise<AACDecoder>`
39+
40+
Creates a decoder instance for manual control.
41+
42+
- **`dec.decode(data)`** — decode chunk, returns `{ channelData, sampleRate }`
43+
- **`dec.flush()`** — flush remaining (returns empty for AAC)
44+
- **`dec.free()`** — release WASM memory
45+
46+
### `AudioData`
47+
48+
```ts
49+
{ channelData: Float32Array[], sampleRate: number }
50+
```
51+
52+
## Formats
53+
54+
- M4A / MP4 with AAC audio
55+
- Raw ADTS streams (.aac)
56+
- LC, HE-AAC v1/v2 (SBR, PS)
57+
58+
## License
59+
60+
GPL-2.0 (FAAD2) — [krishnized](https://github.com/krishnized/license)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
interface AudioData {
2+
channelData: Float32Array[];
3+
sampleRate: number;
4+
}
5+
6+
interface AACDecoder {
7+
decode(data: Uint8Array): AudioData;
8+
flush(): AudioData;
9+
free(): void;
10+
}
11+
12+
/** Whole-file decode — auto-detects M4A vs ADTS */
13+
export default function decode(src: ArrayBuffer | Uint8Array): Promise<AudioData>;
14+
15+
/** Create streaming decoder instance */
16+
export function decoder(): Promise<AACDecoder>;

0 commit comments

Comments
 (0)