Load audio from buffer instead of byte read.

This commit is contained in:
Tanasart 2023-05-29 18:35:33 +02:00
parent be9dc15065
commit f29208b0b2
6 changed files with 62 additions and 41 deletions

View File

@ -27,13 +27,13 @@ function Node_Color_RGB(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
var _nor = inputs[| 3].getValue();
if(_nor) {
inputs[| 0].type = VALUE_TYPE.integer;
inputs[| 0].type = VALUE_TYPE.float;
inputs[| 0].setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]);
inputs[| 1].type = VALUE_TYPE.integer;
inputs[| 1].type = VALUE_TYPE.float;
inputs[| 1].setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]);
inputs[| 2].type = VALUE_TYPE.integer;
inputs[| 2].type = VALUE_TYPE.float;
inputs[| 2].setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]);
} else {
inputs[| 0].type = VALUE_TYPE.integer;

View File

@ -859,7 +859,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(PANEL_GRAPH.show_dimension) {
var txt = string(getNodeDimension(_s > 0.65));
draw_text(round(tx), round(ty), txt);
ty += string_height(txt) - 4 * _s;
ty += string_height(txt) - 4;
}
if(PANEL_GRAPH.show_compute) {

View File

@ -107,6 +107,9 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
var ch = content.channels;
if(ch == 0) return;
if(!struct_has(content, "sound")) return;
if(array_length(content.sound) < 1) return;
var len = array_length(content.sound[0]);
if(len == 0) return;
@ -179,7 +182,7 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
insp1UpdateTooltip = get_text("panel_inspector_refresh", "Refresh");
insp1UpdateIcon = [ THEME.refresh, 1, COLORS._main_value_positive ];
insp2UpdateTooltip = get_text("play", "Play");
insp2UpdateTooltip = get_text("play_with_timeline", "Play with timeline");
insp2UpdateIcon = [ THEME.play_sound, 1, COLORS._main_icon_light ];
attributes[? "play"] = true;
@ -239,6 +242,9 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
//print($"{amp_ind}: {amp_st} - {amp_ed}")
if(!struct_has(content, "sound")) return;
if(array_length(content.sound) < 1) return;
var dec = 0;
for( var i = amp_st; i < amp_ed; i++ )
dec += content.sound[0][i] == 0? 0 : 20 * log10(abs(content.sound[0][i]));
@ -291,6 +297,9 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
var _am = content.packet / _st;
var ox, oy, nx, ny;
if(!struct_has(content, "sound")) return;
if(array_length(content.sound) < 1) return;
for( var i = 0; i <= _am; i++ ) {
var _dat = content.sound[0][min(i * _st, content.packet - 1)];
nx = _shf + i * _s;

View File

@ -16,8 +16,8 @@ function Panel_Graph_Export_Image(targetPanel) : PanelContent() constructor {
bgColor : COLORS.panel_bg_clear,
gridEnable : false,
gridColor : c_white,
gridAlpha : 0.05,
gridColor : targetPanel.grid_color,
gridAlpha : targetPanel.grid_opacity,
borderPad : 0,
borderColor : c_white,
@ -140,15 +140,16 @@ function Panel_Graph_Export_Image(targetPanel) : PanelContent() constructor {
sc_settings.draw(sx, sy, mx - sx, my - sy);
if(is_surface(surface)) {
var txt = "Export...";
draw_set_text(f_p1, fa_left, fa_top, COLORS._main_text);
var _bw = string_width("Export") + ui(32);
var _bh = string_height("Export") + ui(12);
var _bw = string_width(txt) + ui(32);
var _bh = string_height(txt) + ui(12);
bx = w - padding - _bw;
by = h - padding - _bh;
b_export.setActiveFocus(pFOCUS, pHOVER);
b_export.draw(bx, by, _bw, _bh, _m);
draw_text(bx + ui(16), by + ui(6), "Export");
draw_text(bx + ui(16), by + ui(6), txt);
}
}
}

View File

@ -81,14 +81,11 @@
var v1 = getVal(l, inp);
var v2 = getVal(r, inp, symbol == "|");
//print("symbol " + string(symbol));
//print("l : " + string(l));
//print("r : " + string(r));
//print("v1 : " + string(v1));
//print("v2 : " + string(v2));
//print("====================");
//print($"{string(v1)} {symbol} {string(v2)}");
//print($"symbol : {symbol}");
//print($"l : {l}");
//print($"r : {r}");
//print("====================");
switch(symbol) {
@ -212,15 +209,22 @@
switch(operator) {
case "-": //deal with preceeding megative number -5
if(ds_stack_size(vl) >= 2) return new __funcTree("-", ds_stack_pop(vl), ds_stack_pop(vl));
else return new __funcTree("-", ds_stack_pop(vl), 0);
if(ds_stack_size(vl) >= 2) {
var _v1 = ds_stack_pop(vl);
var _v2 = ds_stack_pop(vl);
return new __funcTree("-", _v2, _v1);
} else return new __funcTree("-", ds_stack_pop(vl), 0);
case "+": //binary operators
case "*":
case "^":
case "/":
case "|":
if(ds_stack_size(vl) >= 2) return new __funcTree(operator, ds_stack_pop(vl), ds_stack_pop(vl));
if(ds_stack_size(vl) >= 2) {
var _v1 = ds_stack_pop(vl);
var _v2 = ds_stack_pop(vl);
return new __funcTree(operator, _v2, _v1);
}
default: return new __funcTree(operator, ds_stack_pop(vl));
}

View File

@ -1,7 +1,8 @@
function file_read_ASCII(file, amo = 1) {
var b = "";
repeat(amo)
b += chr(file_bin_read_byte(file));
b += chr(buffer_read(file, buffer_u8));
//b += chr(file_bin_read_byte(file));
return b;
}
@ -9,7 +10,8 @@ function file_read_bytes(file, amo = 1, signed = false, little_endian = true) {
var b = 0;
var m = little_endian? 1 : 1 << ((amo - 1) * 8);
repeat(amo) {
b += file_bin_read_byte(file) * m;
//b += file_bin_read_byte(file) * m;
b += buffer_read(file, buffer_u8) * m;
m = little_endian? m * 256 : m / 256;
}
@ -25,37 +27,39 @@ function file_read_bytes(file, amo = 1, signed = false, little_endian = true) {
global.FLAG.wav_import = true;
function file_read_wav(path) {
wav_file_reader = file_bin_open(path, 0);
wav_file_reader = buffer_load(path);
wav_file_reading = true;
wav_file_prg = 0;
wav_file_load_time = current_time;
//RIFF
printIf(global.FLAG.wav_import, "-- RIFF --")
var b = file_read_ASCII(wav_file_reader, 4); printIf(global.FLAG.wav_import, b);
var l = file_read_bytes(wav_file_reader, 4); printIf(global.FLAG.wav_import, $"Packages: {l}");
var l = buffer_read(wav_file_reader, buffer_u32); printIf(global.FLAG.wav_import, $"Packages: {l}");
var w = file_read_ASCII(wav_file_reader, 4); printIf(global.FLAG.wav_import, w);
//FORMAT
printIf(global.FLAG.wav_import, "-- FORMAT --")
var b = file_read_ASCII(wav_file_reader, 4); printIf(global.FLAG.wav_import, b);
var l = file_read_bytes(wav_file_reader, 4); printIf(global.FLAG.wav_import, $"Length: {l}");
var l = buffer_read(wav_file_reader, buffer_u32); printIf(global.FLAG.wav_import, $"Length: {l}");
if(l != 16) {
noti_waning("File format not supported, the audio file need to be 8, 16 bit PCM wav with no extension.");
return;
noti_warning("File format not supported, the audio file need to be 8, 16 bit PCM wav with no extension.");
return noone;
}
var l = file_read_bytes(wav_file_reader, 2); printIf(global.FLAG.wav_import, $"0x01: {l}");
var ch = file_read_bytes(wav_file_reader, 2); printIf(global.FLAG.wav_import, $"Channels: {ch}");
var sm = file_read_bytes(wav_file_reader, 4); printIf(global.FLAG.wav_import, $"Sample: {sm}");
var l = file_read_bytes(wav_file_reader, 4); printIf(global.FLAG.wav_import, $"BPS: {l}");
var br = file_read_bytes(wav_file_reader, 2); printIf(global.FLAG.wav_import, $"Bitrate: {br}");
var l = file_read_bytes(wav_file_reader, 2); printIf(global.FLAG.wav_import, $"Bit/Sam: {l}");
var l = buffer_read(wav_file_reader, buffer_u16); printIf(global.FLAG.wav_import, $"0x01: {l}");
var ch = buffer_read(wav_file_reader, buffer_u16); printIf(global.FLAG.wav_import, $"Channels: {ch}");
var sm = buffer_read(wav_file_reader, buffer_u32); printIf(global.FLAG.wav_import, $"Sample: {sm}");
var l = buffer_read(wav_file_reader, buffer_u32); printIf(global.FLAG.wav_import, $"BPS: {l}");
var br = buffer_read(wav_file_reader, buffer_u16); printIf(global.FLAG.wav_import, $"Bitrate: {br}");
var l = buffer_read(wav_file_reader, buffer_u16); printIf(global.FLAG.wav_import, $"Bit/Sam: {l}");
//DATA
printIf(global.FLAG.wav_import, "-- DATA --")
var b = file_read_ASCII(wav_file_reader, 4); printIf(global.FLAG.wav_import, b);
var l = file_read_bytes(wav_file_reader, 4); printIf(global.FLAG.wav_import, $"Length: {l}");
var l = buffer_read(wav_file_reader, buffer_u32); printIf(global.FLAG.wav_import, $"Length: {l}");
var bpc = br / ch;
var bits = l / br;
@ -87,23 +91,26 @@ function file_read_wav(path) {
function file_read_wav_step() {
if(!wav_file_reading) return false;
var bpc = content.bit_depth / 8;
var lim = 1 << (8 * bpc - 2);
var t = current_time;
var bf_type, lim;
if(content.bit_depth == 8) { bf_type = buffer_u8; lim = 255; }
else if(content.bit_depth == 16) { bf_type = buffer_s16; lim = 32_768; }
else if(content.bit_depth == 32) { bf_type = buffer_s32; lim = 2_147_483_648; }
for(; wav_file_prg < content.packet; wav_file_prg++ ) {
for( var j = 0; j < content.channels; j++ )
content.sound[j][wav_file_prg] = file_read_bytes(wav_file_reader, bpc, bpc == 2) / lim;
content.sound[j][wav_file_prg] = buffer_read(wav_file_reader, bf_type) / lim;
wav_file_range[0] = min(wav_file_range[0], content.sound[0][wav_file_prg]);
wav_file_range[1] = max(wav_file_range[1], content.sound[0][wav_file_prg]);
//wav_file_range[0] = min(wav_file_range[0], content.sound[0][wav_file_prg]);
//wav_file_range[1] = max(wav_file_range[1], content.sound[0][wav_file_prg]);
if(current_time - t > 1000 / 30) return false;
}
printIf(global.FLAG.wav_import, $"Wav range: {wav_file_range}");
//printIf(global.FLAG.wav_import, $"Wav range: {wav_file_range}");
printIf(global.FLAG.wav_import, $"Load file complete in: {(current_time - wav_file_load_time) / 1000} s.");
wav_file_reading = false;
file_bin_close(wav_file_reader);
buffer_delete(wav_file_reader);
return true;
}