|
[ Peke @ 14.12.2004. 23:24 ] @
| Lepo, ja izgubih mnogo sati pokusavajuci da nesto uradim i na kraju spadoh na dva pitanja:
1. Funkcija LoadLibrary i LoadLibraryEx ucitavaju DLL i vracaju Handle pozivajuci kernel32.dll funkciju. Pitanje da li neko zna sta se u stvari desava u toj funkciji tj. kojim redosledom ide inicijalizacija DLL-a?
2. Jeste da je povezano sa gornjim pitanjem ali kako da ucitam isti DLL dva puta ali tako da dobijem drugi Handle kao povratni u LoadlibraryEx, jer kada ponovo pozovem funkciju vrati mi se handle od prethodno ucitanog. To ima neke veze sa Thread-ovima jer sam win API dozvoljava ucitavanje samo jednog DLL-a po Applikaciji?
Napomena: ja sam stigao dotle da treba otvoriti novi thread za postojecu aplikaciju i tek onda pokusati ponovo ucitati DLL, medjutim nije mi uspevalo da to napravim.
unapred svima hvala. |
[ bancika @ 15.12.2004. 00:55 ] @
kopiraj fajl n puta 
[ Peke @ 15.12.2004. 02:53 ] @
Ja bih to da izbegnem, Ne bih da pazim sta sam i gde sam sta kopirao, a to malo i ogranicava gde smem da kopiram u slucaju da korisnik nema administratorski pristup
Saljem primer sa tvojim resenjem (bancika), mozda nekom padne ideja na pamet.
[ Rapaic Rajko @ 15.12.2004. 09:41 ] @
Ako se nesto secam (davno je bilo), dll ima svoju internu listu thread-ova koji su ga ucitali. Tako da ako je thread1 vec ucitao sa LoadLibrary, ponovni pokusaj (iz istog thread-a) nece raditi. Moraces da pravis onoliko thread-ova koliko puta mislis da ucitas taj dll.
Rajko
[ bancika @ 15.12.2004. 12:23 ] @
a ja sam se salio 
[ Peke @ 15.12.2004. 12:47 ] @
 To sam i skontao i to vazi samo za Win32 DLL-ove u Win16 Svaki put kada pozoves DLL na ucitavanje on se ucita ponovo na novu adresu. Sta da kazem mane i kvaliteti Multitasking-a, Inace dok sam programirao na Atari-u i Mac-u toga nije bilo. Lepo mi kaze Help. Da Win32 Trazi dali je Dll vec ucitan za ovaj thread i ako jeste vraca DLLEntry Point od ucitanog. Za sada bancikino resenje je jedino na moju zalost.
Bancika: Sala ti je bila na mestu jer sam se ja ponasao kao LAMER, i u svakom slucaju sada mi je lakse jer mislim da nisam skroz glupav 
[ Miroslav Ćurčić @ 15.12.2004. 14:42 ] @
Ajd jos jedan glup odgovor,
napravi jos jedan projekat (glavni) koji ce pozivati kao eksterni ovaj tvoj sadasnji projekat koliko god puta hoce, prosledjivajuci mu razlicite parametre za rad.
[ Srki_82 @ 15.12.2004. 16:01 ] @
Zasto je tako bitno da se svaki put ucita nova instanca dll-a?
[ morlic @ 15.12.2004. 17:11 ] @
Mislim da ste promasili poentu. Prednost DLL-a je stednja memorije jer jednom ucitan dll dele razliciti procesi (vi ste se uhvatili za niti, a proces je taj za sta se vezuje dll)
Pitanje je zasto bi ti trebalo da ucitavas odvojeno isti dll? Postoji mnogo razloga zasto ne bi trebao da koristis menjanje imena dll i slicne trikove, naravno osim ako bas nisi siguran sta radis. Nemoj posle da se zalis na fantomske probleme :)
[ Peke @ 15.12.2004. 17:41 ] @
Morlic, Srki:
Neznam da li se neko bavio Winampom i njegovim pluginima ali struktura otprilike izgleda ovako racunajuci da je samo jedna pesma pustena u isto vreme:
1. Load Input plugin dll (Alocate mem address buffer for decoding File)
2. load output plugin Dll (Alocate Output Buffer)
Problem je kada pokusas paraleno da ucitas Dva fajla i da ih pustis u isto vreme a da ti ostane kontrola nad oba fajla (Osnova Crossfading-a) . Za sada svi Winampovi Crossfade plugin-i rade na principu Fill Buffer-a sto znaci da kada na kraju jedne pesme output buffer postane recimo 85% pun u preostalih 15% se ucitava dekodovan sledeci fajl. To radi, ali onog momenta kada pocne da se output buffer puni sa sledecim fajlom nemas nikakvu kontrolu nad vec dekodovanim fajlom. Pored toga ako je vec neki fajl poceo da puni buffer nema menjanja sem ako zelis da prekines pustanje fajla koji se zavrsasva.
Ala sam sada zakoplikovao
To je i osnovni razlog ucitavanja Input DLL-ova. Jer se dekodovanje mora vrsiti u razlicitim Bufferima zbog mogucnosti podesavanja parametara za svaki fajl posebno.
[ Peke @ 15.12.2004. 17:46 ] @
mveliki,
Slazem se da tako ide, ali bih onda morao da podesavam parametre za svaki instance posebno sto opet pravi dodatno komplikaciju. Mada to vec nespada u ovaj Topic.
[ Srki_82 @ 15.12.2004. 17:56 ] @
Zasto u jednom dll-u ne napravis vise buffera? Nije mi bas sasvim jasno kako ne mozes da menjas ono sto ti je u buffer-u? Zar buffer nije prosto receno niz nekih promenljivih... ako si ti kreirao buffer mozes da ga menjas (od pocetka do karaja) kako god zelis sve dok ga ne posaljes WinAmpu i kada se zvuk cuje na zvucniku.
[ Peke @ 15.12.2004. 18:09 ] @
Citat: Srki_82: Zasto u jednom dll-u ne napravis vise buffera?
Nije mi bas sasvim jasno kako ne mozes da menjas ono sto ti je u buffer-u? Zar buffer nije prosto receno niz nekih promenljivih... ako si ti kreirao buffer mozes da ga menjas (od pocetka do karaja) kako god zelis sve dok ga ne posaljes WinAmpu i kada se zvuk cuje na zvucniku.
Problem i jeste u tome sto ja nemam nikakve veze sa DLL-ovima oni su licencirani na svoje programere i ja nemam veze sa tim. Sve bi bilo lako kada bih ja uspeo da ih sve napisem a i da pisem nove za nove formate.
[ Srki_82 @ 15.12.2004. 18:28 ] @
Zar DSP efekti (kao sto je recimo Crossfade) nemaju svoj bafer? Ti primas podatke od IN pluginova i prosledjujes ih u OUT pluginove, zar ne? Zasto je problem da podatke koje primis od IN plugina promenis pre slanja u OUT u svom baferu koji si kreirao u svom DSP pluginu?
[ Rapaic Rajko @ 16.12.2004. 08:20 ] @
Peke, ima tu par stvari iz tvog izlaganja koje mi bas nisu jasne.
Buffer: ko kreira buffer, tvoja aplikacija (mainthread), neki worker thread, dll ili nesto trece? Gde se kreira: heap (dinamicka memorija) ili na stack-u? Kako se kreira, samo ucitas dll ili treba i da pozoves neku funkciju iz dll-a?
Scenario1: recimo da se buffer kreira pozivom neke funkcije iz dll-a, kao lokalna varijabla (znaci stack) u toj funkciji. Taj buffer je 'ziv' sve dok ne izadjes iz funkcije. U tom slucaju, resen problem, jer svaki thread u Win-u ima svoj stack, i jedan drugog ne ometaju.
Scenario2: buffer se kreira na heap-u, opet pozivom neke funkcije iz dll-a. Heap jeste zajednicki za celu aplikaciju (i njene thread-ove), ali posto je svaki thread alocirao svoj buffer pozivom pomenute funkcije, opet nema kolizije.
Scenario3: buffer se kreira SAMO JEDNOM, samim ucitavanjem dll-a, znaci za sve thread-ove jedinstveno. E, ovo je malo slozeniji slucaj. Resava se tako sto se napravi thread-safe klasa/omotac oko buffer-a, i ta klasa radi zastitu resursa (buffer-a), tako sto sprecava moguce kolizije thread-ova nad buffer-om. To su vec klasicne tehnike koriscenjem criticalsection-a, mutex-a ili sta vec.
Aj sad pojasni koji je stvarni scenario u tvom slucaju (osecam da nije ni jedan od gore navedenih :) ).
Rajko
[ Peke @ 17.12.2004. 13:10 ] @
Citat: Rapaic Rajko: Peke, ima tu par stvari iz tvog izlaganja koje mi bas nisu jasne.
Pojasnicu nadam se
Citat: Rapaic Rajko:Buffer: ko kreira buffer, tvoja aplikacija (mainthread), neki worker thread, dll ili nesto trece? Gde se kreira: heap (dinamicka memorija) ili na stack-u? Kako se kreira, samo ucitas dll ili treba i da pozoves neku funkciju iz dll-a?
Buffer se kreira output plugin pozivajuci se na DirectShow i Directsound prilikom ucitavanja DLL-a. On moze biti interno menjan u DLL-u.
Citat: Rapaic Rajko:Scenario1: recimo da se buffer kreira pozivom neke funkcije iz dll-a, kao lokalna varijabla (znaci stack) u toj funkciji. Taj buffer je 'ziv' sve dok ne izadjes iz funkcije. U tom slucaju, resen problem, jer svaki thread u Win-u ima svoj stack, i jedan drugog ne ometaju.
Jok. To nije to.
Citat: Rapaic Rajko:Scenario2: buffer se kreira na heap-u, opet pozivom neke funkcije iz dll-a. Heap jeste zajednicki za celu aplikaciju (i njene thread-ove), ali posto je svaki thread alocirao svoj buffer pozivom pomenute funkcije, opet nema kolizije.
Moglo bi se reci. da output plugin kreira pozivanjem Init funkcije u DLL mada nisam 100% siguran jer nije isti sllucaj kod svakog DLL-a. To je ono sto me i nervira nemam source od plugina da mogu lepo da ih debagujem i vidim sta se desava.
Citat: Rapaic Rajko:Scenario3: buffer se kreira SAMO JEDNOM, samim ucitavanjem dll-a, znaci za sve thread-ove jedinstveno. E, ovo je malo slozeniji slucaj. Resava se tako sto se napravi thread-safe klasa/omotac oko buffer-a, i ta klasa radi zastitu resursa (buffer-a), tako sto sprecava moguce kolizije thread-ova nad buffer-om. To su vec klasicne tehnike koriscenjem criticalsection-a, mutex-a ili sta vec.
I ovo bi mogao da bude scenario, ali isto kao u slucaju scenarija 2 nisam 100% siguran iliti kompetentan
Citat: Rapaic Rajko:Aj sad pojasni koji je stvarni scenario u tvom slucaju (osecam da nije ni jedan od gore navedenih  ).
Saljem primer programa koji mi je bio vodilja za jedan kanal. Cisto da se vidi sta u stvari treba da se desi 
Nadam se da sam malo jasniji. a ako nisam ponovo na objasnjavanje.
U promeru imas IN_Wave (Za Wav), In_MP3(za MP3) i Out_Wave (za output na Windows Media Mapper) moze da se koristi i Out_DS iz winampa za DirectSound Output.
[ Srki_82 @ 17.12.2004. 16:15 ] @
I dalje ne vidim kako ti ucitavanje dll-a 2 ili vise puta moze pomoci? Koliko znam u WinAmp-u se ucitava samo jedan IN, jedan DSP i jedan OUT plug in i zvus se cuje savrseno. Reci sta bi tacno zeleo da uradis? Npr: kada dodje do poslednjih 10 sekundi jednog fajla da taj fajl polako prelazi u sustanje dok se sledeci fajl polako cuje kroz kisu i posle odredjenog vremena se cuje samo cist drugi fajl. Ako je tako nesto u pitanju jedan DSP plugin to moze da uradi cak i ako nije dva puta ucitan.
P.S.
Pogledao sam tvoj programcic i mislim da malo bolje shvatam problem. Najbolje bi bilo da napises jedan In jedan Out i jedan Dsp plug in i da ispisujes u log fajl kako ih Winamp koristi pa da i u tvom programu mozes da ih koristis na isti nacin. Koliko sam video svi plug inovi kreiraju buffer-e na HEAP-u tako da ako ga ucitas dva puta postojace 2 razlicita buffer-a.
[ Peke @ 17.12.2004. 18:44 ] @
Potpuno si u pravu sto se tice IN+OUT+DSP Winamp ucitava po jedan svaki jedino General plugini se ucitavaju na startovanju.
To i jeste zeznuto zato sto normalan korisnik i nevidi razliku, to je specificna stvar za DJ-eve (Citaj postace muzike sa racunara, tu racunam i sebe). Ali da pojednostavim krajnji efekat svega ovoga bi recimo moglo da bude upravo ono sto nas u principu sve nervira tj. u sred pustene pesme na radiu reklama a pesma se utisala. E, sad bih ja to da smestim u jedan program odnosno player. Jedno sam uspeo da dobijem sa programcicem
http://peke.narod.ru/plugins/gen_quickplays.zip koji radi taj posao u Mediamonkey-u http://www.Mediamonkey.com
E sad to se u winampu ne moze resiti nego se koriste razni programcici tipa
http://www.winamp.com/plugins/...p_Sincronization_and_Fader.exe
Nadam se da sam sada konacno definisao sta hocu da postignem.
RE: P.S. Da upravu si svaki In plugin ima svoj Buffer ali ne i OutPlugin sto je u stvari sustina problema. Iz winampovog plugin primera se vidi sta hocu da izbegnem.
[ Srki_82 @ 17.12.2004. 19:23 ] @
U winampu je itekako moguce postici efekat koji si spomenuo
Citat: Ali da pojednostavim krajnji efekat svega ovoga bi recimo moglo da bude upravo ono sto nas u principu sve nervira tj. u sred pustene pesme na radiu reklama a pesma se utisala.
Pogledaj ovaj DSP plugin (mozda bas ne utisavaju ono sto trenutno svira, ali to je zato sto to nisu zeleli da naprave, a ne zato sto ne moze):
http://www.winamp.com/plugins/details.php?id=138782
Znaci sednes i napises svoj DSP plugin (na winamp-ovom sajtu imas SDK) i nemas problema ;)
[ Peke @ 17.12.2004. 22:15 ] @
Citat: Srki_82: U winampu je itekako moguce postici efekat koji si spomenuo
Kako? Koja podesavanja imas i kako si ih namestio?
Citat: Srki_82: Pogledaj ovaj DSP plugin (mozda bas ne utisavaju ono sto trenutno svira, ali to je zato sto to nisu zeleli da naprave, a ne zato sto ne moze):
Znaci sednes i napises svoj DSP plugin (na winamp-ovom sajtu imas SDK) i nemas problema 
Za to netreba DSP to sam i napravio u mom Quick Play plugin-u, jedina razlika izmedju MP3 Remix-a i Quick Play Plugina je u tome sto on pusta Wav-ove Uz BPM (Zasta i sluzi DSP Plugin SDK) a Probaj Quick plugin sa Mediamonkey-em pa ces videti sta se desava isto. Oba pustaju u zasebnom Thread-u od winampovog i u svom playeru, MP3 Remix dekoduje pesmu i dodaje Stream-u kao efekat da bi Output plugin mogao da ga pusti.
Tako sam i ja napravio svoj player i samo ga ubacio u DLL po Winampovom SDK-au da radi kao General Plugin i to je to.
Problem nije u samom winampu vec u samom Windows Api-u koji nedozvoljava dve razlicite DLLEntryPoint adrese iz jednog thread-a.
Isto je reseno sa http://www.winamp.com/plugins/...12%2F17%2FP%2FFadeamp_v2.0.exe Dva winampa i Full CrossFade kao na DJ mikseti Dva odvojena ulaza, dva kontrolisana izlaza, dva playera i radi sta hoces.
Za winamp nema pomoci ali za MediaMonkey nadam se da ima jer je baziran na drugacijoj arhitekturi, mada je za korisnika (Player UI) uradjen po uzoru na Winamp, a i podrzava vecinu Winamp-ovih Plugin-a i Classic Skinova (Winamp v2.x).
Evo da jos pojednostavim i postavim kao hardware-ski problem: Jesi pokusao da ubacis dva CD-a u CD-Rom Istovremeno i da pustis sa svakog po jedan MP3 kao zasebne? Deluje nemoguce ali ako imas CD-Rom Changer ili Dva CD-roma je moguce je. Ovde WinAPI ne dozvoljava da to uradis isto to sa DLL-ovima tako da i dalje stoji pitanje kako moze?
[ Srki_82 @ 18.12.2004. 02:53 ] @
Ovako... winamp moze da pusta zvuk samo na jednoj muzickoj kartici, jedna muzicka kartica ima jedan svoj interni buffer. Ako imas 1000 OUT pluginova sa zasebnim bufferom i hoces da ih pustis sve od jednom to ce tesko da ide. Prvo moras svih 1000 da mixujes u jedan buffer i da ga das muzickoj tako da nema svrhe imati 1000 OUT pluginova, dovoljan je samo JEDAN sa JEDNIM bufferom. Na tebi je da u taj buffer umiksujes sve sto ti je potrebno. DSP plugin moze da pored podataka koje dobija od IN plugina koji obezbedjue Winamp da kreira jos koliko god hoces internih IN pluginova i da sve njihove ulaze mixuje i prosledi ih u OUT plugin koji opet moze da ima svoje interne pluginove i da na izlazu pusti nesto sto nije postojalo na izlazu iz DSP plugina. Jos jednom ti kazem... napisi nekoliko IN, DSP i OUT pluginova i jednostavno cackaj malo po njihovim bufferima i videces da je sasvim dovoljan jedan buffer u OUT pluginu.
[ Peke @ 18.12.2004. 20:17 ] @
Citat: Srki_82: Ovako... winamp moze da pusta zvuk samo na jednoj muzickoj kartici, jedna muzicka kartica ima jedan svoj interni buffer.
Ko kaze Uzmi primer 5.1 to su ti 4 Odvojena Stream-a (Buffer-a) objedinjena u DirectX. Ja uspesno delim Front (stereo), Rear (Stereo), Center i Subwoofer (Mono) kao posebne kanale nezavisne od ostalih i to sve sa najobicnijom mediaPlayer komponentom i DirectSound Unit-ima. Bez DLL-ova, ...
Citat: Srki_82: Ako imas 1000 OUT pluginova sa zasebnim bufferom i hoces da ih pustis sve od jednom to ce tesko da ide. Prvo moras svih 1000 da mixujes u jedan buffer i da ga das muzickoj tako da nema svrhe imati 1000 OUT pluginova, dovoljan je samo JEDAN sa JEDNIM bufferom.
Ma netreba mi 1000, Treba mi do 16 Hardware-skih kanala Koliko DirectSound i vecina kartica podrzava (Mozes to proveriti u Konfiguraciji OUT_DS u General Tab-u za svaku karticu posebno)
Citat: Srki_82: Na tebi je da u taj buffer umiksujes sve sto ti je potrebno. DSP plugin moze da pored podataka koje dobija od IN plugina koji obezbedjue Winamp da kreira jos koliko god hoces internih IN pluginova i da sve njihove ulaze mixuje i prosledi ih u OUT plugin koji opet moze da ima svoje interne pluginove i da na izlazu pusti nesto sto nije postojalo na izlazu iz DSP plugina.
I sve se svodi na jednu pesmu i jednu Plylistu, nema ovo direktne veze sa Winampom vec se samo koriste OUT i IN Plugini od Winampa zbog njihove rasprostranjenosti a inace je potpuno drugi Player. A i DLL kiji rezervise 5MB u Memoriji nije neki problem ako imas i 256Ram a ne da govorimo vise. U ostalom oni se dinamicki koriste tako da nema bojazni za bilo cim drugim. A extremi od 1000 Hardware kanala nije problem nikakav jer kartica koja podrzava 1000 kanala sigurno nece koristiti MediaMonkey kao program vec ce biti u nekom Milionskom studiu i kostati bar toliko i najcesce ce biti mixeta sa svojim procesorom,....
Citat: Srki_82: Jos jednom ti kazem... napisi nekoliko IN, DSP i OUT pluginova i jednostavno cackaj malo po njihovim bufferima i videces da je sasvim dovoljan jedan buffer u OUT pluginu.
Imam ja napisanih 2 IN, Jedan DSP i Jedan OUT plugin Nije problem u tome vec u samoj Arhitekturi Winampovog SDK koji nije namenjen za rad sa Multi-Thread Funkcijama vec se on kaci na Heap od samog EXE Thread-a. Odgovor/Resenje teme takvo kako je jedino sto u stvari resava problem. Sto i oni Winamp primeri pokazuju. Jednostavno mora se simulirati App. Multi Instance iz jednog Thread-a i sve radi kako treba.
[ Srki_82 @ 19.12.2004. 01:58 ] @
Ocigledno nije u mojoj moci da ti pomognem... samo bezveze trosis vreme citajuci ono sto pisem... sorry. I dalje stojim iza onoga da je sasvim ok sto dobijes dva ista handle-a kad dva puta ucitas isti dll. Probaj da pronadjes source nekog crossfade DSP plugina i vidi kako istovremeno pusta dva fajla.
[ Peke @ 19.12.2004. 03:39 ] @
Citat: Srki_82: Ocigledno nije u mojoj moci da ti pomognem... samo bezveze trosis vreme citajuci ono sto pisem... sorry.
Nazalost, I nebrini nikada nije bezveze citajuci tudje ideje, pa makar ti i ne pomogle. Svaki put kada ti neko kaze ideju, ti preispitas svoju i stalno ponavljas te na kraju ti ili neko drugi se seti neceg pametnog. BTW A sta je sa tvojim vremenom koje si potrosio na citanje i mozganje?
Citat: Srki_82: I dalje stojim iza onoga da je sasvim ok sto dobijes dva ista handle-a kad dva puta ucitas isti dll.
To i jeste normalno ponasanje DLL-ova u Win-u, Linux je to mnogo fleksibilniji ako mu kazes da hoces jedno to i dobijes. U 99% Slucajeva ovakvo ponasanje Windows-a je prakticno i pozeljno, a meni nije trebalo bas da nabasam na onaj 1% Ebiga.
Citat: Srki_82: Probaj da pronadjes source nekog crossfade DSP plugina i vidi kako istovremeno pusta dva fajla.
Nasao tj. disasemblirao sam jedan  i dosao sam do jednog vrlo logicnog resenja. Sve to funkcionise ovako.
Out buffer je stalno pun dok se pusta pesma, taj buffer se puni iz In plugina Svi Crossfader plugini rade sledece:
1. posalju Winampu WM_User Song ednded Message kada Length(In-Plugin stream)-(in-Plugin Decoded) < Out Buffer
2. Winamp proveri da li postoji sledeca pesma u Play listi i ako postoji inizializuje novi IN Buffer i posalje Out Pluginu Stream pointer
3. Out plugin lepi/puni Out buffer sa novim Stream-om. Zato se i pojavljuje u winamp-u Playing ali pusteno vreme je uvek 00:00 dokle god se prethodna pesma stvarno i ne zavrsi.
4. kada prethodni In stream Buffer postane Last In Stream Played = Length(Last In Stream) novo ucitani in stream dobija In stream played > 0 i tako u nedogled. Dok opet Length(In-Plugin stream)-(in-Plugin Decoded) < Out Buffer Ne bude true.
Ovo je najdnostavnije receno. Sto se tice DSP plugin-a on se nalazi izmedju IN i OUT Plugina i menja Stream Direktno Tj. stream relacije idu ovako IN->DSP->DSP+IN(ili samo DSP u slucaju Digital Sound Processing efekta na samom Stream-u kao sto su Reverb, Echo, ...)->OUT dalje i nije bitno jer to zavisi od samog Out plugin-a. Zato i imas Delay od aktiviranja DSP Plugina do njegovog izvrsenja i toga da cujes efekat DSP Plugin-a. Nazalost DSP Plugin nema uticaja na play listu.
Ja sam definitivno poceo da smaram ovde  ali sta cu kada me ovaj problem jako jako nervira i nemogu da prihvatim da je neresiv, iako nemogu sam da ga resim.
Sta cu nedostatak sivih celia i pravilan algoritam za resavanje 
[ Peke @ 01.02.2005. 04:57 ] @
Hvala svima na pomoci, problem je resen (delimicno) nisam najbolje zadovoljan ali u svakom slucaju naterali ste me da malo dublje udjem u problem, za sada sve ide kako bi trebalo.
Ako nekog interesuje neka se javi ako zeli primer Engine-a.
[ Srki_82 @ 01.02.2005. 19:11 ] @
Mogao bi da okacis engine negde pa da mozemo da ga download-ujemo i vidimo kako si resio problem. Mozda neko dobije neku zanimljivu idejicu koja ti moze pomoci :)
[ Peke @ 02.02.2005. 05:39 ] @
Delimicno uradjen primer mozes skinuti sa http://peke.narod.ru/test/mp3playertest.zip
Uzivajte, Mislim da se sada delimicno videti sta je bio osnovni problem u engine-u. Inace primer je radjen samo za MP3 Fajlove i ogranicen je na 8 Player-a cisto zbog toga sto Integrisane kartice podrzavaju do 16 Hardware-skih kanala i niz bogcega drugog. Pa da se osiguram da ne nestane
Samo raspakuj arhivu u neki Dir, startuj i uzivaj u testiranju.
U User TEMP Direktorijumu se kreiraju TempPlayer-i Tako da se posle testa mogu obrisati.
Kada bih samo uspeo da izbegnem kreiranje istih onda bi ceo osnovni problem i bio resen u potpunosti. Inace to stvarno nije moguce napraviti is DSP-a nazalost  jer svaki pravi svoj Application.OnMessage event koji je vezan za APPLICATION.HANDLE Mada sam i to ovako uspeo da resim jer svaki player ima svoj Handle i potpuno zasebnu kontrolu da bih dobio nezavisnost svakog ponaosob. Nastavak razvoja ide ka tome da mogu svakom player-u dodeliti Drugi izlaz (Muzicku karticu) ali to je vec drugi problem koji je i resen.
Sada ostaje samo da se resi osnova  tj. ova tema.
Ponovo hvala svima na idejama i pomoci.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|