LordJashin Posted October 28, 2012 Share Posted October 28, 2012 (edited) Been having troubles with this for a long time. For Delphi: How come this doesn't work, even if the file is in the directory. I also tried the full path. MSDN says it should be fine with that path tho: [scar] var AdrDLL: HMODULE; procedure OnLoadLib(const SCARExports: PExports); stdcall; begin Exp := SCARExports; // Do NOT remove this line! AdrDLL := 0; AdrDLL := LoadLibrary('audiere.dll'); end; [/scar] And how do you do Dynamic loading, it keeps saying that the export statements are in the wrong place and that it didn't expect the end. ? [scar] exports OnLoadLib; exports OnUnloadLib; exports OnGetFuncCount; exports OnGetFuncInfo; exports OnGetTypeCount; exports OnGetTypeInfo; exports LibArch; end. [/scar] Been trying to use the Audiere sound library. It is licensed under LGPL or w/e. And it is located here: http://audiere.sourceforge.net/ Edited October 28, 2012 by LordJashin Quote Link to comment Share on other sites More sharing options...
FHannes Posted October 28, 2012 Share Posted October 28, 2012 It's hard to tell from these fragments what's wrong. As for LoadLibrary, it works. But note that the local path for the plugin is the folder SCAR's in, not the folder where the plugin is located. Quote Link to comment Share on other sites More sharing options...
LordJashin Posted October 29, 2012 Author Share Posted October 29, 2012 (edited) It's hard to tell from these fragments what's wrong. As for LoadLibrary, it works. But note that the local path for the plugin is the folder SCAR's in, not the folder where the plugin is located. Alright I'll try messing with it. But this is all in ONE FILE except for those units. And here is the full code: [scar] //========================================================================= // Audiere Sound System // Version 1.9.2 // © 2002 Chad Austin // // This API uses principles explained at // http://aegisknight.org/cppinterface.html // // This code licensed under the terms of the LGPL. See the Audiere // license.txt. //------------------------------------------------------------------------- // Delphi Conversion By: // Jarrod Davis // Jarrod Davis Software // http://www.jarroddavis.com - Jarrod Davis Software // http://www.gamevisionsdk.com - Game Application Framework for Delphi // support@jarroddavis.com - Support Email //------------------------------------------------------------------------- // How to use: // * Include Audiere in your Uses statement // * Enable or Disable the DYNAMICS compiler define // * If Dynamic, be sure to call AdrLoadDLL before using any commands. // the DLL will be automaticlly unloaded at termination. // * If Static, then use as normal. // History: // * Initial 1.9.2 release. // + Added dynamic loading. Use the DYNAMIC compiler define to control // this. When enabled you can then use ArdLoadLL/AdrUnloadDLL to // dynamiclly load/unload dll at runtime. //========================================================================= // DLL adapted for SCAR, all credit goes to Audiere for the system // And this is all under the same license LGPL // By LordJashin library AudiereForSCAR; {$A+} {$Z4} {$DEFINE DYNAMIC} uses System.SysUtils, System.Classes, Winapi.Windows, SCARLibSetup in 'Units\SCARLibSetup.pas', FastShareMem in 'Units\FastShareMem.pas', SCARUtils in 'Units\SCARUtils.pas'; {$R *.res} //------Audiere Code start------------------------------------------------------ const DLL_NAME = 'Audiere.dll'; // probably for the main dll type { TAdrSeekMode } TAdrSeekMode = ( Adr_Seek_Begin, Adr_Seek_Current, Adr_Seek_End ); { TAdrSoundEffectType } TAdrSoundEffectType = ( Adr_SoundEffectType_Single, Adr_SoundEffectType_Multiple ); { TAdrSampleFormat } TAdrSampleFormat = ( Adr_SampleFormat_U8, Adr_SampleFormat_S16 ); { TAdrFileFormat } TAdrFileFormat = ( FF_AUTODETECT, FF_WAV, FF_OGG, FF_FLAC, FF_MP3, FF_MOD ); { TAdrRefCounted } TAdrRefCounted = class public procedure Ref; virtual; stdcall; abstract; procedure UnRef; virtual; stdcall; abstract; end; { TAdrFile } TAdrFile = class(TAdrRefCounted) public function Read(aBuffer: Pointer; aSize: Integer): Integer; virtual; stdcall; abstract; function Seek(aPosition: Integer; aSeekMode: TAdrSeekMode): Boolean; virtual; stdcall; abstract; function Tell: Integer; virtual; stdcall; abstract; end; { TAdrSampleSource } TAdrSampleSource = class(TAdrRefCounted) public procedure GetFormat(var aChannelCount: Integer; var aSampleRate: Integer; var aSampleFormat: TAdrSampleFormat); virtual; stdcall; abstract; function Read(aFrameCount: Integer; aBuffer: Pointer): Integer; virtual; stdcall; abstract; procedure Reset; virtual; stdcall; abstract; function IsSeekable: Boolean; virtual; stdcall; abstract; function GetLength: Integer; virtual; stdcall; abstract; procedure SetPosition(Position: Integer); virtual; stdcall; abstract; function GetPosition: Integer; virtual; stdcall; abstract; end; { TAdrOutputStream } TAdrOutputStream = class(TAdrRefCounted) public procedure Play; virtual; stdcall; abstract; procedure Stop; virtual; stdcall; abstract; function IsPlaying: Boolean; virtual; stdcall; abstract; procedure Reset; virtual; stdcall; abstract; procedure SetRepeat(aRepeat: Boolean); virtual; stdcall; abstract; function GetRepeat: Boolean; virtual; stdcall; abstract; procedure SetVolume(aVolume: Single); virtual; stdcall; abstract; function GetVolume: Single; virtual; stdcall; abstract; procedure SetPan(aPan: Single); virtual; stdcall; abstract; function GetPan: Single; virtual; stdcall; abstract; procedure SetPitchShift(aShift: Single); virtual; stdcall; abstract; function GetPitchShift: Single; virtual; stdcall; abstract; function IsSeekable: Boolean; virtual; stdcall; abstract; function GetLength: Integer; virtual; stdcall; abstract; procedure SetPosition(aPosition: Integer); virtual; stdcall; abstract; function GetPosition: Integer; virtual; stdcall; abstract; end; { TAdrAudioDevice } TAdrAudioDevice = class(TAdrRefCounted) public procedure Update; virtual; stdcall; abstract; function OpenStream(aSource: TAdrSampleSource): TAdrOutputStream; virtual; stdcall; abstract; function OpenBuffer(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampelFormat: TAdrSampleFormat): TAdrOutputStream; virtual; stdcall; abstract; end; { TAdrSampleBuffer } TAdrSampleBuffer = class(TAdrRefCounted) public procedure GetFormat(var ChannelCount: Integer; var aSampleRate: Integer; var aSampleFormat: TAdrSampleFormat); virtual; stdcall; abstract; function GetLength: Integer; virtual; stdcall; abstract; function GetSamples: Pointer; virtual; stdcall; abstract; function OpenStream: TAdrSampleSource; virtual; stdcall; abstract; end; { TAdrSoundEffect } TAdrSoundEffect = class(TAdrRefCounted) public procedure Play; virtual; stdcall; abstract; procedure Stop; virtual; stdcall; abstract; procedure SetVolume(aVolume: Single); virtual; stdcall; abstract; function GetVolume: Single; virtual; stdcall; abstract; procedure SetPan(aPan: Single); virtual; stdcall; abstract; function GetPan: Single; virtual; stdcall; abstract; procedure SetPitchShift(aShift: Single); virtual; stdcall; abstract; function GetPitchShift: Single; virtual; stdcall; abstract; end; { --- Audiere Routines -------------------------------------------------- } {$IFNDEF DYNAMIC} function AdrGetVersion: PChar; stdcall; external DLL_NAME name '_AdrGetVersion@0'; function AdrGetSupportedFileFormats: PChar; stdcall; external DLL_NAME name '_AdrGetSupportedFileFormats@0'; function AdrGetSupportedAudioDevices: PChar; stdcall; external DLL_NAME name '_AdrGetSupportedAudioDevices@0'; function AdrGetSampleSize(aFormat: TAdrSampleFormat): Integer; stdcall; external DLL_NAME name '_AdrGetSampleSize@4'; function AdrOpenDevice(const aName: PChar; const aParams: PChar): TAdrAudioDevice; stdcall; external DLL_NAME name '_AdrOpenDevice@8'; function AdrOpenSampleSource(const aFilename: PChar; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrOpenSampleSource@8'; function AdrOpenSampleSourceFromFile(aFile: TAdrFile; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrOpenSampleSourceFromFile@8'; function AdrCreateTone(aFrequency: Double): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateTone@8'; function AdrCreateSquareWave(aFrequency: Double): TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateSquareWave@8'; function AdrCreateWhiteNoise: TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreateWhiteNoise@0'; function AdrCreatePinkNoise: TAdrSampleSource; stdcall; external DLL_NAME name '_AdrCreatePinkNoise@0'; function AdrOpenSound(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aStreaming: LongBool): TAdrOutputStream; stdcall; external DLL_NAME name '_AdrOpenSound@12'; function AdrCreateSampleBuffer(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampleFormat: TAdrSampleFormat): TAdrSampleBuffer; stdcall; external DLL_NAME name '_AdrCreateSampleBuffer@20'; function AdrCreateSampleBufferFromSource(aSource: TAdrSampleSource): TAdrSampleBuffer; stdcall; external DLL_NAME name '_AdrCreateSampleBufferFromSource@4'; function AdrOpenSoundEffect(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aType: TAdrSoundEffectType): TAdrSoundEffect; stdcall; external DLL_NAME name '_AdrOpenSoundEffect@12'; {$ENDIF} {$IFDEF DYNAMIC} var AdrGetVersion : function: PChar; stdcall = nil; AdrGetSupportedFileFormats : function: PChar; stdcall = nil; AdrGetSupportedAudioDevices : function : PChar; stdcall = nil; AdrGetSampleSize : function(aFormat: TAdrSampleFormat): Integer; stdcall = nil; AdrOpenDevice : function(const aName: PChar; const aParams: PChar): TAdrAudioDevice; stdcall = nil; AdrOpenSampleSource : function(const aFilename: PChar; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall = nil; AdrOpenSampleSourceFromFile : function(aFile: TAdrFile; aFileFormat: TAdrFileFormat): TAdrSampleSource; stdcall = nil; AdrCreateTone : function(aFrequency: Double): TAdrSampleSource; stdcall = nil; AdrCreateSquareWave : function(aFrequency: Double): TAdrSampleSource; stdcall = nil; AdrCreateWhiteNoise : function: TAdrSampleSource; stdcall = nil; AdrCreatePinkNoise : function: TAdrSampleSource; stdcall = nil; AdrOpenSound : function(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aStreaming: LongBool): TAdrOutputStream; stdcall = nil; AdrCreateSampleBuffer : function(aSamples: Pointer; aFrameCount, aChannelCount, aSampleRate: Integer; aSampleFormat: TAdrSampleFormat): TAdrSampleBuffer; stdcall = nil; AdrCreateSampleBufferFromSource: function(aSource: TAdrSampleSource): TAdrSampleBuffer; stdcall = nil; AdrOpenSoundEffect : function(aDevice: TAdrAudioDevice; aSource: TAdrSampleSource; aType: TAdrSoundEffectType): TAdrSoundEffect; stdcall = nil; function AdrLoadDLL: Boolean; stdcall; procedure AdrUnloadDLL; stdcall; {$ENDIF} {$IFDEF DYNAMIC} var AdrDLL: HMODULE; function AdrLoadDLL: Boolean; begin AdrDLL := 0; Result := False; AdrDLL := LoadLibrary('audiere.dll'); if(AdrDLL = 0) then begin Exit; end; @AdrGetVersion := GetProcAddress(AdrDLL, '_AdrGetVersion@0'); @AdrGetSupportedFileFormats := GetProcAddress(AdrDLL, '_AdrGetSupportedFileFormats@0'); @AdrGetSupportedAudioDevices := GetProcAddress(AdrDLL, '_AdrGetSupportedAudioDevices@0'); @AdrGetSampleSize := GetProcAddress(AdrDLL, '_AdrGetSampleSize@4'); @AdrOpenDevice := GetProcAddress(AdrDLL, '_AdrOpenDevice@8'); @AdrOpenSampleSource := GetProcAddress(AdrDLL, '_AdrOpenSampleSource@8'); @AdrOpenSampleSourceFromFile := GetProcAddress(AdrDLL, '_AdrOpenSampleSourceFromFile@8'); @AdrCreateTone := GetProcAddress(AdrDLL, '_AdrCreateTone@8'); @AdrCreateSquareWave := GetProcAddress(AdrDLL, '_AdrCreateSquareWave@8'); @AdrCreateWhiteNoise := GetProcAddress(AdrDLL, '_AdrCreateWhiteNoise@0'); @AdrCreatePinkNoise := GetProcAddress(AdrDLL, '_AdrCreatePinkNoise@0'); @AdrOpenSound := GetProcAddress(AdrDLL, '_AdrOpenSound@12'); @AdrCreateSampleBuffer := GetProcAddress(AdrDLL, '_AdrCreateSampleBuffer@20'); @AdrCreateSampleBufferFromSource := GetProcAddress(AdrDLL, '_AdrCreateSampleBufferFromSource@4'); @AdrOpenSoundEffect := GetProcAddress(AdrDLL, '_AdrOpenSoundEffect@12'); if not Assigned(AdrGetVersion) then Exit; if not Assigned(AdrGetSupportedFileFormats) then Exit; if not Assigned(AdrGetSupportedAudioDevices) then Exit; if not Assigned(AdrGetSampleSize) then Exit; if not Assigned(AdrOpenDevice) then Exit; if not Assigned(AdrOpenSampleSource) then Exit; if not Assigned(AdrOpenSampleSourceFromFile) then Exit; if not Assigned(AdrCreateTone) then Exit; if not Assigned(AdrCreateSquareWave) then Exit; if not Assigned(AdrCreateWhiteNoise) then Exit; if not Assigned(AdrCreatePinkNoise) then Exit; if not Assigned(AdrOpenSound) then Exit; if not Assigned(AdrCreateSampleBuffer) then Exit; if not Assigned(AdrCreateSampleBufferFromSource) then Exit; if not Assigned(AdrOpenSoundEffect) then Exit; Result := True; end; procedure AdrUnloadDLL; begin if AdrDLL <> 0 then begin FreeLibrary(AdrDLL); AdrDLL := 0; end; end; {$ENDIF} //------Audiere Code End------------------------------------------------------ var Device1: TAdrAudioDevice; Source1: TAdrSampleSource; Sound1 : TAdrOutputStream; function PlaySoundEx(Path: string): Boolean; stdcall; begin Result := False; // MessageBox(0, AdrGetVersion, 'Info', MB_OK); if Sound1.IsPlaying then begin Sound1.Stop; Sound1.unref; Device1.unref; Source1.UnRef; end; Device1 := AdrOpenDevice('', ''); Source1 := AdrOpenSampleSource(PWideChar(Path), FF_AUTODETECT); Sound1 := AdrOpenSound(Device1, Source1, True); Sound1.Play; Result := True; end; //var //AdrDLL: HMODULE; procedure OnLoadLib(const SCARExports: PExports); stdcall; begin Exp := SCARExports; // Do NOT remove this line! AdrDLL := 0; AdrDLL := LoadLibrary('audiere.dll'); end; procedure OnUnloadLib; stdcall; begin // Called when the library is unloaded FreeLibrary(AdrDLL); end; // - Function exports function OnGetFuncCount: Integer; stdcall; begin Result := 1; end; function OnGetFuncInfo(const Idx: Integer; out ProcAddr: Pointer; out ProcDef: PAnsiChar; out CallConv: TCallConv): Integer; stdcall; begin Result := Idx; case Idx of 0: begin ProcAddr := @PlaySoundEx; ProcDef := 'function PlaySoundEx(Path: string): Boolean;'; CallConv := ccStdCall; end else Result := -1; end; end; // - Type exports function OnGetTypeCount: Integer; stdcall; begin Result := 0; end; function OnGetTypeInfo(const Idx: Integer; out TypeName, TypeDef: PAnsiChar): Integer; stdcall; begin Result := Idx; case Idx of 0: begin {TypeName := 'DIKeyboard'; TypeDef := 'record';} end else Result := -1; end; end; // - Library architecture // Do NOT change this! const LIBRARY_ARCHITECTURE_LEGACY = 1; LIBRARY_ARCHITECTURE_MAIN = 2; function LibArch: Integer; stdcall; begin Result := LIBRARY_ARCHITECTURE_MAIN; end; exports OnLoadLib; exports OnUnloadLib; exports OnGetFuncCount; exports OnGetFuncInfo; exports OnGetTypeCount; exports OnGetTypeInfo; exports LibArch; end. [/scar] EDIT: OKAY I got the LoadLibrary issue fixed. But I am getting an access error when I run the PlaySoundEx function I made. Now I just need to tweak it constantly. Edited October 29, 2012 by LordJashin Quote Link to comment Share on other sites More sharing options...
Ranqers Posted October 29, 2012 Share Posted October 29, 2012 0.0 this looks complex, what're you using it for? Quote Link to comment Share on other sites More sharing options...
LordJashin Posted October 29, 2012 Author Share Posted October 29, 2012 Trying to use it with SCAR, and I almost have it working! Just needs to be fine tuned a bit... I think the Delphi bindings were on an older build of the Audiere plugin so I need to update my function i think About audiere - Braindead easy API Supported file formats: Uncompressed WAV*, Uncompressed AIFF*, Ogg Vorbis*, FLAC*, MP3, MOD, S3M, IT, XM (* supports seeking) Streaming and buffered audio Volume, pan, and pitch shift modification Flat tone, square wave, white noise, and pink noise generation Runtime enumeration of audio devices and supported file formats Custom file streams Python, Delphi, Java, XPCOM (JavaScript in Mozilla) bindings Quote Link to comment Share on other sites More sharing options...
LordJashin Posted October 29, 2012 Author Share Posted October 29, 2012 (edited) Nvm, that library "Audiere" isn't even for the latest Delphi. It probably works with Delphi 2009 or earlier. I tried it with 2010 and couldn't get the program, or DLL to work with Delphi. All over the internet there are threads about it being unstable and crap. So I resorted to the best thing out that I could find. Pretty obvious: THE BASS LIBRARY. Very easy to do, I just wanted to know how to get a library into SCAR correctly and finally got something workin: EDIT: i take that back this library looks better and allows commercial use http://www.libsdl.org/ maybe OpenGL is better though. The Unreal gaming engine uses it. [scar] program New; {$L BassForSCAR.dll} begin PlaySoundEx('I:\Music\Music\Chevelle - The Red.mp3'); end. [/scar] plugin code was simple enough too: [scar] library BassForSCAR; uses System.SysUtils, System.Classes, Winapi.Windows, SCARLibSetup in 'Units\SCARLibSetup.pas', FastShareMem in 'Units\FastShareMem.pas', SCARUtils in 'Units\SCARUtils.pas', bass in 'bass.pas'; {$R *.res} var strs: array[0..128] of HSTREAM; strc: Integer; function PlaySoundEx(Path: string): Boolean; stdcall; begin Result := False; strs[strc] := BASS_StreamCreateFile(False, PChar(Path), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF}); BASS_ChannelPlay(strs[strc], False); if strs[strc] <> 0 then Inc(strc); end; var BassAwesomeDLL: HMODULE; procedure OnLoadLib(const SCARExports: PExports); stdcall; export; begin Exp := SCARExports; // Do NOT remove this line! // Called when the library is loaded BassAwesomeDLL := LoadLibrary('bass.dll'); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion) <> BASSVERSION) then begin MessageBox(0,'An incorrect version of BASS.DLL was loaded',nil,MB_ICONERROR); Halt; end; // Initialize audio - default device, 44100hz, stereo, 16 bits if not BASS_Init(-1, 44100, 0, 0, nil) then MessageBox(0, PChar('Error initializing audio!' + #13#10 + '(Error code: ' + IntToStr(BASS_ErrorGetCode) + ')'), nil, 0); strc := 0; // stream count end; procedure OnUnloadLib; stdcall; var a: Integer; begin if strc > 0 then for a := 0 to strc - 1 do BASS_StreamFree(strs[a]); BASS_Free; FreeLibrary(BassAwesomeDLL); // Called when the library is unloaded end; // - Function exports function OnGetFuncCount: Integer; stdcall; begin Result := 1; end; function OnGetFuncInfo(const Idx: Integer; out ProcAddr: Pointer; out ProcDef: PAnsiChar; out CallConv: TCallConv): Integer; stdcall; begin Result := Idx; case Idx of 0: begin ProcAddr := @PlaySoundEx; ProcDef := 'function PlaySoundEx(Path: string): Boolean;'; CallConv := ccStdCall; end else Result := -1; end; end; // - Type exports function OnGetTypeCount: Integer; stdcall; begin Result := 0; end; function OnGetTypeInfo(const Idx: Integer; out TypeName, TypeDef: PAnsiChar): Integer; stdcall; begin Result := Idx; case Idx of 0: begin {TypeName := 'DIKeyboard'; TypeDef := 'record';} end else Result := -1; end; end; // - Library architecture // Do NOT change this! const LIBRARY_ARCHITECTURE_LEGACY = 1; LIBRARY_ARCHITECTURE_MAIN = 2; function LibArch: Integer; stdcall; begin Result := LIBRARY_ARCHITECTURE_MAIN; end; exports OnLoadLib; exports OnUnloadLib; exports OnGetFuncCount; exports OnGetFuncInfo; exports OnGetTypeCount; exports OnGetTypeInfo; exports LibArch; end. [/scar] If i spam that code in scar. It'll just keep playing the song again and again. Then when I close SCAR they all stop. This bass library is awesome... could make myself a music player: Too bad this can't be included with SCAR, because of the license. But nothing says I can't make it a plugin for scar...that is open source... Samples Support for WAV/AIFF/MP3/MP2/MP1/OGG and custom generated samples Sample streams Stream any sample data in 8/16/32 bit, with both "push" and "pull" systems File streams MP3/MP2/MP1/OGG/WAV/AIFF file streaming Internet file streaming Stream data from HTTP and FTP servers (inc. Shoutcast, Icecast & Icecast2), with IDN and proxy server support and adjustable buffering Custom file streaming Stream data from anywhere using any delivery method, with both "push" and "pull" systems OS codecs ACM, Media Foundation and CoreAudio codec support for additional audio formats Multi-channel streaming Support for more than plain stereo, including multi-channel OGG/WAV/AIFF files MOD music Uses the same engine as XMPlay (very accurate, efficient, high quality reproduction), with full support for all effects, filters, stereo samples, DMO effects, etc... MO3 music MOD music with MP3 or OGG compressed samples (vastly reduced file size with virtually identical sound quality), MO3s are created using the MO3 encoder Multiple outputs Simultaneously use multiple soundcards, and move channels between them Recording Flexible recording system, with multiple device support and input selection, (WMA encoding & broadcasting via the add-on, and other formats via BASSenc) Decode without playback Streams and MOD musics can be outputted in any way you want (encoded, written to disk, streamed across a network, etc...) Speaker assignment Assign streams and MOD musics to specific speakers to take advantage of hardware capable of more than plain stereo (up to 4 separate stereo outputs with a 7.1 soundcard) High precision synchronization Synchronize events in your software to the streams and MOD musics, synchronize playback of multiple channels together Effects Chorus / compressor / distortion / echo / flanger / gargle / parametric eq / reverb Custom DSP Apply any effects that you want, in any order you want 32 bit floating-point decoding and processing Floating-point decoding/rendering, DSP/FX, and recording 3D sound Play samples/streams/musics in any 3D position Flexible Small buffers for realtime performance, large buffers for stability, automatic and manual buffer updating, configurable threading, configurable SRC quality Expandable Add-on system for additional format support and effects (C/C++ API available on request), dynamic plugin loading system, access to underlying DirectSound objects Edited October 29, 2012 by LordJashin Quote Link to comment Share on other sites More sharing options...
FHannes Posted October 29, 2012 Share Posted October 29, 2012 The bass library was included with SCAR... But it was removed in 3.35. Quote Link to comment Share on other sites More sharing options...
LordJashin Posted October 29, 2012 Author Share Posted October 29, 2012 , yeah i thought i saw bass.dll in there . Yeah i think OpenAL is the way to go - http://en.wikipedia.org/wiki/OpenAL I'm gonna try to make a library with that instead. Most parts of it are LGPL...BASS has this little statement in there info: BASS is free for non-commercial use. Your products must be end-user products, eg. not components used by other products. Quote Link to comment Share on other sites More sharing options...
FHannes Posted October 29, 2012 Share Posted October 29, 2012 , yeah i thought i saw bass.dll in there . Yeah i think OpenAL is the way to go - http://en.wikipedia.org/wiki/OpenAL I'm gonna try to make a library with that instead. Most parts of it are LGPL...BASS has this little statement in there info: I'm not entirely sure that means you can't make it a SCAR plugin, I think it's more aimed toward component libraries, but I suppose it might cover it. I removed it from SCAR because my old implementation of the library caused some issues and it's not really relevant to SCAR itself anyway. Quote Link to comment Share on other sites More sharing options...
LordJashin Posted October 29, 2012 Author Share Posted October 29, 2012 (edited) It specifically says non comercial though. So ill go with openal. OpenGL is amazing. But I think I want to continue the TPAGod project till i get a better undestanding of thread and drawing Also looked at DirectX and they have have bindings for Delphi too. I wonder if the unreal engine is free for commercial doubt it lol You can debate if SCAR is commercial, but i think under general terms it is. If any paid scripts are made using SCAR and SCAR uses things that are supposively non commercial, that is a problem... Edited October 29, 2012 by LordJashin Quote Link to comment Share on other sites More sharing options...