From e518a663c727212bf51adcb7d7eda3055886d5c4 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Thu, 27 Feb 2025 15:38:00 +0100 Subject: [PATCH] Updates --- .github/workflows/release.yml | 4 ++++ package.json | 4 ++++ src/electron/audio/processAudio.ts | 18 +++++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f1fe9779..d9f9d3ce 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,6 +23,10 @@ jobs: # npm ci is better, but requires package-lock.json file run: npm install + # Needed for OPUS + - name: Rebuild Native Modules + run: npx electron-rebuild + - name: Build and release app env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json index 1b8b6147..e3822897 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,10 @@ "filter": [ "connector-*" ] + }, + { + "from": "node_modules/@discordjs/opus", + "to": "app.asar.unpacked/node_modules/@discordjs/opus" } ], "mac": { diff --git a/src/electron/audio/processAudio.ts b/src/electron/audio/processAudio.ts index 907ccc36..64ed8b48 100644 --- a/src/electron/audio/processAudio.ts +++ b/src/electron/audio/processAudio.ts @@ -1,20 +1,32 @@ -import { OpusEncoder } from "@discordjs/opus" import { NdiSender } from "../ndi/NdiSender" // const isStopping = false const channelCount = 2 const sampleRate = 48000 // Hz -const opusEncoder = new OpusEncoder(sampleRate, channelCount) +let opusEncoder: any = null +try { + const { OpusEncoder } = require("@discordjs/opus") + opusEncoder = new OpusEncoder(sampleRate, channelCount) +} catch (err) { + console.log("OPUS not found!") +} export async function processAudio(buffer: Buffer, timeDelay = 0) { + if (!opusEncoder) return + /* optionally delay the processing */ const offset = timeDelay if (offset > 0) await new Promise((resolve) => setTimeout(resolve, offset)) // if (isStopping) return // decode raw OPUS packets into raw PCM/interleaved/signed-int16/little-endian data - buffer = opusEncoder.decode(buffer) + try { + buffer = opusEncoder.decode(buffer) + } catch (err) { + console.log("Could not process audio.") + return + } NdiSender.sendAudioBufferNDI(buffer, { sampleRate, channelCount }) // Object.keys(NdiSender.NDI).forEach((id) => {