加菲大帅猫 2024-06-26 17:35 采纳率: 35%
浏览 6
已结题

node.js播放音频时出现问题

使用node.js播放音频时出现问题,代码正常跑起来了,并且返回了播放成功,但是服务器没有声音传出

const player = require('play-sound')();

const soundFile = `/var/www/node/playSound/${severityLevel}.mp3`;
function playSound(soundFile) {
    player.play(soundFile, (err) => {
        if (err) {
            console.error(`播放音频时出现错误: ${err}`);
        } else {
            console.log(`正在播放声音: ${soundFile}`);
        }
    });
}

执行代码前3次,服务器可以正常播放声音,但是执行3次后就显示执行成功,但是没有声音传出了

img

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-26 17:35
    关注

    引自免费微信小程序:皆我百晓生

    这个问题可能与Node.js环境中的音频处理机制有关。尝试将音频文件转换为波形数据,然后在服务器端使用JavaScript进行操作。

    首先,确保安装了必要的库。对于Node.js来说,你可以使用@ffmpegjs/ffmpeg库来处理音频。以下是转换为波形数据的基本步骤:

    1. 安装必要的包:
    npm install @ffmpegjs/ffmpeg -g
    
    1. 在Node.js应用程序中使用@ffmpegjs/ffmpeg
    const ffmpeg = require('@ffmpegjs/ffmpeg');
    
    // 将MP3文件转换为波形数据
    async function convertToWaveform(file) {
        const { stdout } = await ffmpeg(file)
            .on('end', () => {
                console.log(`Audio file converted to waveform successfully.`);
            })
            .outputType('wav')
            .run();
    }
    
    convertToWaveform('/var/www/node/playSound/5.mp3');
    
    1. 使用此波形数据在服务器端进行处理。
    const fs = require('fs');
    const path = require('path');
    const http = require('http');
    const WebSocket = require('ws');
    
    // 创建WebSocket服务器
    const server = http.createServer((req, res) => {
        // 假设这是一个WebSocket连接
    
        // 解析请求
        const url = req.url;
        const method = req.method;
    
        // 处理不同的HTTP方法
        switch (method) {
            case 'GET':
                handleGetRequest(url);
                break;
            case 'POST':
                handlePostRequest(url);
                break;
            default:
                res.writeHead(404, { 'Content-Type': 'text/plain' });
                res.end('Method not allowed');
                return;
        }
    
        // 处理特定请求
        function handleGetRequest(url) {
            // 这里处理GET请求
            res.writeHead(200, { 'Content-Type': 'audio/wav' });
            res.end(fs.readFileSync(path.join(__dirname, '/var/www/node/playSound/' + url.split('/')[1] + '.wav')));
        }
    
        function handlePostRequest(url) {
            // 这里处理POST请求
            // 获取上传的文件
            const formData = new FormData(req);
    
            // 尝试读取上传的文件并将其保存到硬盘上
            let audioData = null;
            try {
                audioData = fs.readFileSync(formData.get('file'));
            } catch (error) {
                console.error(error);
            }
    
            // 将音频数据保存到文件
            fs.writeFileSync('/tmp/audio.wav', audioData);
    
            // 向客户端发送音频数据
            res.writeHead(200, { 'Content-Type': 'audio/wav' });
            res.end(audioData);
        }
    });
    
    server.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

    这个例子展示了如何将MP3文件转换为波形数据,然后在服务器端接收这些数据并播放。注意,这只是一个基本示例,实际应用中可能会有更多细节需要考虑。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月10日
  • 创建了问题 6月26日

悬赏问题

  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?