mirror of https://github.com/bjornbytes/lovr.git
48khz sample rate; fixes;
This commit is contained in:
parent
93ea56155e
commit
177a94738d
|
@ -309,7 +309,7 @@ target_link_libraries(lovr
|
||||||
if(LOVR_ENABLE_AUDIO)
|
if(LOVR_ENABLE_AUDIO)
|
||||||
target_sources(lovr PRIVATE
|
target_sources(lovr PRIVATE
|
||||||
src/modules/audio/audio.c
|
src/modules/audio/audio.c
|
||||||
src/modules/audio/spatializers/dummy_spatializer.c
|
src/modules/audio/spatializers/simple_spatializer.c
|
||||||
src/api/l_audio.c
|
src/api/l_audio.c
|
||||||
src/api/l_audio_source.c
|
src/api/l_audio_source.c
|
||||||
src/lib/miniaudio/miniaudio.c
|
src/lib/miniaudio/miniaudio.c
|
||||||
|
|
|
@ -43,8 +43,8 @@ static int l_lovrAudioSetDevice(lua_State *L) {
|
||||||
AudioType type = luax_checkenum(L, 1, AudioType, "playback");
|
AudioType type = luax_checkenum(L, 1, AudioType, "playback");
|
||||||
void* id = lua_touserdata(L, 2);
|
void* id = lua_touserdata(L, 2);
|
||||||
size_t size = luax_len(L, 2);
|
size_t size = luax_len(L, 2);
|
||||||
uint32_t sampleRate = lua_tointeger(L, 2);
|
uint32_t sampleRate = lua_tointeger(L, 3);
|
||||||
SampleFormat format = luax_checkenum(L, 1, SampleFormat, "f32");
|
SampleFormat format = luax_checkenum(L, 4, SampleFormat, "f32");
|
||||||
bool success = lovrAudioSetDevice(type, id, size, sampleRate, format);
|
bool success = lovrAudioSetDevice(type, id, size, sampleRate, format);
|
||||||
lua_pushboolean(L, success);
|
lua_pushboolean(L, success);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -174,7 +174,7 @@ int luaopen_lovr_audio(lua_State* L) {
|
||||||
lua_pop(L, 2);
|
lua_pop(L, 2);
|
||||||
|
|
||||||
if (lovrAudioInit(spatializer)) {
|
if (lovrAudioInit(spatializer)) {
|
||||||
lovrAudioSetDevice(AUDIO_PLAYBACK, NULL, 0, 44100, SAMPLE_F32);
|
lovrAudioSetDevice(AUDIO_PLAYBACK, NULL, 0, PLAYBACK_SAMPLE_RATE, SAMPLE_F32);
|
||||||
lovrAudioStart(AUDIO_PLAYBACK);
|
lovrAudioStart(AUDIO_PLAYBACK);
|
||||||
luax_atexit(L, lovrAudioDestroy);
|
luax_atexit(L, lovrAudioDestroy);
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,10 +66,9 @@ static void onPlayback(ma_device* device, void* out, const void* in, uint32_t co
|
||||||
state.leftoverFrames -= leftoverFrames;
|
state.leftoverFrames -= leftoverFrames;
|
||||||
output += leftoverFrames * OUTPUT_CHANNELS;
|
output += leftoverFrames * OUTPUT_CHANNELS;
|
||||||
count -= leftoverFrames;
|
count -= leftoverFrames;
|
||||||
}
|
if (count == 0) {
|
||||||
|
return;
|
||||||
if (count == 0) {
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ma_mutex_lock(&state.lock);
|
ma_mutex_lock(&state.lock);
|
||||||
|
@ -185,7 +184,7 @@ bool lovrAudioInit(const char* spatializer) {
|
||||||
SpatializerConfig spatializerConfig = {
|
SpatializerConfig spatializerConfig = {
|
||||||
.maxSourcesHint = MAX_SOURCES,
|
.maxSourcesHint = MAX_SOURCES,
|
||||||
.fixedBuffer = BUFFER_SIZE,
|
.fixedBuffer = BUFFER_SIZE,
|
||||||
.sampleRate = 44100
|
.sampleRate = PLAYBACK_SAMPLE_RATE
|
||||||
};
|
};
|
||||||
|
|
||||||
for (size_t i = 0; i < sizeof(spatializers) / sizeof(spatializers[0]); i++) {
|
for (size_t i = 0; i < sizeof(spatializers) / sizeof(spatializers[0]); i++) {
|
||||||
|
@ -264,8 +263,8 @@ bool lovrAudioSetDevice(AudioType type, void* id, size_t size, uint32_t sampleRa
|
||||||
ma_device_config config;
|
ma_device_config config;
|
||||||
|
|
||||||
if (type == AUDIO_PLAYBACK) {
|
if (type == AUDIO_PLAYBACK) {
|
||||||
lovrAssert(sampleRate == 44100, "");
|
lovrAssert(sampleRate == PLAYBACK_SAMPLE_RATE, "Playback sample rate must be %d", PLAYBACK_SAMPLE_RATE);
|
||||||
lovrAssert(format == SAMPLE_F32, "");
|
lovrAssert(format == SAMPLE_F32, "Playback format must be f32");
|
||||||
config = ma_device_config_init(ma_device_type_playback);
|
config = ma_device_config_init(ma_device_type_playback);
|
||||||
config.playback.pDeviceID = (ma_device_id*) id;
|
config.playback.pDeviceID = (ma_device_id*) id;
|
||||||
config.playback.format = miniaudioFormats[format];
|
config.playback.format = miniaudioFormats[format];
|
||||||
|
@ -280,7 +279,7 @@ bool lovrAudioSetDevice(AudioType type, void* id, size_t size, uint32_t sampleRa
|
||||||
}
|
}
|
||||||
|
|
||||||
config.sampleRate = sampleRate;
|
config.sampleRate = sampleRate;
|
||||||
config.performanceProfile = ma_performance_profile_low_latency;
|
config.periodSizeInFrames = BUFFER_SIZE;
|
||||||
config.dataCallback = callbacks[type];
|
config.dataCallback = callbacks[type];
|
||||||
|
|
||||||
ma_device_uninit(&state.devices[type]);
|
ma_device_uninit(&state.devices[type]);
|
||||||
|
@ -350,7 +349,7 @@ Source* lovrSourceCreate(SoundData* sound, bool spatial) {
|
||||||
config.channelsIn = sound->channels;
|
config.channelsIn = sound->channels;
|
||||||
config.channelsOut = outputChannelCountForSource(source);
|
config.channelsOut = outputChannelCountForSource(source);
|
||||||
config.sampleRateIn = sound->sampleRate;
|
config.sampleRateIn = sound->sampleRate;
|
||||||
config.sampleRateOut = 44100;
|
config.sampleRateOut = PLAYBACK_SAMPLE_RATE;
|
||||||
|
|
||||||
ma_data_converter* converter = malloc(sizeof(ma_data_converter));
|
ma_data_converter* converter = malloc(sizeof(ma_data_converter));
|
||||||
ma_result converterStatus = ma_data_converter_init(&config, converter);
|
ma_result converterStatus = ma_data_converter_init(&config, converter);
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#define PLAYBACK_SAMPLE_RATE 48000
|
||||||
|
|
||||||
struct SoundData;
|
struct SoundData;
|
||||||
|
|
||||||
typedef struct Source Source;
|
typedef struct Source Source;
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
package org.lovr.app;
|
package org.lovr.app;
|
||||||
import android.app.NativeActivity;
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.NativeActivity;
|
import android.app.NativeActivity;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class Activity extends NativeActivity {
|
public class Activity extends NativeActivity {
|
||||||
static {
|
static {
|
||||||
|
@ -12,12 +9,6 @@ public class Activity extends NativeActivity {
|
||||||
System.loadLibrary("vrapi");
|
System.loadLibrary("vrapi");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
Log.i("LOVR", "MainActivity.onCreate()");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected native void lovrPermissionEvent(int permission, boolean granted);
|
protected native void lovrPermissionEvent(int permission, boolean granted);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -25,12 +16,10 @@ public class Activity extends NativeActivity {
|
||||||
{
|
{
|
||||||
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
|
||||||
{
|
{
|
||||||
Log.i("LOVR", "RECORD_AUDIO granted.");
|
|
||||||
lovrPermissionEvent(0, true);
|
lovrPermissionEvent(0, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.i("LOVR", "RECORD_AUDIO rejected.");
|
|
||||||
lovrPermissionEvent(0, false);
|
lovrPermissionEvent(0, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,12 +29,10 @@ public class Activity extends NativeActivity {
|
||||||
int existingPermission = checkSelfPermission(Manifest.permission.RECORD_AUDIO);
|
int existingPermission = checkSelfPermission(Manifest.permission.RECORD_AUDIO);
|
||||||
if(existingPermission != PackageManager.PERMISSION_GRANTED)
|
if(existingPermission != PackageManager.PERMISSION_GRANTED)
|
||||||
{
|
{
|
||||||
Log.i("LOVR", "Asking for RECORD_AUDIO permissions.");
|
|
||||||
requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 1);
|
requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.i("LOVR", "RECORD_AUDIO already permitted.");
|
|
||||||
lovrPermissionEvent(0, true);
|
lovrPermissionEvent(0, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue