helen Postat 24 augusti 2006 Postat 24 augusti 2006 (redigerat) Hej, Jag gör ett audio software i Visual c++ 2005, som skall klara av att spela upp och in. Ljudkortet Ă€r PCI-424, som har flera IO kanaler, men dessa kanaler kommer jag inte Ă„t. Jag anvĂ€nder mig av Steninbergs ASIO API, och har dessutom laddat ner ASIO sdk och föröker provköra de sample som följer med. Sampeln skall kunna hitta alla kanaler hos ljukortet men den verkar inte ens finna drivrutinen för ASIO... VAD kan det beror pĂ„. Ăven sampeln Ă€r skriven i Visual c++. Jag Ă€r sĂ€kert pĂ„ att jag har drivrutinerna för ASIO eftersom jag har laddat ner ett gratis program som kallas för SLAB som klarar av att kartlĂ€gga alla existerande ljudkanaler. Ăr det nĂ„gon som kĂ€nner till detta problem, hjĂ€lp. Har kört fast nu lĂ€nge.... Redigerat 24 augusti 2006 av helen
tsmalmbe (oregistrerad) Postat 24 augusti 2006 Postat 24 augusti 2006 (redigerat) Jag har sjÀlv ingen erfarenhet av programmeringssprÄket du anvÀnder, men jag önskar dig lycka till! Redigerat 24 augusti 2006 av tsmalmbe
Piccazzo Postat 24 augusti 2006 Postat 24 augusti 2006 Du berÀttar inte ens med vad det Àr du programmerar? Jag gör ett audio software i Visual c++ 2005, som skall klara av att spela upp och in
VacUm Postat 24 augusti 2006 Postat 24 augusti 2006 Ok, nu fattar jag ett annat inlĂ€gg. (hĂ„ll dig gĂ€rna till samma trĂ„d) Förmodligen sĂ„ har du tvĂ„ olika sorters drivrutiner tillgĂ€ngliga i Windows och sampeln hanterar inte vilken den ska vĂ€lja. Ăr inte alls sĂ€ker, men har du fĂ„tt ASIO att funka i windows annars och exemplet kompilerar utan att klaga sĂ„ borde det vara nĂ„t i systemet. Detta Ă€r nog lite fel forum för dig för hĂ€r tror jag man kan rĂ€kna C++ under Win32-kodarna pĂ„ en hand.
lavrell Postat 24 augusti 2006 Postat 24 augusti 2006 Du berĂ€ttar inte ens med vad det Ă€r du programmerar? Jag gör ett audio software i Visual c++ 2005, som skall klara av att spela upp och in Helen gjorde en EDIT efter han skrivit sitt svar đł
DĂ„ligtGehör Postat 24 augusti 2006 Postat 24 augusti 2006 Jag fattar inte detta! Ăr en sampel ett program i detta fall, alltsĂ„ inte en bara ett inspelat ljud vilket man kan hantera i ett program.
VacUm Postat 24 augusti 2006 Postat 24 augusti 2006 Jag fattar inte detta! Ăr en sampel ett program i detta fall, alltsĂ„ inte en bara ett inspelat ljud vilket man kan hantera i ett program. Ett kodexempel. Hehe, vĂ€ldigt förvirrande just hĂ€r...
Piccazzo Postat 24 augusti 2006 Postat 24 augusti 2006 Helen gjorde en EDIT efter han skrivit sitt svar I see đđł
Linus Postat 24 augusti 2006 Postat 24 augusti 2006 Helen gjorde en EDIT efter han skrivit sitt svar đ Ăr Helen en han? đ
Danny Cort (oregistrerad) Postat 24 augusti 2006 Postat 24 augusti 2006 Helen gjorde en EDIT efter han skrivit sitt svar đ Ăr Helen en han? đ Det tĂ€nkte jag ocksĂ„ pĂ„...
helen Postat 24 augusti 2006 TrĂ„dstartare Postat 24 augusti 2006 Till Vacum, Jag har tagit bort alla andra asio drivers och nu har jag enbart en version av det. ĂndĂ„ kvarstĂ„r problemmet. För att komma Ă„t dll filen sĂ„ anger jag enbart sökvĂ€gen pĂ„ följande sĂ€tt #define ASIO_PATH "C:\Documents and Settings\VERA362\MyDocuments\ ASIO\SDK\host\asio4all.dll" Ăr det fel sĂ€tt att försöka komma Ă„t dll:en, hur skull man annars göra det. Nedan Ă€r koden: #include <windows.h> #include "iasiodrv.h" #include "asiolist.h" #include "stdio.h " #define ASIODRV_DESC "description" #define INPROC_SERVER "InprocServer32" #define ASIO_PATH "C:\Documents and Settings\VERA362\My Documents\ASIO SDK\host\asio4all.dll" //"software\\asio" //#define ASIO_PATH "asio4all.dll" //"software\\asio" #define COM_CLSID "clsid" // ****************************************************************** // Local Functions // ****************************************************************** static LONG findDrvPath (char *clsidstr,char *dllpath,int dllpathsize) { printf("findDrvPath (char *clsidstr,char *dllpath,int dllpathsize)\n\n"); HKEY hkEnum,hksub,hkpath; char databuf[512]; LONG cr,rc = -1; DWORD datatype,datasize; DWORD index; OFSTRUCT ofs; HFILE hfile; BOOL found = FALSE; CharLowerBuff(clsidstr,strlen(clsidstr)); if ((cr = RegOpenKey(HKEY_CLASSES_ROOT,COM_CLSID,&hkEnum)) == ERROR_SUCCESS) { index = 0; while (cr == ERROR_SUCCESS && !found) { cr = RegEnumKey(hkEnum,index++,(LPTSTR)databuf,512); if (cr == ERROR_SUCCESS) { CharLowerBuff(databuf,strlen(databuf)); if (!(strcmp(databuf,clsidstr))) { if ((cr = RegOpenKeyEx(hkEnum,(LPCTSTR)databuf,0,KEY_READ,&hksub)) == ERROR_SUCCESS) { if ((cr = RegOpenKeyEx(hksub,(LPCTSTR)INPROC_SERVER,0,KEY_READ,&hkpath)) == ERROR_SUCCESS) { datatype = REG_SZ; datasize = (DWORD)dllpathsize; cr = RegQueryValueEx(hkpath,0,0,&datatype,(LPBYTE)dllpath,&datasize); if (cr == ERROR_SUCCESS) { memset(&ofs,0,sizeof(OFSTRUCT)); ofs.cBytes = sizeof(OFSTRUCT); hfile = OpenFile(dllpath,&ofs,OF_EXIST); if (hfile) rc = 0; } RegCloseKey(hkpath); } RegCloseKey(hksub); } found = TRUE; // break out } } } RegCloseKey(hkEnum); } return rc; } static LPASIODRVSTRUCT newDrvStruct (HKEY hkey,char *keyname,int drvID,LPASIODRVSTRUCT lpdrv) { HKEY hksub; char databuf[256]; char dllpath[MAXPATHLEN]; WORD wData[100]; CLSID clsid; DWORD datatype,datasize; LONG cr,rc; if (!lpdrv) { if ((cr = RegOpenKeyEx(hkey,(LPCTSTR)keyname,0,KEY_READ,&hksub)) == ERROR_SUCCESS) { datatype = REG_SZ; datasize = 256; cr = RegQueryValueEx(hksub,COM_CLSID,0,&datatype,(LPBYTE)databuf,&datasize); if (cr == ERROR_SUCCESS) { rc = findDrvPath (databuf,dllpath,MAXPATHLEN); //rc = findDrvPath (databuf,ASIO_PATH,MAXPATHLEN); if (rc == 0) { lpdrv = new ASIODRVSTRUCT[1]; if (lpdrv) { memset(lpdrv,0,sizeof(ASIODRVSTRUCT)); lpdrv->drvID = drvID; MultiByteToWideChar(CP_ACP,0,(LPCSTR)databuf,-1,(LPWSTR)wData,100); if ((cr = CLSIDFromString((LPOLESTR)wData,(LPCLSID)&clsid)) == S_OK) { memcpy(&lpdrv->clsid,&clsid,sizeof(CLSID)); } datatype = REG_SZ; datasize = 256; cr = RegQueryValueEx(hksub,ASIODRV_DESC,0,&datatype,(LPBYTE)databuf,&datasize); if (cr == ERROR_SUCCESS) { strcpy(lpdrv->drvname,databuf); } else strcpy(lpdrv->drvname,keyname); } } } RegCloseKey(hksub); } } else lpdrv->next = newDrvStruct(hkey,keyname,drvID+1,lpdrv->next); return lpdrv; } static void deleteDrvStruct (LPASIODRVSTRUCT lpdrv) { IASIO *iasio; if (lpdrv != 0) { deleteDrvStruct(lpdrv->next); if (lpdrv->asiodrv) { iasio = (IASIO *)lpdrv->asiodrv; iasio->Release(); } delete lpdrv; } } static LPASIODRVSTRUCT getDrvStruct (int drvID,LPASIODRVSTRUCT lpdrv) { while (lpdrv) { if (lpdrv->drvID == drvID) return lpdrv; lpdrv = lpdrv->next; } return 0; } // ****************************************************************** // ****************************************************************** // AsioDriverList // ****************************************************************** AsioDriverList::AsioDriverList () { HKEY hkEnum = 0; char keyname[MAXDRVNAMELEN]; LPASIODRVSTRUCT pdl; LONG cr; DWORD index = 0; BOOL fin = FALSE; numdrv = 0; lpdrvlist = 0; //cr = RegOpenKey(HKEY_LOCAL_MACHINE,0,&hkEnum); cr = RegOpenKey(HKEY_LOCAL_MACHINE,ASIO_PATH,&hkEnum); while (cr == ERROR_SUCCESS) { if ((cr = RegEnumKey(hkEnum,index++,(LPTSTR)keyname,MAXDRVNAMELEN))== ERROR_SUCCESS) { lpdrvlist = newDrvStruct (hkEnum,keyname,0,lpdrvlist); } else fin = TRUE; } if (hkEnum) RegCloseKey(hkEnum); pdl = lpdrvlist; while (pdl) { numdrv++; pdl = pdl->next; } if (numdrv) CoInitialize(0); // initialize COM } AsioDriverList::~AsioDriverList () { if (numdrv) { deleteDrvStruct(lpdrvlist); CoUninitialize(); } } LONG AsioDriverList::asioGetNumDev (VOID) { return (LONG)numdrv; } LONG AsioDriverList::asioOpenDriver (int drvID,LPVOID *asiodrv) { LPASIODRVSTRUCT lpdrv = 0; long rc; if (!asiodrv) return DRVERR_INVALID_PARAM; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { if (!lpdrv->asiodrv) { rc = CoCreateInstance(lpdrv->clsid,0,CLSCTX_INPROC_SERVER,lpdrv->clsid,asiodrv); if (rc == S_OK) { lpdrv->asiodrv = *asiodrv; return 0; } // else if (rc == REGDB_E_CLASSNOTREG) // strcpy (info->messageText, "Driver not registered in the Registration Database!"); } else rc = DRVERR_DEVICE_ALREADY_OPEN; } else rc = DRVERR_DEVICE_NOT_FOUND; return rc; } LONG AsioDriverList::asioCloseDriver (int drvID) { LPASIODRVSTRUCT lpdrv = 0; IASIO *iasio; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { if (lpdrv->asiodrv) { iasio = (IASIO *)lpdrv->asiodrv; iasio->Release(); lpdrv->asiodrv = 0; } } return 0; } LONG AsioDriverList::asioGetDriverName (int drvID,char *drvname,int drvnamesize) { LPASIODRVSTRUCT lpdrv = 0; if (!drvname) return DRVERR_INVALID_PARAM; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { if (strlen(lpdrv->drvname) < (unsigned int)drvnamesize) { strcpy(drvname,lpdrv->drvname); } else { memcpy(drvname,lpdrv->drvname,drvnamesize-4); drvname[drvnamesize-4] = '.'; drvname[drvnamesize-3] = '.'; drvname[drvnamesize-2] = '.'; drvname[drvnamesize-1] = 0; } return 0; } return DRVERR_DEVICE_NOT_FOUND; } LONG AsioDriverList::asioGetDriverPath (int drvID,char *dllpath,int dllpathsize) { LPASIODRVSTRUCT lpdrv = 0; if (!dllpath) return DRVERR_INVALID_PARAM; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { if (strlen(lpdrv->dllpath) < (unsigned int)dllpathsize) { strcpy(dllpath,lpdrv->dllpath); return 0; } dllpath[0] = 0; return DRVERR_INVALID_PARAM; } return DRVERR_DEVICE_NOT_FOUND; } LONG AsioDriverList::asioGetDriverCLSID (int drvID,CLSID *clsid) { LPASIODRVSTRUCT lpdrv = 0; if (!clsid) return DRVERR_INVALID_PARAM; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { memcpy(clsid,&lpdrv->clsid,sizeof(CLSID)); return 0; } return DRVERR_DEVICE_NOT_FOUND; }
Jonte Postat 24 augusti 2006 Postat 24 augusti 2006 Hej hopp... Jag har inte programmerat pÄ lÀnge, och kan vara ute och cykla. Men detta Àr vad jag fÄr ut av koden efter att ha kollat lite snabbt.. Först en frÄga: ASIO_PATH, har du lagt till detta sjÀlv, eller fanns det frÄn början? Nedan ser ut som ett gÀng generella funktioner. Funktionerna i sig ger inget synligt eller hörbart resultat, utan hjÀlper dig att hitta lÀmplig ASIO drivrutin och anvÀnda den. Funktioner som enumererar (kan inte termerna), loopar igenom och letar upp samtliga ASIO drivrutiner som finns installerade pÄ den maskinen som programmet körs i. NÄgon sökvÀg ska du alltsÄ inte behöva ange, utan funktionen nedan fixar det Ät dig. Jag antar att det finns nÄgot mer exempel dÀr dom anvÀnder funktionerna och dessutom gör nÄgot? I sÄ fall hade jag försökt kika pÄ dom exemplen, och lÀmna nedan orört för stunden. TyvÀrr programmerar jag knappt lÀngre, och har aldrig kollat pÄ ASIO tidigare, sÄ mer Àn sÄ kan jag inte hjÀlpa.
helen Postat 24 augusti 2006 TrÄdstartare Postat 24 augusti 2006 Hej, FrÄn början sÄg macro delen ut som nedan men jag bytte ut det till asio.dll filens sök, men jag antar att det Àr fel och har Ànderat detta tillbaks till den ursprungliga och nu verkar den gÄ in i funktionen findDrivePath men fortfarande finner den inte drivern..... #define ASIO_PATH "software\\asio" Jag förstÄr dock inte varför man skriver som: "software\\asio"
Jonte Postat 24 augusti 2006 Postat 24 augusti 2006 (redigerat) DĂ„ var jag nog ute och cyklade lite Ă€ndĂ„ Testa följande en gĂ„ng: #define ASIO_PATH "C:\\Documents and Settings\\VERA362\\My Documents\\ASIO SDK\\host" Eller kanske som du gjorde, fast med dubbla "\". Du anvĂ€nder \x för att lĂ€gga in kontrolltecken, dĂ€r du ersĂ€tter x med lĂ€mpligt tecken. SĂ„ för att fĂ„ ett \ anger man tvĂ„ stycken: \\ TillĂ€gg: Det finns ingen katalog nĂ„gonstans bland det du har laddat ner som heter just "asio"? I sĂ„ fall kanske det Ă€r sökvĂ€gen dit du ska ange? ps. Jag gissar fortfarande vĂ€ldigt mycket, sĂ„ hoppas nĂ„gon som faktiskt kan programmera kan komma fler tips đ Redigerat 24 augusti 2006 av Jonte
helen Postat 24 augusti 2006 TrÄdstartare Postat 24 augusti 2006 Hej igen! Nej, det Àr ÀndÄ snÀllt av dig att du försöka hjÀlpa till, men men det verkar inte fungera fortfarnade........ tack i allafall
VacUm Postat 24 augusti 2006 Postat 24 augusti 2006 Utan att ha satt mig in i appen (vilket Àr otroligt frustrerande nÀr det inte finns med tab, jag blir helt yr av att lÀsa detdÀr) sÄ Àr ju första definerade funktionen nÄgot som ska hitta sökvÀgen till drivrutinen. Dessutom tror jag det Àr meningen att systemet ska presentera ASIO-drivaren och inte programmet som ska leta reda pÄ dll-filen (men det Àr jag inte helt sÀker pÄ). Mitt tips Àr att du letar reda pÄ ett forum dÀr mer kompetenta VC++ kodare finns. Jag Àr helt grön nÀr det gÀller Win32, och har aldrig ens provat ASIO API/SDK. Internet mÄste garanterat krylla av forum som passar dig bÀttre.
stajo Postat 24 augusti 2006 Postat 24 augusti 2006 Hej Nu kör jag sjÀlv bara C++ och Java pÄ sistonde och mest i unix miljö... Kan dock kommentera att i allmÀnhet brukar det inte vara sÄ bra att ha pather med space i... som tex C:\\Documents and Settings\\ sÄ jag rekommenderar dig att lÀgga din dll nÄgon annanstans.
Recommended Posts
Bli medlem (kostnadsfritt) eller logga in för att kommentera
Du behöver vara medlem för att delta i communityn
Bli medlem (kostnadsfritt)
Bli medlem kostnadsfritt i vÄr community genom att registrera dig. Det Àr enkelt och kostar inget!
Bli medlem nu (kostnadsfritt)Logga in
Har du redan en inloggning?
Logga in nuLogga in hÀr.