mirror of
				https://github.com/tobspr/shapez.io.git
				synced 2025-06-13 13:04:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require("path");
 | |
| const audiosprite = require("gulp-audiosprite");
 | |
| 
 | |
| function gulptasksSounds($, gulp, buildFolder) {
 | |
|     // Gather some basic infos
 | |
|     const soundsDir = path.join(__dirname, "..", "res_raw", "sounds");
 | |
|     const builtSoundsDir = path.join(__dirname, "..", "res_built", "sounds");
 | |
| 
 | |
|     gulp.task("sounds.clear", () => {
 | |
|         return gulp.src(builtSoundsDir, { read: false, allowEmpty: true }).pipe($.clean({ force: true }));
 | |
|     });
 | |
| 
 | |
|     const filters = ["volume=0.2"];
 | |
| 
 | |
|     const fileCache = new $.cache.Cache({
 | |
|         cacheDirName: "shapezio-precompiled-sounds",
 | |
|     });
 | |
| 
 | |
|     function getFileCacheValue(file) {
 | |
|         const { _isVinyl, base, cwd, contents, history, stat, path } = file;
 | |
|         const encodedContents = Buffer.from(contents).toString("base64");
 | |
|         return { _isVinyl, base, cwd, contents: encodedContents, history, stat, path };
 | |
|     }
 | |
| 
 | |
|     // Encodes the game music
 | |
|     gulp.task("sounds.music", () => {
 | |
|         return gulp
 | |
|             .src([path.join(soundsDir, "music", "**", "*.wav"), path.join(soundsDir, "music", "**", "*.mp3")])
 | |
|             .pipe($.plumber())
 | |
|             .pipe(
 | |
|                 $.cache(
 | |
|                     $.fluentFfmpeg("mp3", function (cmd) {
 | |
|                         return cmd
 | |
|                             .audioBitrate(48)
 | |
|                             .audioChannels(1)
 | |
|                             .audioFrequency(22050)
 | |
|                             .audioCodec("libmp3lame")
 | |
|                             .audioFilters(["volume=0.15"]);
 | |
|                     }),
 | |
|                     {
 | |
|                         name: "music",
 | |
|                         fileCache,
 | |
|                         value: getFileCacheValue,
 | |
|                     }
 | |
|                 )
 | |
|             )
 | |
|             .pipe(gulp.dest(path.join(builtSoundsDir, "music")));
 | |
|     });
 | |
| 
 | |
|     // Encodes the game music in high quality for the standalone
 | |
|     gulp.task("sounds.musicHQ", () => {
 | |
|         return gulp
 | |
|             .src([path.join(soundsDir, "music", "**", "*.wav"), path.join(soundsDir, "music", "**", "*.mp3")])
 | |
|             .pipe($.plumber())
 | |
|             .pipe(
 | |
|                 $.cache(
 | |
|                     $.fluentFfmpeg("mp3", function (cmd) {
 | |
|                         return cmd
 | |
|                             .audioBitrate(256)
 | |
|                             .audioChannels(2)
 | |
|                             .audioFrequency(44100)
 | |
|                             .audioCodec("libmp3lame")
 | |
|                             .audioFilters(["volume=0.15"]);
 | |
|                     }),
 | |
|                     {
 | |
|                         name: "music-high-quality",
 | |
|                         fileCache,
 | |
|                         value: getFileCacheValue,
 | |
|                     }
 | |
|                 )
 | |
|             )
 | |
|             .pipe(gulp.dest(path.join(builtSoundsDir, "music")));
 | |
|     });
 | |
| 
 | |
|     // Encodes the ui sounds
 | |
|     gulp.task("sounds.sfxGenerateSprites", () => {
 | |
|         return gulp
 | |
|             .src([path.join(soundsDir, "sfx", "**", "*.wav"), path.join(soundsDir, "sfx", "**", "*.mp3")])
 | |
|             .pipe($.plumber())
 | |
|             .pipe(
 | |
|                 audiosprite({
 | |
|                     format: "howler",
 | |
|                     output: "sfx",
 | |
|                     gap: 0.1,
 | |
|                     export: "mp3",
 | |
|                 })
 | |
|             )
 | |
|             .pipe(gulp.dest(path.join(builtSoundsDir)));
 | |
|     });
 | |
|     gulp.task("sounds.sfxOptimize", () => {
 | |
|         return gulp
 | |
|             .src([path.join(builtSoundsDir, "sfx.mp3")])
 | |
|             .pipe($.plumber())
 | |
|             .pipe(
 | |
|                 $.fluentFfmpeg("mp3", function (cmd) {
 | |
|                     return cmd
 | |
|                         .audioBitrate(128)
 | |
|                         .audioChannels(1)
 | |
|                         .audioFrequency(22050)
 | |
|                         .audioCodec("libmp3lame")
 | |
|                         .audioFilters(filters);
 | |
|                 })
 | |
|             )
 | |
|             .pipe(gulp.dest(path.join(builtSoundsDir)));
 | |
|     });
 | |
|     gulp.task("sounds.sfxCopyAtlas", () => {
 | |
|         return gulp
 | |
|             .src([path.join(builtSoundsDir, "sfx.json")])
 | |
|             .pipe(gulp.dest(path.join(__dirname, "..", "src", "js", "built-temp")));
 | |
|     });
 | |
| 
 | |
|     gulp.task(
 | |
|         "sounds.sfx",
 | |
|         gulp.series("sounds.sfxGenerateSprites", "sounds.sfxOptimize", "sounds.sfxCopyAtlas")
 | |
|     );
 | |
| 
 | |
|     gulp.task("sounds.copy", () => {
 | |
|         return gulp
 | |
|             .src(path.join(builtSoundsDir, "**", "*.mp3"))
 | |
|             .pipe($.plumber())
 | |
|             .pipe(gulp.dest(path.join(buildFolder, "res", "sounds")));
 | |
|     });
 | |
| 
 | |
|     gulp.task("sounds.buildall", gulp.parallel("sounds.music", "sounds.sfx"));
 | |
|     gulp.task("sounds.buildallHQ", gulp.parallel("sounds.musicHQ", "sounds.sfx"));
 | |
| 
 | |
|     gulp.task("sounds.fullbuild", gulp.series("sounds.clear", "sounds.buildall", "sounds.copy"));
 | |
|     gulp.task("sounds.fullbuildHQ", gulp.series("sounds.clear", "sounds.buildallHQ", "sounds.copy"));
 | |
|     gulp.task("sounds.dev", gulp.series("sounds.buildall", "sounds.copy"));
 | |
| }
 | |
| 
 | |
| module.exports = {
 | |
|     gulptasksSounds,
 | |
| };
 |