mirror of https://github.com/bjornbytes/lovr.git
Sound:setFrames should use a stream's write buffer size, not read buffer size
otherwise you can never fill up a stream from scratch
This commit is contained in:
parent
9f45e7a9c5
commit
6566423f66
|
@ -166,7 +166,7 @@ static int l_lovrSoundSetFrames(lua_State* L) {
|
||||||
Sound* sound = luax_checktype(L, 1, Sound);
|
Sound* sound = luax_checktype(L, 1, Sound);
|
||||||
size_t stride = lovrSoundGetStride(sound);
|
size_t stride = lovrSoundGetStride(sound);
|
||||||
SampleFormat format = lovrSoundGetFormat(sound);
|
SampleFormat format = lovrSoundGetFormat(sound);
|
||||||
uint32_t frameCount = lovrSoundGetFrameCount(sound);
|
uint32_t frameCount = lovrSoundGetCapacity(sound);
|
||||||
uint32_t channels = lovrSoundGetChannelCount(sound);
|
uint32_t channels = lovrSoundGetChannelCount(sound);
|
||||||
|
|
||||||
if (lua_isuserdata(L, 2)) {
|
if (lua_isuserdata(L, 2)) {
|
||||||
|
@ -186,7 +186,7 @@ static int l_lovrSoundSetFrames(lua_State* L) {
|
||||||
if (other) {
|
if (other) {
|
||||||
uint32_t srcOffset = luaL_optinteger(L, 5, 0);
|
uint32_t srcOffset = luaL_optinteger(L, 5, 0);
|
||||||
uint32_t dstOffset = luaL_optinteger(L, 4, 0);
|
uint32_t dstOffset = luaL_optinteger(L, 4, 0);
|
||||||
uint32_t count = luaL_optinteger(L, 3, lovrSoundGetFrameCount(other) - srcOffset);
|
uint32_t count = luaL_optinteger(L, 3, lovrSoundGetCapacity(other) - srcOffset);
|
||||||
uint32_t frames = lovrSoundCopy(other, sound, count, srcOffset, dstOffset);
|
uint32_t frames = lovrSoundCopy(other, sound, count, srcOffset, dstOffset);
|
||||||
lua_pushinteger(L, frames);
|
lua_pushinteger(L, frames);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -202,7 +202,7 @@ static int l_lovrSoundSetFrames(lua_State* L) {
|
||||||
uint32_t dstOffset = luaL_optinteger(L, 4, 0);
|
uint32_t dstOffset = luaL_optinteger(L, 4, 0);
|
||||||
uint32_t limit = MIN(frameCount - dstOffset, (length - srcOffset) / channels + 1);
|
uint32_t limit = MIN(frameCount - dstOffset, (length - srcOffset) / channels + 1);
|
||||||
uint32_t count = luaL_optinteger(L, 3, limit);
|
uint32_t count = luaL_optinteger(L, 3, limit);
|
||||||
lovrAssert(count <= limit, "Tried to write too many frames");
|
lovrAssert(count <= limit, "Tried to write too many frames (%d is over limit %d)", count, limit);
|
||||||
|
|
||||||
uint32_t frames = 0;
|
uint32_t frames = 0;
|
||||||
while (frames < count) {
|
while (frames < count) {
|
||||||
|
|
|
@ -367,6 +367,10 @@ uint32_t lovrSoundGetFrameCount(Sound* sound) {
|
||||||
return sound->stream ? ma_pcm_rb_available_read(sound->stream) : sound->frames;
|
return sound->stream ? ma_pcm_rb_available_read(sound->stream) : sound->frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t lovrSoundGetCapacity(Sound* sound) {
|
||||||
|
return sound->stream ? ma_pcm_rb_available_write(sound->stream) : sound->frames;
|
||||||
|
}
|
||||||
|
|
||||||
size_t lovrSoundGetStride(Sound* sound) {
|
size_t lovrSoundGetStride(Sound* sound) {
|
||||||
return lovrSoundGetChannelCount(sound) * (sound->format == SAMPLE_I16 ? sizeof(short) : sizeof(float));
|
return lovrSoundGetChannelCount(sound) * (sound->format == SAMPLE_I16 ? sizeof(short) : sizeof(float));
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ ChannelLayout lovrSoundGetChannelLayout(Sound* sound);
|
||||||
uint32_t lovrSoundGetChannelCount(Sound* sound);
|
uint32_t lovrSoundGetChannelCount(Sound* sound);
|
||||||
uint32_t lovrSoundGetSampleRate(Sound* sound);
|
uint32_t lovrSoundGetSampleRate(Sound* sound);
|
||||||
uint32_t lovrSoundGetFrameCount(Sound* sound);
|
uint32_t lovrSoundGetFrameCount(Sound* sound);
|
||||||
|
uint32_t lovrSoundGetCapacity(Sound* sound);
|
||||||
size_t lovrSoundGetStride(Sound* sound);
|
size_t lovrSoundGetStride(Sound* sound);
|
||||||
bool lovrSoundIsCompressed(Sound* sound);
|
bool lovrSoundIsCompressed(Sound* sound);
|
||||||
bool lovrSoundIsStream(Sound* sound);
|
bool lovrSoundIsStream(Sound* sound);
|
||||||
|
|
Loading…
Reference in New Issue