phone/basic-test.ts
2025-11-17 10:54:37 -08:00

73 lines
2.0 KiB
TypeScript
Executable File

#!/usr/bin/env bun
/**
* Basic functionality test for Buzz library
* Tests device listing, player, recorder, and tone generation
*/
import Buzz from "./src/buzz"
console.log("🎵 Buzz Audio Library - Basic Test\n")
// Test 1: List devices
console.log("📋 Listing devices...")
const devices = await Buzz.listDevices()
console.log(`Found ${devices.length} device(s):`)
devices.forEach((d) => {
console.log(` ${d.type.padEnd(8)} ${d.label} (${d.id})`)
})
console.log("")
// Test 2: Create player
console.log("🔊 Creating default player...")
try {
const player = await Buzz.defaultPlayer()
console.log("✅ Player created\n")
// Test 3: Play sound file
console.log("🔊 Playing greeting sound...")
const playback = await player.play("./sounds/greeting/greet1.wav")
await playback.finished()
console.log("✅ Sound played\n")
// Test 4: Play tone
console.log("🎵 Playing 440Hz tone for 1 second...")
const tone = await player.playTone([440], 1000)
await tone.finished()
console.log("✅ Tone played\n")
} catch (error) {
console.log(`⚠️ Skipping player tests: ${error instanceof Error ? error.message : error}\n`)
}
// Test 5: Create recorder
console.log("🎤 Creating default recorder...")
try {
const recorder = await Buzz.defaultRecorder()
console.log("✅ Recorder created\n")
// Test 6: Stream recording with RMS
console.log("📊 Recording for 2 seconds with RMS monitoring...")
const recording = recorder.start()
let chunkCount = 0
let maxRMS = 0
setTimeout(async () => {
await recording.stop()
}, 2000)
for await (const chunk of recording.stream()) {
chunkCount++
const rms = Buzz.calculateRMS(chunk)
if (rms > maxRMS) maxRMS = rms
if (chunkCount % 20 === 0) {
console.log(` RMS: ${Math.round(rms)}`)
}
}
console.log(`✅ Recorded ${chunkCount} chunks, max RMS: ${Math.round(maxRMS)}\n`)
} catch (error) {
console.log(`⚠️ Skipping recorder tests: ${error instanceof Error ? error.message : error}\n`)
}
console.log("✅ All tests complete!")