Comparto un script para el que quiera probar el audioSteam de nvgt. Básicamente cargan un audio y pueden mover la posición con flechas, subir y bajar con las teclas de abance y retroceso pag y controlar la rotación con q y e. Como comentó alguien mas arriva se esperan bugs:
include "speech.nvgt"
include "rotation.nvgt"
double moveRight(double x) {
x += 1.0;
if (x > 200.0)
x = 200.0;
return x;
}
double moveLeft(double x) {
x -= 1.0;
if (x < 0.0)
x = 0.0;
return x;
}
double moveUp(double y) {
y += 1.0;
if (y > 200.0)
y = 200.0;
return y;
}
double moveDown(double y) {
y -= 1.0;
if (y < 0.0)
y = 0.0;
return y;
}
double zUp(double z){
z+=1.0;
if(z>200.0)
z=200.0;
return z;
}
double zDown(double z){
z -= 1.0;
if (z < 0.0)
z = 0.0;
return z;
}
double rotateRight(double rotation) {
rotation += 45.0;
if (rotation >= 360.0)
rotation -= 360.0;
return rotation;
}
double rotateLeft(double rotation) {
rotation -= 45.0;
if (rotation < 0.0)
rotation += 360.0;
return rotation;
}
void main() {
string audioFile="inserte archivo aquí xd";
double x = 50.0; // Posición en primer persona
double y = 50.0;
double z = 50.0;
double soundX = 50.0; // Posición sonidos
double soundY = 50.0;
double soundZ = 50.0;
double rotation = 0.0;
double pan_step = 1.0;
double vol_step = 1.0; //por lo que entiendo es el rango de escucha.
mixer smixer;
set_sound_global_hrtf(true);
smixer.set_fx("freeverb:1.0:1.0:0.7:0.0:1.0");
show_window("Test audio");
wait(50);
screen_reader_output("Flechas para moverse, página arriba y abajo para mover sobre eje z, c corrdenadas primera persona, d corrdenadas audio y Alt+F4 para cerrar", true);
sound s;
s.set_mixer(@smixer);
s.load(audioFile);
s.play();
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
while (true) {
wait(5);
if (key_pressed(KEY_RIGHT) || key_repeating(KEY_RIGHT)) {
soundX = moveRight(soundX);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if (key_pressed(KEY_LEFT) || key_repeating(KEY_LEFT)) {
soundX = moveLeft(soundX);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if (key_pressed(KEY_UP) || key_repeating(KEY_UP)) {
soundY = moveUp(soundY);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if (key_pressed(KEY_DOWN) || key_repeating(KEY_DOWN)) {
soundY = moveDown(soundY);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if(key_pressed(KEY_PAGEUP) || key_repeating(KEY_PAGEUP)){
soundZ=zUp(soundZ);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if(key_pressed(KEY_PAGEDOWN) || key_repeating(KEY_PAGEDOWN)){
soundZ=zDown(soundZ);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if (key_pressed(KEY_Q)) {
rotation = rotateLeft(rotation);
speak(rotation);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if (key_pressed(KEY_E)) {
rotation = rotateRight(rotation);
speak(rotation);
s.set_position(x, y, z, soundX, soundY, soundZ, calculate_theta(rotation), pan_step, vol_step);
}
if(key_pressed(KEY_C)){
speak(x+", "+y+", "+z);
}
if(key_pressed(KEY_D)){
speak("sonido en "+soundX+", "+soundY+", "+soundZ);
}
if (keyboard_modifiers & KEYMOD_ALT >0 && key_pressed(KEY_F4)) {
exit();
}
}
}