北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 117|回复: 1

尝试给游戏加上背景音效

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
不知道大家有没有类似的想法,就是比如战斗的时候加上战斗的bgm或者喊叫声之类的,xy 快速逍遥的时候加上轻功的风声,我做了一个简单的实现,不知道大家觉得这个东西有没有意义,这个工作量很大,需要寻找合适的音效文件加在合适的地方

用的是paotin,原理很简单:
本来想在windows下直接利用$run $system $script 去调用一个外部的脚本,但是都没成功,所以写了一个独立的 bgm.js,单独执行 node bgm.js,这个js监控buffer.log,这个log里包含了所有的输出,然后约定特定的输出,比如
okLog play 1 ,就播放 1.wav,在windows下后台播放wav需要独立的工具,下载了一个叫nircmd.exe的小工具,这个工具可以在后台播放wav而且可以指定播放的时间长度
附近包括了这个工具和bgm.js,以及一个测试wav文件
  1. const fs = require('fs');
  2. const path = require('path');
  3. const { exec } = require('child_process');  // 引入 child_process 模块

  4. const logFilePath = 'C:/my-paotin/log/wendaokoujin/buffer.log';

  5. // 用来存储最后读取的位置
  6. let lastPosition = 0;

  7. // 获取文件的初始大小
  8. fs.stat(logFilePath, (err, stats) => {
  9.   if (err) {
  10.     console.error('无法获取文件信息:', err);
  11.     return;
  12.   }
  13.   lastPosition = stats.size;  // 获取文件的初始大小
  14.   console.log('初始文件大小:', lastPosition);
  15. });

  16. // 监控文件变化
  17. fs.watchFile(logFilePath, { interval: 1000 }, (curr, prev) => {
  18.   if (curr.size > prev.size) {
  19.     // 文件内容变大了,说明有新增内容
  20.     const stream = fs.createReadStream(logFilePath, {
  21.       encoding: 'utf8',
  22.       start: lastPosition, // 从上次读取的位置开始
  23.       end: curr.size        // 读取到当前文件大小
  24.     });

  25.     // 读取新增的内容
  26.     let newContent = '';
  27.     stream.on('data', (chunk) => {
  28.       newContent += chunk;
  29.     });

  30.     stream.on('end', () => {
  31.       // 处理新增的内容
  32.       console.log('新增内容:', newContent);

  33.       // 根据内容做判断
  34.       // 根据内容做判断
  35.       if (newContent.includes('play 1')) {
  36.         console.log('检测到 play 1,正在播放 1.wav');
  37.         playAudio('1.wav');  // 播放 1.wav 文件
  38.       }

  39.       // 更新最后读取的位置
  40.       lastPosition = curr.size;
  41.     });
  42.   }
  43. });

  44. console.log('开始监控文件变化...');

  45. // 播放音频文件的函数,确保音频在后台播放
  46. function playAudio(filename) {
  47.     const audioPath = path.join('C:/my-paotin/audio/', filename);  // 假设音频文件在这个目录下
  48.     const nircmdPath = 'C:/my-paotin/audio/player/nircmd.exe';  // nircmd.exe 的完整路径
  49.     // 对不同的操作系统进行处理
  50.     let command = '';
  51.     console.log('当前操作系统:', process.platform);
  52.     // Windows 操作系统
  53.     if (process.platform === 'win32') {
  54.         command = `${nircmdPath} mediaplay 10000 ${audioPath}`;
  55.     }
  56.     // macOS 操作系统
  57.     else if (process.platform === 'darwin') {
  58.       command = `afplay ${audioPath} &`;  // 在后台运行 afplay
  59.     }
  60.     // Linux 操作系统
  61.     else if (process.platform === 'linux') {
  62.       command = `mpg123 ${audioPath} &`;  // 使用 mpg123 在后台播放音频
  63.     }
  64.   
  65.     exec(command, (err, stdout, stderr) => {
  66.       if (err) {
  67.         console.error(`播放音频文件时出错: ${err.message}`);
  68.         return;
  69.       }
  70.       if (stderr) {
  71.         console.error(`stderr: ${stderr}`);
  72.         return;
  73.       }
  74.       console.log(`stdout: ${stdout}`);
  75.     });
  76.   }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 6 天前 | 显示全部楼层
只能说,用合适的东西做合适的事情。

撇开是否适合用paotin听音乐这个问题

notify日志文件什么鬼……

直接监听http做个接口不好么……
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2025-1-31 06:58 AM , Processed in 0.010029 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表