#!/usr/bin/env node const { AudioTeeStream } = require("../index"); function runBasicTest() { console.log("=== AudioTee.js Basic Test ===\n"); const stream = new AudioTeeStream({ format: "binary", sampleRate: 16000, chunkDuration: 0.1, }); let audioPacketCount = 0; let totalAudioBytes = 0; stream.on("metadata", (metadata) => { console.log("šŸ“Š Audio Metadata:"); console.log(` Sample Rate: ${metadata.sample_rate} Hz`); console.log(` Channels: ${metadata.channels_per_frame}`); console.log(` Bits per Channel: ${metadata.bits_per_channel}`); console.log(` Encoding: ${metadata.encoding}`); console.log(` Float: ${metadata.is_float}\n`); }); stream.on("stream_start", () => { console.log("šŸŽµ Audio stream started\n"); }); stream.on("audio", (packet) => { audioPacketCount++; totalAudioBytes += packet.audioData.length; process.stdout.write( `\ršŸ“¦ Packets: ${audioPacketCount} | Audio bytes: ${totalAudioBytes} | Peak: ${packet.peakAmplitude.toFixed( 3 )} | Duration: ${packet.duration.toFixed(3)}s` ); }); stream.on("stream_stop", () => { console.log("\n\nšŸ›‘ Audio stream stopped"); console.log( `šŸ“ˆ Final stats: ${audioPacketCount} packets, ${totalAudioBytes} bytes total\n` ); }); stream.on("log", (log) => { if (log.level === "error") { console.error(`\nāŒ ${log.level.toUpperCase()}: ${log.message}`); if (log.context) { console.error(` Context:`, log.context); } } }); stream.on("error", (error) => { console.error(`\nšŸ’„ Error: ${error.message}`); process.exit(1); }); stream.on("close", ({ code, signal }) => { console.log( `šŸ‘‹ AudioTee process closed (code: ${code}, signal: ${signal})` ); process.exit(code || 0); }); // Handle Ctrl+C gracefully process.on("SIGINT", () => { console.log("\n\nšŸ›‘ Received SIGINT, stopping AudioTee..."); stream.stop(); }); console.log("šŸš€ Starting AudioTee stream..."); console.log("šŸ’” Play some audio and watch the packets stream in!"); console.log("ā¹ļø Press Ctrl+C to stop\n"); try { stream.start(); } catch (error) { console.error(`Failed to start: ${error.message}`); process.exit(1); } } function runQuickTest() { console.log("=== AudioTee.js Quick Test ===\n"); const stream = new AudioTeeStream({ format: "json", chunkDuration: 0.2, }); let packetCount = 0; const maxPackets = 5; stream.on("metadata", (metadata) => { console.log("āœ… Received metadata:", metadata); }); stream.on("audio", () => { packetCount++; console.log(`āœ… Received audio packet ${packetCount}/${maxPackets}`); if (packetCount >= maxPackets) { console.log("āœ… Quick test complete!"); stream.stop(); } }); stream.on("error", (error) => { console.error("āŒ Test failed:", error.message); process.exit(1); }); stream.on("close", () => { console.log("šŸ‘‹ Test finished"); process.exit(0); }); setTimeout(() => { console.log("ā° Test timeout - AudioTee might not be working"); stream.stop(); process.exit(1); }, 10000); console.log("šŸš€ Running quick test (capturing 5 audio packets)..."); stream.start(); } // Run the appropriate test based on command line args const testType = process.argv[2] || "basic"; switch (testType) { case "quick": runQuickTest(); break; case "basic": default: runBasicTest(); break; }