Skip to content

@discordjs voice example recorder has memory leaksΒ #3

@seanroades

Description

@seanroades

Which example is this bug report for?

basic

Issue description

git clone https://github.com/discordjs/voice-examples.git
cd recorder
npm i -D
npm start

Join a voice channel
/join
/record speaker@<your_user>

Talk into the mic, and after a while you'll see

πŸ‘‚ Started recording ./recordings/1696122267181-dimsey8_0.ogg
βœ… Recorded ./recordings/1696122267181-dimsey8_0.ogg
πŸ‘‚ Started recording ./recordings/1696122271590-dimsey8_0.ogg
πŸ‘‚ Started recording ./recordings/1696122275391-dimsey8_0.ogg
πŸ‘‚ Started recording ./recordings/1696122278329-dimsey8_0.ogg
(node:64307) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added to [AudioReceiveStream]. Use emitter.setMaxListeners() to increase limit
(Use node --trace-warnings ... to show where the warning was created)
βœ… Recorded ./recordings/1696122278329-dimsey8_0.ogg
βœ… Recorded ./recordings/1696122275391-dimsey8_0.ogg
βœ… Recorded ./recordings/1696122271590-dimsey8_0.ogg

Code sample

import { createWriteStream } from 'node:fs';
import { pipeline } from 'node:stream';
import { EndBehaviorType, VoiceReceiver } from '@discordjs/voice';
import type { User } from 'discord.js';
import * as prism from 'prism-media';

function getDisplayName(userId: string, user?: User) {
	return user ? `${user.username}_${user.discriminator}` : userId;
}

export function createListeningStream(receiver: VoiceReceiver, userId: string, user?: User) {
	const opusStream = receiver.subscribe(userId, {
		end: {
			behavior: EndBehaviorType.AfterSilence,
			duration: 1000,
		},
	});

	const oggStream = new prism.opus.OggLogicalBitstream({
		opusHead: new prism.opus.OpusHead({
			channelCount: 2,
			sampleRate: 48000,
		}),
		pageSizeControl: {
			maxPackets: 10,
		},
	});

	const filename = `./recordings/${Date.now()}-${getDisplayName(userId, user)}.ogg`;

	const out = createWriteStream(filename);

	console.log(`πŸ‘‚ Started recording ${filename}`);

	pipeline(opusStream, oggStream, out, (err) => {
		if (err) {
			console.warn(`❌ Error recording file ${filename} - ${err.message}`);
		} else {
			console.log(`βœ… Recorded ${filename}`);
		}
	});
}

@discordjs/version version

@discordjs/[email protected]

Node.js version

[email protected]

Operating system

MacOS m1

Priority this issue should have

Medium (should be fixed soon)

I have tested this issue on a development release

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions