From d7c3b24e06085fa6e7d59ec4f93f4af30edec08f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 25 Aug 2023 22:09:46 +0000 Subject: ffmpeg encode mp3 --- lib/payments.js | 24 ++++++++++++++++++++++-- package.json | 1 + pnpm-lock.yaml | 22 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/payments.js b/lib/payments.js index ab258b60..fb7d9cc6 100644 --- a/lib/payments.js +++ b/lib/payments.js @@ -11,6 +11,7 @@ import dollarsToWords from "dollars-to-words"; import got from "got"; import mqtt from "mqtt"; import { spawn } from "child_process"; +import ffmpeg from 'fluent-ffmpeg'; export const types = { internal: "internal", @@ -180,9 +181,28 @@ export let credit = async (hash, amount, memo, ref, type = types.internal) => { parseFloat(((amount * p.rate) / 100000000).toFixed(2)) ); - const mimic = spawn("/mimic", ["-t", words, "-voice", "/cmu_us_axb.flitevox", "-o", `/app/data/uploads/${p.id}.wav`]); - const client = mqtt.connect('mqtt://ln.coinos.io', config.mqtt); + const raw = `/app/data/uploads/${p.id}-raw.mp3`; + const out = `/app/data/uploads/${p.id}.mp3`; + const mimic = spawn("/mimic", ["-t", words, "-voice", "/cmu_us_axb.flitevox", "-o", raw]); + + mimic.stdout.on("end", () => { + ffmpeg(raw) + .audioBitrate(128) + .audioFrequency(44100) + .toFormat('mp3') + .on('data', (chunk) => { + client.publish("mp3", chunk); + }) + .on('end', () => { + console.log('File has been re-encoded successfully.'); + }) + .on('error', (err) => { + console.error('Error:', err); + }) + .save(out); + }); + client.on('connect', function () { client.publish(username, `${p.amount}:${p.tip}:${p.rate}:${p.created}:${p.id}`); }); diff --git a/package.json b/package.json index 98216258..f617d2a8 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dollars-to-words": "github:asoltys/dollars-to-words", "fastify": "^4.5.3", "file-type": "^18.0.0", + "fluent-ffmpeg": "^2.1.2", "got": "^12.5.3", "jsonwebtoken": "^9.0.0", "lnurl": "^0.24.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b53ff54e..a5b398a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ dependencies: file-type: specifier: ^18.0.0 version: 18.0.0 + fluent-ffmpeg: + specifier: ^2.1.2 + version: 2.1.2 got: specifier: ^12.5.3 version: 12.5.3 @@ -1917,6 +1920,14 @@ packages: safe-regex2: 2.0.0 dev: false + /fluent-ffmpeg@2.1.2: + resolution: {integrity: sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==} + engines: {node: '>=0.8.0'} + dependencies: + async: 3.2.4 + which: 1.3.1 + dev: false + /form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -2228,6 +2239,10 @@ packages: engines: {node: '>=0.12.0'} dev: false + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -3556,6 +3571,13 @@ packages: webidl-conversions: 3.0.1 dev: false + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: -- cgit v1.2.3