将internal.Writable转换为NodeJS.WritableStream

问题描述 投票:0回答:1

我想使用 ytdl-core 和 Fluent-ffmpeg 将声音输出到我的扬声器

我从 yt 获取声音并使用 ffmpeg 将其转换为 pcm,现在我想将其通过管道传输到我的扬声器

扬声器使用

internal.Writable

naudiodon 使用

NodeJS.WritableStream

当管道到

speaker
时一切正常

当管道到

naudiodon
时,我收到打字稿错误,但什么也没听到

两个流之间有什么区别,我可以转换它们吗?因为我需要使用

naudiodon
,因为我可以指定我的输出设备

编辑:

WritableStream 是一个 Web API,internal.Writable 来自 Node.js

我可以将

Writable
转换为
WritableStream
吗?

Github问题

node.js pcm nodejs-stream speaker
1个回答
0
投票

您需要创建一个

WritableStream
以将操作应用于底层
Writable
。这是一个例子。

function toWebWritable<T extends Uint8Array>(writable: Writable): WritableStream<T> {
    return new WritableStream<T>({
        write(chunk, controller) {
            return new Promise((resolve, reject) => {
                let result: boolean
                result = writable.write(Buffer.from(chunk), (error) => {
                    if (error) {
                        controller.error(error);
                        reject(error);
                    } else if (!result) {
                        writable.once('drain', resolve);
                    } else {
                        resolve();
                    }
                });
            });
        },
        close() {
            // Assuming a graceful closure is desired:
            return new Promise((resolve) => {
                writable.end(resolve);
                // If there's an error, it should be handled by listening to the 'error' event on the writable itself.
            });
        },
        abort(reason) {
            writable.destroy(reason);
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.