UNPKG

@oletizi/audio-tools

Version:

Monorepo for hardware sampler utilities and format parsers

120 lines (90 loc) 3.4 kB
## Examples ### Example 1: Backup All Programs ```typescript import {newAkaitools} from '@oletizi/sampler-devices/s3k'; async function backupAllPrograms(diskPath: string, outputDir: string) { const tools = newAkaitools({diskPath, verbose: true}); const disk = await tools.readAkaiDisk(); for (const program of disk.programs) { const filename = `${program.header.PRNAME}.akp`; await tools.akaiRead( filename, // Source: program on disk `${outputDir}/${filename}`, // Target: local file 1, // Partition false // Not recursive ); console.log(`Backed up: ${filename}`); } } await backupAllPrograms('/dev/disk4', './backup'); ``` ### Example 2: Convert WAV to Akai Sample ```typescript import {newAkaitools} from '@oletizi/sampler-devices/s3k'; async function importWavSample(wavPath: string, diskPath: string, sampleName: string) { const tools = newAkaitools({diskPath, verbose: true}); const result = await tools.wav2Akai( wavPath, // Source WAV file diskPath, // Target disk sampleName // Akai sample name (8.3 format) ); if (result.code === 0) { console.log(`Imported ${sampleName} successfully`); } else { console.error(`Import failed: ${result.errors.join(', ')}`); } } await importWavSample('./samples/kick.wav', '/dev/disk4', 'KICK001'); ``` ### Example 3: List Remote Volumes ```typescript import {newAkaitools} from '@oletizi/sampler-devices/s3k'; async function listRemoteVolumes() { const tools = newAkaitools({ serverConfig: { host: 'piscsi.local', user: 'pi', sshKeyPath: '~/.ssh/id_rsa' }, remote: true, verbose: true }); const volumes = await tools.remoteVolumes(); console.log('Available volumes:'); volumes.disks.forEach(disk => { console.log(` ${disk.id}: ${disk.name}`); console.log(` Mounted: ${disk.mounted ? 'Yes' : 'No'}`); console.log(` Device: ${disk.devicePath || 'N/A'}`); }); } await listRemoteVolumes(); ``` ### Example 4: Parse S5K/S6K Data ```typescript import {parseS56kChunk, BasicProgram} from '@oletizi/sampler-devices/s5k'; async function parseS6KProgram(data: Uint8Array) { const chunk = parseS56kChunk(data); if (chunk.type === 'PROGRAM') { const program = new BasicProgram(chunk.data); console.log(`Program: ${program.getName()}`); console.log(`Zones: ${program.getZoneCount()}`); } } ``` ### Example 5: Modify and Save Program ```typescript import {newAkaitools} from '@oletizi/sampler-devices/s3k'; async function setProgramVolume(diskPath: string, programFile: string, loudness: number) { const tools = newAkaitools({diskPath, verbose: true}); // Read program const program = await tools.readAkaiProgram(programFile); // Modify (requires working with generated S3000XL interfaces) // Note: This is a simplified example program.header.OUTLEV = loudness; // Output level // Write back await tools.writeAkaiProgram(programFile, program); console.log(`Updated ${programFile} loudness to ${loudness}`); } await setProgramVolume('/dev/disk4', 'BASS001.AKP', 80); ``` ## Troubleshooting