@oletizi/audio-tools
Version:
Monorepo for hardware sampler utilities and format parsers
249 lines (194 loc) • 4.79 kB
Markdown
## API Reference
### Core Utilities (`lib-core.ts`)
#### Sequence Generation
```typescript
newSequence(base?: string): () => string
```
Creates a sequence generator with timestamp-based unique IDs.
```typescript
const seq = newSequence('sample');
console.log(seq()); // "sample-1234567890-0"
console.log(seq()); // "sample-1234567890-1"
```
#### MIDI Utilities
```typescript
parseNote(n: string): number
```
Parses MIDI note string to MIDI note number. Supports scientific pitch notation (C4, A#3, Bb2, etc.).
**Constants:**
- `C3` = 60 (Middle C)
- `C0` = 24
#### Binary Conversion
```typescript
bytes2numberLE(b: number[]): number
bytes2numberBE(b: number[]): number
byte2nibblesLE(byte: number): [number, number]
nibbles2byte(lowNibble: number, highNibble: number): number
```
#### Scaling Functions
```typescript
scale(value: number | string, xmin: number | string, xmax: number | string,
ymin: number | string, ymax: number | string): number
real2natural(value: number | string, min: number | string, max: number | string): number
natural2real(value: number | string, min: number | string, max: number | string): number
```
#### Result Types
```typescript
interface Result {
errors: any[]
data: any
}
interface ByteArrayResult extends Result {
data: number[]
}
interface NumberResult extends Result {
data: number
}
interface StringResult extends Result {
data: string
}
interface BooleanResult extends Result {
data: boolean
}
```
### Sample Processing (`model/sample.ts`)
#### Sample Interface
```typescript
interface Sample {
getMetadata(): SampleMetadata
getSampleCount(): number
getChannelCount(): number
getSampleRate(): number
getBitDepth(): number
setRootNote(r: number): void
trim(start: number, end: number): Sample
to16Bit(): Sample
to441(): Sample
cleanup(): Sample
write(buf: Buffer, offset: number): number
writeToStream(stream: WriteStream): Promise<number>
getSampleData(): Float64Array
getRawData(): Uint8Array
}
```
#### Sample Metadata
```typescript
interface SampleMetadata {
manufacturerId: number
productId: number
samplePeriod: number
rootNote: number
pitchFraction: number
smpteFormat: number
smpteOffset: number
loopCount: number
sampleLength: number
channelCount: number
bitDepth: number
sampleRate: number
}
```
### Akai Data Models (`model/akai.ts`)
#### Configuration
```typescript
interface AkaiToolsConfig {
diskFile: string
akaiToolsPath: string
piscsiHost?: string
scsiId?: number
}
```
#### Program Files
```typescript
interface AkaiProgramFile {
program: ProgramHeader
keygroups: KeygroupHeader[]
}
```
#### Disk Structures
```typescript
enum AkaiRecordType {
NULL = 'NULL',
PARTITION = 'S3000 PARTITION',
VOLUME = 'S3000 VOLUME',
PROGRAM = 'S3000 PROGRAM',
SAMPLE = 'S3000 SAMPLE'
}
interface AkaiRecord {
type: AkaiRecordType
name: string
block: number
size: number
}
interface AkaiVolume extends AkaiRecord {
records: AkaiRecord[]
}
interface AkaiPartition extends AkaiRecord {
volumes: AkaiVolume[]
}
interface AkaiDisk {
timestamp: number
name: string
partitions: AkaiPartition[]
}
```
#### Remote Disk Support
```typescript
interface RemoteDisk {
scsiId: number
lun?: number
image: string
}
```
### I/O Utilities (`lib-io.ts`)
#### Process Output
```typescript
interface ProcessOutput {
log(msg: string | Object): void
error(msg: string | Error | Object): void
write(data: string | Object): void
}
// Factory functions
newStreamOutput(outstream: Writeable, errstream: Writeable,
debug?: boolean, prefix?: string): ProcessOutput
newServerOutput(debug?: boolean, prefix?: string): ProcessOutput
newClientOutput(debug?: boolean, prefix?: string): ProcessOutput
```
#### File Operations
```typescript
objectFromFile(filename: string): Promise<Result>
```
### Configuration (`lib-config-server.ts`, `lib-config-client.ts`)
#### Server Configuration
```typescript
interface ServerConfig {
piscsiHost: string
s3kScsiId: number
akaiTools: string
akaiDisk: string
s3k: string
sourceRoot: string
targetRoot: string
sessionRoot: string
jobsRoot: string
logfile: string
getS3kDefaultProgramPath(keygroupCount: number): string
}
newServerConfig(dataDir?: string): Promise<ServerConfig>
```
#### Client Configuration
```typescript
interface ClientConfig {
midiInput: string
midiOutput: string
}
newClientConfig(): ClientConfig
loadClientConfig(dataDir?: string): Promise<ClientConfig>
saveClientConfig(cfg: ClientConfig, dataDir?: string): Promise<string>
```
#### File System Utilities
```typescript
import { mkdir } from '@oletizi/sampler-lib';
await mkdir('/path/to/directory'); // Creates directory if it doesn't exist
```
## Configuration