aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/payments.js24
-rw-r--r--package.json1
-rw-r--r--pnpm-lock.yaml22
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
+ resolution: {integrity: sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==}
+ engines: {node: '>=0.8.0'}
+ dependencies:
+ async: 3.2.4
+ which: 1.3.1
+ dev: false
+
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
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: false
+
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
@@ -3556,6 +3571,13 @@ packages:
webidl-conversions: 3.0.1
dev: false
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
dependencies: