You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.4 KiB
105 lines
2.4 KiB
3 years ago
|
/*
|
||
|
* To change this license header, choose License Headers in Project Properties.
|
||
|
* To change this template file, choose Tools | Templates
|
||
|
* and open the template in the editor.
|
||
|
*/
|
||
|
package moe.nekojimi.chords;
|
||
|
|
||
|
import java.util.regex.Matcher;
|
||
|
import java.util.regex.Pattern;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author jimj316
|
||
|
*/
|
||
|
class Format
|
||
|
{
|
||
|
|
||
|
private static final Pattern SIZE_PATTERN = Pattern.compile("\\b([0-9]+\\.?[0-9]*)([kkMmGg])i?[bB]\\b");
|
||
|
private static final Pattern BITRATE_PATTERN = Pattern.compile("\\b([0-9]+)k(b(ps?))?\\b");
|
||
|
|
||
|
private final String code;
|
||
|
private final String extension;
|
||
|
private final String resolution;
|
||
|
private final String note;
|
||
|
|
||
|
public Format(String code, String extension, String resolution, String note)
|
||
|
{
|
||
|
this.code = code;
|
||
|
this.extension = extension;
|
||
|
this.resolution = resolution;
|
||
|
this.note = note;
|
||
|
}
|
||
|
|
||
|
public boolean isAudioOnly()
|
||
|
{
|
||
|
return resolution.trim().toLowerCase().contains("audio only");
|
||
|
}
|
||
|
|
||
|
public long getSize()
|
||
|
{
|
||
|
// try to find eg. "1.32MiB" inside 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 -1;
|
||
|
}
|
||
|
|
||
|
public int getBitrate()
|
||
|
{
|
||
|
// try to find eg. "51k" inside note
|
||
|
Matcher matcher = BITRATE_PATTERN.matcher(note);
|
||
|
if (matcher.find())
|
||
|
{
|
||
|
return Integer.parseInt(matcher.group(1)) * 1000;
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
public String getCode()
|
||
|
{
|
||
|
return code;
|
||
|
}
|
||
|
|
||
|
public String getExtension()
|
||
|
{
|
||
|
return extension;
|
||
|
}
|
||
|
|
||
|
public String getResolution()
|
||
|
{
|
||
|
return resolution;
|
||
|
}
|
||
|
|
||
|
public String getNote()
|
||
|
{
|
||
|
return note;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString()
|
||
|
{
|
||
|
return "Format{" + "code=" + code + ", extension=" + extension + ", resolution=" + resolution + ", note=" + note + '}';
|
||
|
}
|
||
|
|
||
|
}
|