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);
|
||||
size_t stride = lovrSoundGetStride(sound);
|
||||
SampleFormat format = lovrSoundGetFormat(sound);
|
||||
uint32_t frameCount = lovrSoundGetFrameCount(sound);
|
||||
uint32_t frameCount = lovrSoundGetCapacity(sound);
|
||||
uint32_t channels = lovrSoundGetChannelCount(sound);
|
||||
|
||||
if (lua_isuserdata(L, 2)) {
|
||||
|
@ -186,7 +186,7 @@ static int l_lovrSoundSetFrames(lua_State* L) {
|
|||
if (other) {
|
||||
uint32_t srcOffset = luaL_optinteger(L, 5, 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);
|
||||
lua_pushinteger(L, frames);
|
||||
return 1;
|
||||
|
@ -202,7 +202,7 @@ static int l_lovrSoundSetFrames(lua_State* L) {
|
|||
uint32_t dstOffset = luaL_optinteger(L, 4, 0);
|
||||
uint32_t limit = MIN(frameCount - dstOffset, (length - srcOffset) / channels + 1);
|
||||
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;
|
||||
while (frames < count) {
|
||||
|
|
|
@ -367,6 +367,10 @@ uint32_t lovrSoundGetFrameCount(Sound* sound) {
|
|||
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) {
|
||||
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 lovrSoundGetSampleRate(Sound* sound);
|
||||
uint32_t lovrSoundGetFrameCount(Sound* sound);
|
||||
uint32_t lovrSoundGetCapacity(Sound* sound);
|
||||
size_t lovrSoundGetStride(Sound* sound);
|
||||
bool lovrSoundIsCompressed(Sound* sound);
|
||||
bool lovrSoundIsStream(Sound* sound);
|
||||
|
|
Loading…
Reference in New Issue