{"_id":"@acpfx/mic-speaker","_rev":"9-0f2818907da2a96dbdb83fec0b877133","name":"@acpfx/mic-speaker","dist-tags":{"latest":"0.5.1"},"versions":{"0.4.0":{"name":"@acpfx/mic-speaker","version":"0.4.0","license":"ISC","_id":"@acpfx/mic-speaker@0.4.0","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"e01d8987d8b261df2d256fc62065c182f312dfa9","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.0.tgz","fileCount":4,"integrity":"sha512-4N59Tlqn5pm6mmlcRtttKSr5WPq2Q7z26Lxt9ukYDyqrMFuFRrsqyaIodJ+bm31N1cboeuPqXwyAgIOylBpJhA==","signatures":[{"sig":"MEUCIF/8949aFvHjC0dTwZZ3Fydoz2mmEzSOE6kyOe2SLNjCAiEAvm8S7ANaJ1ese/UbVvltyMrYMhLf46xCwyhVzuEv2G4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1712924},"_from":"file:acpfx-mic-speaker-0.4.0.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/59e1c7e49b3dbddc6403542178240269/acpfx-mic-speaker-0.4.0.tgz","_integrity":"sha512-4N59Tlqn5pm6mmlcRtttKSr5WPq2Q7z26Lxt9ukYDyqrMFuFRrsqyaIodJ+bm31N1cboeuPqXwyAgIOylBpJhA==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.4","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.0_1775196801019_0.6041723031527297","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@acpfx/mic-speaker","version":"0.4.1","license":"ISC","_id":"@acpfx/mic-speaker@0.4.1","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"1ba108b78b30e4d37851caab63ff834ccaa0b856","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.1.tgz","fileCount":4,"integrity":"sha512-SdME0ftQmdy7FWv1emfmgRbHHB/l3miKDiZbKzYk43gcgMTRvkEqs72q47cc0/iagrcu6uPBk6muaqcqxtIjPA==","signatures":[{"sig":"MEQCIAmJ0HaX8+GL5XOnNT3+txeIlubBYCL0mtyzUtaJDv/CAiAoPrZjFnaIzSYryLYeQ7/ML6b3Q0WQtcj/AE6mW8MTpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1712924},"_from":"file:acpfx-mic-speaker-0.4.1.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/9f2524f4e0a6bc4d25c5a06ae8557b7d/acpfx-mic-speaker-0.4.1.tgz","_integrity":"sha512-SdME0ftQmdy7FWv1emfmgRbHHB/l3miKDiZbKzYk43gcgMTRvkEqs72q47cc0/iagrcu6uPBk6muaqcqxtIjPA==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.1_1775197838376_0.42337588847612206","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@acpfx/mic-speaker","version":"0.4.2","license":"ISC","_id":"@acpfx/mic-speaker@0.4.2","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"3072972426183634dfb2f5a929142775a6d8b5b5","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.2.tgz","fileCount":4,"integrity":"sha512-YcrKG4Ox8bS18t6AHO/PMuZA0yZTAr6BCzTXqMSp9E2Y9CojshbSx7e+UcxZyWAkqJalN/N/5G+HQUWhNAeFHg==","signatures":[{"sig":"MEUCIQDFIDHJSnX8cGhPdEFuEN6gbuiQ5ktFyuInrnmEzbPv7QIgAzqqmLE+lviYYJILqVeC/l5FGmYVG5u5VT+bMNRx5f4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1712924},"_from":"file:acpfx-mic-speaker-0.4.2.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/55ad4d101aa954416d7a943539c49566/acpfx-mic-speaker-0.4.2.tgz","_integrity":"sha512-YcrKG4Ox8bS18t6AHO/PMuZA0yZTAr6BCzTXqMSp9E2Y9CojshbSx7e+UcxZyWAkqJalN/N/5G+HQUWhNAeFHg==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.4","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.2_1775198950846_0.7442610089385806","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@acpfx/mic-speaker","version":"0.4.3","license":"ISC","_id":"@acpfx/mic-speaker@0.4.3","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"19ee6cb00f98e1ec9f4791972b49fbf882536d04","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.3.tgz","fileCount":4,"integrity":"sha512-maIZPGIYLjb6q6azMse4u+xxR2VcL/s2YptwRUeRFfqYmBWLoKdaB8Af0x7OFVzf/QarR0qe4Am6wNtfcgfLLg==","signatures":[{"sig":"MEYCIQDQan5eLBURcAC60XB2vZfHsbpsyS83VpII7L9y+jgEhAIhAO1CcGJKO0jyzq/q7Qw7HM1jz9TCunmq+HRf2zXBXuy6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1712974},"_from":"file:acpfx-mic-speaker-0.4.3.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/d03a7befbbe2d4bad82219dbcbbd70d7/acpfx-mic-speaker-0.4.3.tgz","_integrity":"sha512-maIZPGIYLjb6q6azMse4u+xxR2VcL/s2YptwRUeRFfqYmBWLoKdaB8Af0x7OFVzf/QarR0qe4Am6wNtfcgfLLg==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.3_1775200304418_0.9379969077620844","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@acpfx/mic-speaker","version":"0.4.4","license":"ISC","_id":"@acpfx/mic-speaker@0.4.4","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"7b04a6c14bd6e0e900724cc14c5f1037a4b50a4a","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.4.tgz","fileCount":6,"integrity":"sha512-rkvsqJ6dJ47fkKVRPI4pjfixJyXYw9eQ7XcnPh1R0towW+LZD80jRH3axmttQOmolZcBs3ihIJlMcTRVKwONIQ==","signatures":[{"sig":"MEQCIH5BYRfBBKthOb5dPakEfJXTi2ke2z/mQk9WmTZZlC5tAiAgGbatAsLkcH+cftAhHj875ZHU/pyf3oYg8Vln0bVcZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1715258},"_from":"file:acpfx-mic-speaker-0.4.4.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/484212e2e120b63c0a20bf02713e739f/acpfx-mic-speaker-0.4.4.tgz","_integrity":"sha512-rkvsqJ6dJ47fkKVRPI4pjfixJyXYw9eQ7XcnPh1R0towW+LZD80jRH3axmttQOmolZcBs3ihIJlMcTRVKwONIQ==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.4_1775202207239_0.6925205432464379","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@acpfx/mic-speaker","version":"0.4.5","license":"ISC","_id":"@acpfx/mic-speaker@0.4.5","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"62b5d0ccfba7707ff2f54a084081114253413db6","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.5.tgz","fileCount":5,"integrity":"sha512-7HvBs1viqmx/5UKEmnIduGtBJ/ZnoI/pjnN/+w9OFwXBTpBBZ1UQ49ZKNlfF6GbjRnzpLUZ0P8TR1xg/wVSs2g==","signatures":[{"sig":"MEQCIDLXTV4wU60q7ukL+KrFznRSI6t5T+b7DVSH42XkiTomAiAjz2pJRwy5kIpzB5hP56Mfz11Zep+oZjjW8SiheMsnzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7674},"_from":"file:acpfx-mic-speaker-0.4.5.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/d344ed0a632928cde7bb7263b105ea30/acpfx-mic-speaker-0.4.5.tgz","_integrity":"sha512-7HvBs1viqmx/5UKEmnIduGtBJ/ZnoI/pjnN/+w9OFwXBTpBBZ1UQ49ZKNlfF6GbjRnzpLUZ0P8TR1xg/wVSs2g==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.5_1775262146531_0.18364251895659622","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@acpfx/mic-speaker","version":"0.4.6","license":"ISC","_id":"@acpfx/mic-speaker@0.4.6","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"37d51448cca8b1a5ec5df6a8129bbb87259dd531","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.4.6.tgz","fileCount":5,"integrity":"sha512-V9O9ePip/15LqXvklmsIjVD93oW5kjWACe+NvKgGwwJ58o7qgd7661Te36rmKf3vr0rLMbd8LIP2yYKqHVE3+Q==","signatures":[{"sig":"MEUCIHv1leCWdbUP5NQd+QLo/0BHUB5v440TrFbo6CJmQerYAiEAkIumbDK8dUt89akgi8GolyOA0B6X9w2ifX4wez3jegQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7674},"_from":"file:acpfx-mic-speaker-0.4.6.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/1007575c105a1e3a5f3dc9d24284d93e/acpfx-mic-speaker-0.4.6.tgz","_integrity":"sha512-V9O9ePip/15LqXvklmsIjVD93oW5kjWACe+NvKgGwwJ58o7qgd7661Te36rmKf3vr0rLMbd8LIP2yYKqHVE3+Q==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.4.6_1775284750724_0.4692634293576994","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@acpfx/mic-speaker","version":"0.5.0","license":"ISC","_id":"@acpfx/mic-speaker@0.5.0","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"homepage":"https://github.com/thisnick/acpfx#readme","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"dist":{"shasum":"317f557910ebb0be251f086bd90d7df0d400b479","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.5.0.tgz","fileCount":5,"integrity":"sha512-ghR5jdEniwGhm32J2fLJaPdND9zfRkHVJwGLJ9R9NgBHeVqGfE97E0NOc3LIl1ldAKXKlwKyw5FaBH12JnJhEg==","signatures":[{"sig":"MEQCIBVZPEIeek/ovz3cE6OTTCXnbXmnx5kCZBI5gahir2gcAiAqlLKZN4OUXOoWG0JXY7jzKP11hj40U447veYJQkJBMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7674},"_from":"file:acpfx-mic-speaker-0.5.0.tgz","engines":{"node":">=18"},"scripts":{"postinstall":"node scripts/postinstall.js","build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/"},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"_resolved":"/tmp/a5a674e22ba7743f1d08ab1d096ac01c/acpfx-mic-speaker-0.5.0.tgz","_integrity":"sha512-ghR5jdEniwGhm32J2fLJaPdND9zfRkHVJwGLJ9R9NgBHeVqGfE97E0NOc3LIl1ldAKXKlwKyw5FaBH12JnJhEg==","repository":{"url":"git+https://github.com/thisnick/acpfx.git","type":"git","directory":"packages/node-mic-speaker"},"_npmVersion":"10.9.7","description":"acpfx microphone with acoustic echo cancellation","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mic-speaker_0.5.0_1775761941762_0.40493284308268107","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@acpfx/mic-speaker","version":"0.5.1","description":"acpfx microphone with acoustic echo cancellation","repository":{"type":"git","url":"git+https://github.com/thisnick/acpfx.git","directory":"packages/node-mic-speaker"},"license":"ISC","bin":{"acpfx-mic-speaker":"bin/mic-speaker"},"engines":{"node":">=18"},"scripts":{"build:native":"cargo build --release && mkdir -p bin && cp target/release/mic-speaker bin/","postinstall":"node scripts/postinstall.js"},"_id":"@acpfx/mic-speaker@0.5.1","bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"homepage":"https://github.com/thisnick/acpfx#readme","_integrity":"sha512-KHgB7YoWvfuUxKG3tJQsdgk357rtZLl//bI1BdULGFdT6uMHentkbigodWa02G+S4r6lHdvb+bU00mynsk5uJw==","_resolved":"/tmp/bb55d4e2593f612231b469b603140442/acpfx-mic-speaker-0.5.1.tgz","_from":"file:acpfx-mic-speaker-0.5.1.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-KHgB7YoWvfuUxKG3tJQsdgk357rtZLl//bI1BdULGFdT6uMHentkbigodWa02G+S4r6lHdvb+bU00mynsk5uJw==","shasum":"c4606fea2f22afe3bc7331ab087667b68b3f90d4","tarball":"https://registry.npmjs.org/@acpfx/mic-speaker/-/mic-speaker-0.5.1.tgz","fileCount":5,"unpackedSize":7674,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDJaN5rlR009vCF8TnR/92hVfKQ8bXympogICDKmPiz3wIhALXB8AIL2mSLr7QvFRXg81EmA/fVgFQRtrILLQUbrI1e"}]},"_npmUser":{"name":"thisnick","email":"wiseyu@gmail.com"},"directories":{},"maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mic-speaker_0.5.1_1776208521468_0.925132897347666"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T06:13:20.927Z","modified":"2026-04-14T23:15:21.753Z","0.4.0":"2026-04-03T06:13:21.197Z","0.4.1":"2026-04-03T06:30:38.634Z","0.4.2":"2026-04-03T06:49:11.031Z","0.4.3":"2026-04-03T07:11:44.670Z","0.4.4":"2026-04-03T07:43:27.402Z","0.4.5":"2026-04-04T00:22:26.676Z","0.4.6":"2026-04-04T06:39:10.864Z","0.5.0":"2026-04-09T19:12:21.908Z","0.5.1":"2026-04-14T23:15:21.604Z"},"bugs":{"url":"https://github.com/thisnick/acpfx/issues"},"license":"ISC","homepage":"https://github.com/thisnick/acpfx#readme","repository":{"type":"git","url":"git+https://github.com/thisnick/acpfx.git","directory":"packages/node-mic-speaker"},"description":"acpfx microphone with acoustic echo cancellation","maintainers":[{"name":"thisnick","email":"wiseyu@gmail.com"}],"readme":"# @acpfx/mic-speaker\n\nNative microphone capture with acoustic echo cancellation (AEC). Uses OS-level audio APIs via Rust for low-latency capture and speaker reference for echo cancellation.\n\n## Usage\n\nThis package is a pipeline node for [@acpfx/cli](../orchestrator/README.md). See the CLI package for installation and usage.\n\nThe postinstall script downloads a prebuilt binary for your platform. Supported: macOS (Apple Silicon), Linux (x86_64).\n\n## Manifest\n\n- **Consumes:** `audio.chunk` (speaker reference for AEC), `control.interrupt`\n- **Emits:** `audio.chunk`, `audio.level`, `lifecycle.ready`, `lifecycle.done`, `control.error`\n\n## Settings\n\n| Name | Type | Default | Description |\n|------|------|---------|-------------|\n| `sampleRate` | number | `16000` | Target sample rate in Hz |\n| `chunkMs` | number | `100` | Chunk duration in milliseconds |\n| `speaker` | string | `player` | Node name whose audio to use as speaker reference for AEC |\n| `debugDir` | string | | Directory to write debug WAV recordings |\n\n## Pipeline Example\n\n```yaml\nnodes:\n  mic:\n    use: \"@acpfx/mic-speaker\"\n    settings: { sampleRate: 16000, speaker: player }\n    outputs: [stt]\n  player:\n    use: \"@acpfx/audio-player\"\n    settings: { speechSource: tts }\n    outputs: [mic]  # cycle: reference audio for AEC\n```\n\n## Building from Source\n\n```bash\ncargo build --release -p mic-speaker\n```\n\n## Credits\n\nBuilt on [sys-voice](https://github.com/tigy32/sys-voice), a Rust crate for native audio I/O with acoustic echo cancellation.\n\n## License\n\nISC\n","readmeFilename":"README.md"}