discordjs / discordjs/voice-examples

@discordjs voice example recorder has memory leaks

Open
#3 0 comments 0 reactions 0 assignees View on GitHub
bug need repro
Dominant language
No language data
Stars
39
Forks
13
PR merge metrics
No merged PRs in 30d

Description

### 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@

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

```typescript
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/voice@0.11.0

### Node.js version

Node@18.18.0

### 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_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.