Files
fs2open.github.com/code/scripting/api/objs/audio_stream.cpp
T
asarium 1001bfb760 Add generic audio stream API
The previous API only allowed very limited access to the audio stream
system. These changes add full support for playing all types of audio
streams via a dedicated API.
2020-08-08 19:36:39 +02:00

96 lines
2.2 KiB
C++

#include "audio_stream.h"
#include "sound/audiostr.h"
namespace scripting {
namespace api {
//**********HANDLE: Asteroid
ADE_OBJ(l_AudioStream, int, "audio_stream", "An audio stream handle");
ADE_FUNC(play,
l_AudioStream,
"[number volume = -1.0 /* By default uses preset volume of the stream type */, boolean loop = false]",
"Starts playing the audio stream",
"boolean",
"true on success, false otherwise")
{
int streamHandle = -1;
float volume = -1.0f;
bool loop = false;
if (!ade_get_args(L, "o|fb", l_AudioStream.Get(&streamHandle), &volume, &loop)) {
return ADE_RETURN_FALSE;
}
if (streamHandle < 0) {
return ade_set_args(L, "b", false);
}
audiostream_play(streamHandle, volume, loop ? 1 : 0);
return ade_set_args(L, "b", true);
}
ADE_FUNC(pause, l_AudioStream, nullptr, "Pauses the audio stream", "boolean", "true on success, false otherwise")
{
int streamHandle = -1;
if (!ade_get_args(L, "o", l_AudioStream.Get(&streamHandle))) {
return ADE_RETURN_FALSE;
}
if (streamHandle < 0) {
return ADE_RETURN_FALSE;
}
audiostream_pause(streamHandle, true);
return ade_set_args(L, "b", true);
}
ADE_FUNC(unpause, l_AudioStream, nullptr, "Unpauses the audio stream", "boolean", "true on success, false otherwise")
{
int streamHandle = -1;
if (!ade_get_args(L, "o", l_AudioStream.Get(&streamHandle))) {
return ADE_RETURN_FALSE;
}
if (streamHandle < 0) {
return ADE_RETURN_FALSE;
}
audiostream_unpause(streamHandle, true);
return ade_set_args(L, "b", true);
}
ADE_FUNC(stop, l_AudioStream, nullptr, "Stops the audio stream", "boolean", "true on success, false otherwise")
{
int streamHandle = -1;
if (!ade_get_args(L, "o", l_AudioStream.Get(&streamHandle))) {
return ADE_RETURN_FALSE;
}
if (streamHandle < 0) {
return ADE_RETURN_FALSE;
}
audiostream_stop(streamHandle);
return ade_set_args(L, "b", true);
}
ADE_FUNC(isValid,
l_AudioStream,
nullptr,
"Determines if the handle is valid",
"boolean",
"true if valid, false otherwise")
{
int streamHandle = -1;
if (!ade_get_args(L, "o", l_AudioStream.Get(&streamHandle))) {
return ADE_RETURN_FALSE;
}
return ade_set_args(L, "b", streamHandle >= 0);
}
} // namespace api
} // namespace scripting