mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-11-10 08:44:47 +00:00
89 lines
2.1 KiB
Haxe
89 lines
2.1 KiB
Haxe
package audiovis;
|
|
|
|
import audiovis.VisShit.CurAudioInfo;
|
|
import flixel.math.FlxMath;
|
|
import flixel.math.FlxPoint;
|
|
import flixel.system.FlxSound;
|
|
import flixel.util.FlxColor;
|
|
import lime.utils.Int16Array;
|
|
import rendering.MeshRender;
|
|
|
|
class PolygonSpectogram extends MeshRender
|
|
{
|
|
var sampleRate:Int;
|
|
|
|
public var vis:VisShit;
|
|
public var daHeight:Float = FlxG.height;
|
|
|
|
var numSamples:Int = 0;
|
|
var setBuffer:Bool = false;
|
|
|
|
public var audioData:Int16Array;
|
|
public var detail:Float = 1;
|
|
|
|
public function new(daSound:FlxSound, ?col:FlxColor = FlxColor.WHITE, ?height:Float = 720, ?detail:Float = 1)
|
|
{
|
|
super(0, 0);
|
|
|
|
vis = new VisShit(daSound);
|
|
|
|
if (height != null)
|
|
this.daHeight = height;
|
|
|
|
this.detail = detail;
|
|
|
|
// col not in yet
|
|
}
|
|
|
|
/**
|
|
* Generates and draws a section of the audio data to a visual waveform
|
|
* @param start start of the song in milliseconds
|
|
* @param seconds how long to generate (also in milliseconds)
|
|
*/
|
|
public function generateSection(start:Float = 0, seconds:Float = 1):Void
|
|
{
|
|
checkAndSetBuffer();
|
|
|
|
if (setBuffer)
|
|
{
|
|
clear();
|
|
|
|
var samplesToGen:Int = Std.int(sampleRate * seconds);
|
|
// gets which sample to start at
|
|
var startSample:Int = Std.int(FlxMath.remapToRange(start, 0, vis.snd.length, 0, numSamples));
|
|
|
|
var prevPoint:FlxPoint = new FlxPoint();
|
|
|
|
for (i in 0...500)
|
|
{
|
|
var sampleApprox:Int = Std.int(FlxMath.remapToRange(i, 0, 500, startSample, startSample + samplesToGen));
|
|
var curAud:CurAudioInfo = VisShit.getCurAud(audioData, sampleApprox);
|
|
|
|
var waveAmplitude:Int = 200;
|
|
|
|
var coolPoint:FlxPoint = new FlxPoint();
|
|
coolPoint.x = (curAud.balanced * waveAmplitude / 2 + waveAmplitude / 2);
|
|
coolPoint.y = (i / 500 * daHeight);
|
|
|
|
add_quad(prevPoint.x, prevPoint.y, coolPoint.x, coolPoint.y, prevPoint.x, prevPoint.x + 1, coolPoint.x, coolPoint.y + 1);
|
|
|
|
prevPoint.x = coolPoint.x;
|
|
prevPoint.y = coolPoint.y;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function checkAndSetBuffer()
|
|
{
|
|
vis.checkAndSetBuffer();
|
|
|
|
if (vis.setBuffer)
|
|
{
|
|
audioData = vis.audioData;
|
|
sampleRate = vis.sampleRate;
|
|
setBuffer = vis.setBuffer;
|
|
numSamples = Std.int(audioData.length / 2);
|
|
}
|
|
}
|
|
}
|