0.1.6 • Published 10 months ago

@mastra/node-audio v0.1.6

Weekly downloads
-
License
-
Repository
-
Last release
10 months ago

@mastra/node-audio

Cross-platform audio I/O toolkit for Node.js — play audio, stream microphone input, and record to disk. Designed for use with voice-enabled agents like Mastra.

🎧 Features

  • ✅ Play audio from file, URL, or stream
  • 🎤 Get microphone stream with sane defaults
  • 📼 Record audio to disk using ffmpeg
  • 🔄 Unified createHuddle API for mic/speaker coordination
  • 🧰 Built on node-mic, @mastra/node-speaker, and fluent-ffmpeg

🚀 Getting Started

1. Install

npm install @mastra/node-audio

2. System Requirements

This package wraps native audio libraries. You may need additional system dependencies:

🖥 Speaker

🎙 Microphone Input

💾 Recording Audio

  • Docs: fluent-ffmpeg
  • You must have ffmpeg installed and available in your system path
# macOS
brew install ffmpeg

# Debian/Ubuntu
sudo apt-get install ffmpeg

# Windows
choco install ffmpeg

📚 API Reference

playAudio(input: string | Readable, options?: Speaker.Options): void

Plays a local file, URL, or raw audio stream.

import { playAudio } from "@mastra/node-audio";

playAudio("./response.wav");

You can also pass a stream:

const stream = fs.createReadStream("./hello.wav");
playAudio(stream);

getMicrophoneStream(options?: MicOptions): Readable

Starts recording from the default system mic and returns a stream.

import { getMicrophoneStream } from "@mastra/node-audio";

const micStream = getMicrophoneStream({ rate: 24100 });
micStream.pipe(fs.createWriteStream("raw_input.pcm"));

recordAudioToFile(stream: Readable, outputPath: string, options?: RecorderOptions): Recorder

Records audio from a stream to disk using ffmpeg.

import { getMicrophoneStream, recordAudioToFile } from "@mastra/node-audio";

const mic = getMicrophoneStream();
const recorder = recordAudioToFile(mic, "output.mp3");

// Optionally stop recording later:
// recorder.stream.end();

createHuddle(options: HuddleOptions): Huddle

Unified helper for managing mic + speaker + recording.

import { createHuddle } from "@mastra/node-audio";

const huddle = createHuddle({
  mic: { rate: 24100 },
  speaker: { sampleRate: 24100 },
  record: { outputPath: "session.mp3" },
});

huddle.start();

// Stream mic to agent
const micStream = huddle.getMicrophoneStream();
agent.voice.send(micStream);

// Play response from agent
agent.voice.on("speaker", (stream) => {
  huddle.play(stream);
});

// Gracefully stop
huddle.stop();

🛠 Development

Build both ESM and CommonJS outputs:

npm run build

🧩 License

MIT — built for the Mastra ecosystem

0.1.6

10 months ago

0.1.5

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago