Skip to content

Commit 035d438

Browse files
committed
Merge feat/openal-capture
2 parents 4848933 + bc86288 commit 035d438

File tree

4 files changed

+223
-0
lines changed

4 files changed

+223
-0
lines changed

project/src/media/openal/OpenALBindings.cpp

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ namespace lime {
174174
}
175175
*/
176176

177+
177178
void lime_al_auxf (value aux, int param, float value) {
178179

179180
#ifdef LIME_OPENALSOFT
@@ -3729,6 +3730,101 @@ namespace lime {
37293730
}
37303731

37313732

3733+
value lime_alc_capture_open_device (HxString devicename, int frequency, int format, int buffersize) {
3734+
3735+
ALCdevice* alcDevice = alcCaptureOpenDevice (devicename.__s, frequency, format, buffersize);
3736+
3737+
value ptr = CFFIPointer (alcDevice, gc_alc_object);
3738+
alcObjects[alcDevice] = ptr;
3739+
return ptr;
3740+
3741+
}
3742+
3743+
3744+
HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_capture_open_device) (hl_vstring* devicename, int frequency, int format, int buffersize) {
3745+
3746+
ALCdevice* alcDevice = alcCaptureOpenDevice (devicename ? (char*)hl_to_utf8 ((const uchar*)devicename->bytes) : 0, frequency, format, buffersize);
3747+
3748+
HL_CFFIPointer* ptr = HLCFFIPointer (alcDevice, (hl_finalizer)hl_gc_alc_object);
3749+
alcObjects[alcDevice] = ptr;
3750+
return ptr;
3751+
3752+
}
3753+
3754+
3755+
bool lime_alc_capture_close_device (value device) {
3756+
3757+
al_gc_mutex.Lock ();
3758+
ALCdevice* alcDevice = (ALCdevice*)val_data (device);
3759+
alcObjects.erase (alcDevice);
3760+
al_gc_mutex.Unlock ();
3761+
3762+
return alcCaptureCloseDevice (alcDevice);
3763+
3764+
}
3765+
3766+
3767+
HL_PRIM bool HL_NAME(hl_alc_capture_close_device) (HL_CFFIPointer* device) {
3768+
3769+
al_gc_mutex.Lock ();
3770+
ALCdevice* alcDevice = (ALCdevice*)device->ptr;
3771+
alcObjects.erase (alcDevice);
3772+
al_gc_mutex.Unlock ();
3773+
3774+
return alcCaptureCloseDevice (alcDevice);
3775+
3776+
}
3777+
3778+
3779+
void lime_alc_capture_start (value device) {
3780+
3781+
ALCdevice* alcDevice = (ALCdevice*)val_data (device);
3782+
alcCaptureStart (alcDevice);
3783+
3784+
}
3785+
3786+
3787+
HL_PRIM void HL_NAME(hl_alc_capture_start) (HL_CFFIPointer* device) {
3788+
3789+
ALCdevice* alcDevice = (ALCdevice*)device->ptr;
3790+
alcCaptureStart (alcDevice);
3791+
3792+
}
3793+
3794+
3795+
void lime_alc_capture_stop (value device) {
3796+
3797+
ALCdevice* alcDevice = (ALCdevice*)val_data (device);
3798+
alcCaptureStop (alcDevice);
3799+
3800+
}
3801+
3802+
3803+
HL_PRIM void HL_NAME(hl_alc_capture_stop) (HL_CFFIPointer* device) {
3804+
3805+
ALCdevice* alcDevice = (ALCdevice*)device->ptr;
3806+
alcCaptureStop (alcDevice);
3807+
3808+
}
3809+
3810+
3811+
void lime_alc_capture_samples (value device, value buffer, int samples) {
3812+
3813+
ALCdevice* alcDevice = (ALCdevice*)val_data (device);
3814+
Bytes bytes (buffer);
3815+
alcCaptureSamples (alcDevice, bytes.b, samples);
3816+
3817+
}
3818+
3819+
3820+
HL_PRIM void HL_NAME(hl_alc_capture_samples) (HL_CFFIPointer* device, Bytes* buffer, int samples) {
3821+
3822+
ALCdevice* alcDevice = (ALCdevice*)device->ptr;
3823+
alcCaptureSamples (alcDevice, buffer->b, samples);
3824+
3825+
}
3826+
3827+
37323828

37333829

37343830
DEFINE_PRIME3v (lime_al_auxf);
@@ -3849,6 +3945,11 @@ namespace lime {
38493945
DEFINE_PRIME3v (lime_alc_event_control_soft);
38503946
DEFINE_PRIME2v (lime_alc_event_callback_soft);
38513947
DEFINE_PRIME3 (lime_alc_reopen_device_soft);
3948+
DEFINE_PRIME4 (lime_alc_capture_open_device);
3949+
DEFINE_PRIME1 (lime_alc_capture_close_device);
3950+
DEFINE_PRIME1v (lime_alc_capture_start);
3951+
DEFINE_PRIME1v (lime_alc_capture_stop);
3952+
DEFINE_PRIME3v (lime_alc_capture_samples);
38523953

38533954

38543955
#define _TBYTES _OBJ (_I32 _BYTES)
@@ -3978,6 +4079,11 @@ namespace lime {
39784079
// DEFINE_HL_PRIM (_VOID, hl_alc_event_callback_soft, _TCFFIPOINTER _FUN(_VOID, _I32, _I32, _DYN, _STRING _DYN));
39794080
DEFINE_HL_PRIM (_VOID, hl_alc_event_callback_soft, _TCFFIPOINTER _FUN(_VOID, _I32 _I32 _TCFFIPOINTER _BYTES _DYN));
39804081
DEFINE_HL_PRIM (_BOOL, hl_alc_reopen_device_soft, _TCFFIPOINTER _STRING _ARR);
4082+
DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_capture_open_device, _STRING _I32 _I32 _I32);
4083+
DEFINE_HL_PRIM (_BOOL, hl_alc_capture_close_device, _TCFFIPOINTER);
4084+
DEFINE_HL_PRIM (_VOID, hl_alc_capture_start, _TCFFIPOINTER);
4085+
DEFINE_HL_PRIM (_VOID, hl_alc_capture_stop, _TCFFIPOINTER);
4086+
DEFINE_HL_PRIM (_VOID, hl_alc_capture_samples, _TCFFIPOINTER _TBYTES _I32);
39814087

39824088

39834089
}

src/lime/_internal/backend/native/NativeCFFI.hx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1672,9 +1672,21 @@ class NativeCFFI
16721672

16731673
@:cffi private static function lime_alc_suspend_context(context:CFFIPointer):Void;
16741674

1675+
<<<<<<< HEAD
16751676
@:cffi private static function lime_alc_event_control_soft(count:Int, events:Array<Int>, enable:Bool):Void;
16761677

16771678
@:cffi private static function lime_alc_event_callback_soft(device:CFFIPointer, callback:Dynamic):Void;
1679+
=======
1680+
@:cffi private static function lime_alc_capture_open_device(devicename:String, frequency:Int, format:Int, buffersize:Int):CFFIPointer;
1681+
1682+
@:cffi private static function lime_alc_capture_close_device(device:CFFIPointer):Bool;
1683+
1684+
@:cffi private static function lime_alc_capture_start(device:CFFIPointer):Void;
1685+
1686+
@:cffi private static function lime_alc_capture_stop(device:CFFIPointer):Void;
1687+
1688+
@:cffi private static function lime_alc_capture_samples(device:CFFIPointer, buffer:Dynamic, samples:Int):Void;
1689+
>>>>>>> feat/openal-capture
16781690

16791691
@:cffi private static function lime_al_gen_filter():CFFIPointer;
16801692

@@ -1851,6 +1863,16 @@ class NativeCFFI
18511863
"oov", false));
18521864
private static var lime_alc_reopen_device_soft = new cpp.Callable<cpp.Object->String->cpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_alc_reopen_device_soft",
18531865
"osob", false));
1866+
private static var lime_alc_capture_open_device = new cpp.Callable<String->Int->Int->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_capture_open_device",
1867+
"siiio", false));
1868+
private static var lime_alc_capture_close_device = new cpp.Callable<cpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_alc_capture_close_device", "ob",
1869+
false));
1870+
private static var lime_alc_capture_start = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_capture_start", "ov",
1871+
false));
1872+
private static var lime_alc_capture_stop = new cpp.Callable<cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_capture_stop", "ov",
1873+
false));
1874+
private static var lime_alc_capture_samples = new cpp.Callable<cpp.Object->cpp.Object->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_capture_samples",
1875+
"ooiv", false));
18541876
private static var lime_al_gen_filter = new cpp.Callable<Void->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_filter", "o", false));
18551877
private static var lime_al_filteri = new cpp.Callable<cpp.Object->Int->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_filteri", "oiov",
18561878
false));
@@ -1975,6 +1997,11 @@ class NativeCFFI
19751997
private static var lime_alc_event_control_soft = CFFI.load("lime", "lime_alc_event_control_soft", 3);
19761998
private static var lime_alc_event_callback_soft = CFFI.load("lime", "lime_alc_event_callback_soft", 2);
19771999
private static var lime_alc_reopen_device_soft = CFFI.load("lime", "lime_alc_reopen_device_soft", 3);
2000+
private static var lime_alc_capture_open_device = CFFI.load("lime", "lime_alc_capture_open_device", 4);
2001+
private static var lime_alc_capture_close_device = CFFI.load("lime", "lime_alc_capture_close_device", 1);
2002+
private static var lime_alc_capture_start = CFFI.load("lime", "lime_alc_capture_start", 1);
2003+
private static var lime_alc_capture_stop = CFFI.load("lime", "lime_alc_capture_stop", 1);
2004+
private static var lime_alc_capture_samples = CFFI.load("lime", "lime_alc_capture_samples", 3);
19782005
private static var lime_al_gen_filter = CFFI.load("lime", "lime_al_gen_filter", 0);
19792006
private static var lime_al_filteri = CFFI.load("lime", "lime_al_filteri", 3);
19802007
private static var lime_al_filterf = CFFI.load("lime", "lime_al_filterf", 3);
@@ -2345,6 +2372,22 @@ class NativeCFFI
23452372
return false;
23462373
}
23472374

2375+
@:hlNative("lime", "hl_alc_capture_open_device") private static function lime_alc_capture_open_device(devicename:String, frequency:Int, format:Int, buffersize:Int):CFFIPointer
2376+
{
2377+
return null;
2378+
}
2379+
2380+
@:hlNative("lime", "hl_alc_capture_close_device") private static function lime_alc_capture_close_device(device:ALDevice):Bool
2381+
{
2382+
return false;
2383+
}
2384+
2385+
@:hlNative("lime", "hl_alc_capture_start") private static function lime_alc_capture_start(device:ALDevice):Void {}
2386+
2387+
@:hlNative("lime", "hl_alc_capture_stop") private static function lime_alc_capture_stop(device:ALDevice):Void {}
2388+
2389+
@:hlNative("lime", "hl_alc_capture_samples") private static function lime_alc_capture_samples(device:ALDevice, buffer:Bytes, samples:Int):Void {}
2390+
23482391
@:hlNative("lime", "hl_al_gen_filter") private static function lime_al_gen_filter():CFFIPointer
23492392
{
23502393
return null;

src/lime/media/OpenALAudioContext.hx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import lime.media.openal.ALContext;
88
import lime.media.openal.ALDevice;
99
import lime.media.openal.ALSource;
1010
import lime.utils.ArrayBufferView;
11+
import haxe.io.Bytes;
1112

1213
#if !lime_debug
1314
@:fileXml('tags="haxe,release"')
@@ -609,5 +610,30 @@ class OpenALAudioContext
609610
return ALC.reopenDeviceSOFT(device, newDeviceName, attributes);
610611
}
611612
#end
613+
614+
public function captureOpenDevice(deviceName:String, frequency:Int, format:Int, bufferSize:Int):ALDevice
615+
{
616+
return ALC.captureOpenDevice(deviceName, frequency, format, bufferSize);
617+
}
618+
619+
public function captureCloseDevice(device:ALDevice):Bool
620+
{
621+
return ALC.captureCloseDevice(device);
622+
}
623+
624+
public function captureStart(device:ALDevice):Void
625+
{
626+
ALC.captureStart(device);
627+
}
628+
629+
public function captureStop(device:ALDevice):Void
630+
{
631+
ALC.captureStop(device);
632+
}
633+
634+
public function captureSamples(device:ALDevice, buffer:Bytes, samples:Int):Void
635+
{
636+
ALC.captureSamples(device, buffer, samples);
637+
}
612638
}
613639
#end

src/lime/media/openal/ALC.hx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package lime.media.openal;
44
import lime._internal.backend.native.NativeCFFI;
55
import lime.system.CFFI;
66
import lime.system.CFFIPointer;
7+
import haxe.io.Bytes;
78

89
#if !lime_debug
910
@:fileXml('tags="haxe,release"')
@@ -33,6 +34,9 @@ class ALC
3334
public static inline var ENUMERATE_ALL_EXT:Int = 1;
3435
public static inline var DEFAULT_ALL_DEVICES_SPECIFIER:Int = 0x1012;
3536
public static inline var ALL_DEVICES_SPECIFIER:Int = 0x1013;
37+
public static inline var CAPTURE_DEVICE_SPECIFIER:Int = 0x310;
38+
public static inline var CAPTURE_DEFAULT_DEVICE_SPECIFIER:Int = 0x311;
39+
public static inline var CAPTURE_SAMPLES:Int = 0x312;
3640

3741
#if lime_openalsoft
3842
// ALC_SOFT_system_events events extension
@@ -258,5 +262,49 @@ class ALC
258262
#end
259263
}
260264
#end
265+
266+
public static function captureOpenDevice(deviceName:String, frequency:Int, format:Int, bufferSize:Int):ALDevice
267+
{
268+
#if (lime_cffi && lime_openal && !macro)
269+
var handle = NativeCFFI.lime_alc_capture_open_device(deviceName, frequency, format, bufferSize);
270+
271+
if (handle != null)
272+
{
273+
return new ALDevice(handle);
274+
}
275+
#end
276+
277+
return null;
278+
}
279+
280+
public static function captureCloseDevice(device:ALDevice):Bool
281+
{
282+
#if (lime_cffi && lime_openal && !macro)
283+
return NativeCFFI.lime_alc_capture_close_device(device);
284+
#end
285+
286+
return false;
287+
}
288+
289+
public static function captureStart(device:ALDevice):Void
290+
{
291+
#if (lime_cffi && lime_openal && !macro)
292+
NativeCFFI.lime_alc_capture_start(device);
293+
#end
294+
}
295+
296+
public static function captureStop(device:ALDevice):Void
297+
{
298+
#if (lime_cffi && lime_openal && !macro)
299+
NativeCFFI.lime_alc_capture_stop(device);
300+
#end
301+
}
302+
303+
public static function captureSamples(device:ALDevice, buffer:Bytes, samples:Int):Void
304+
{
305+
#if (lime_cffi && lime_openal && !macro)
306+
NativeCFFI.lime_alc_capture_samples(device, buffer, samples);
307+
#end
308+
}
261309
}
262310
#end

0 commit comments

Comments
 (0)