package moe.nekojimi.chords; import java.nio.ByteBuffer; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * Copyright (C) 2022 jimj316 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * * @author jimj316 */ public class Util { private static final Pattern SIZE_PATTERN = Pattern.compile("\\b([0-9]+\\.?[0-9]*)([kkMmGg])i?[bB]\\b"); private static final Pattern SAMPLE_RATE_PATTERN = Pattern.compile("\\b([0-9]+)k(b(ps?))?\\b"); public static String printSamples(ByteBuffer buf) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < buf.limit(); i += 128) { sb.append(String.format("%x ", buf.get(i))); } return sb.toString(); } public static int parseSampleRate(String input) { Matcher matcher = SAMPLE_RATE_PATTERN.matcher(input); if (matcher.find()) { return Integer.parseInt(matcher.group(1)) * 1000; } return -1; } public static long parseSize(String note) { Matcher matcher = SIZE_PATTERN.matcher(note); if (matcher.find()) { double value = Double.parseDouble(matcher.group(1)); String mag = matcher.group(2).toUpperCase(); long mult = 1; switch (mag) { case "K": mult = 1024; break; case "M": mult = 1024 * 1024; break; case "G": mult = 1024 * 1024 * 1024; break; } value *= mult; return (long) value; } return -1L; } public static String formatProgressBar(double progressPercent, String[] symbols, int barLength) { String ret = ""; double filledSegments = (progressPercent / 100.0) * barLength; for (int i = 0; i < barLength; i++) { double thisSegment = Math.min(1, Math.max(0, filledSegments - i)); int symbolIdx = (int) Math.floor(thisSegment * symbols.length); String symbol = symbols[symbolIdx]; ret += symbol; } return ret; } }