VOIP dll

Alles over het toepassen van API en DLL's in Liberty BASIC

Moderator: anthonio

VOIP dll

Berichtdoor FrederikPot » zo aug 17, 2008 3:06 pm

Hallo, ik heb een dll in elkaar geprogrammeerd voor 'simpele' voip..het neemt 20 millieseconden op en speelt het dan weer af .
Zie download link voor de dll(zolang ie er nog staat).
Je zou de dll entry basicmiccap dus kunnen gebruiken om het geluid te vangen van de microfoon . Dit zou je eventueel kunnen verzenden over een socket en dan aan die kant weer afspelen met de dll entry basicmicplay.
Ik ben niet zo bekend met winsock in Liberty Basic... maar dit is misschien leuk voor degene die eventueel een messenger wil bouwen.
Code: Selecteer alles
Open "C:\frederikbasic.dll" for dll as #dl

struct gc,rc as char[10000]
gc.rc.struct=""

 for a= 1 to 8

  CallDLL #dl, "basicmiccap",gc as STRUCT,r as long
  CallDLL #dl, "basicmicplay",gc as STRUCT,r as long

    next a



Download dll:
http://84.244.8.225/frederikbasic.dll

En hier nog deel van dll code als je erzelf nog aan wilt knutselen :
Code: Selecteer alles


#include <afx.h>
#include <string.h>
#include <mmsystem.h>

extern "C"{


#pragma comment(lib,"winmm.lib")


}




BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)
{
   switch (dwReason)
   {
   case DLL_PROCESS_ATTACH:
      {
      
      break;

      }
   case DLL_PROCESS_DETACH:
      {
      
      break;
      }
   }
   return true;
}




extern "C"  __cdecl int basicmiccap(char* vari1){

#define  TV_VAR      0x1000

BYTE b9[TV_VAR];


MMRESULT m;
WAVEHDR *w;
WAVEHDR *w2;

WAVEFORMATEX wf;
HWAVEIN   hw={0};
HWAVEOUT hout={0};
HMIXER hm;
WAVEINCAPS    caps;
WAVEOUTCAPS    caps2;
UINT  ui;
int r;

   
wf.nSamplesPerSec=8000;
wf.wBitsPerSample=8;
wf.nChannels=1;
wf.wFormatTag=WAVE_FORMAT_PCM;
wf.nBlockAlign=wf.nChannels*(wf.wBitsPerSample/8);
wf.nAvgBytesPerSec= wf.nSamplesPerSec * wf.nBlockAlign;;
wf.cbSize=0;






m=waveInOpen(&hw,WAVE_MAPPER,&wf,(DWORD)NULL,(DWORD)NULL,NULL);

m=waveOutOpen(&hout,WAVE_MAPPER,&wf,(DWORD)NULL,(DWORD)NULL,NULL);


w=(WAVEHDR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(WAVEHDR));
w->lpData=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,TV_VAR);
w->lpData=(char*)(b9);
w->dwBufferLength=TV_VAR;
w->dwFlags = 0;

r=waveInPrepareHeader(hw,w,sizeof(WAVEHDR));

r=waveInAddBuffer(hw,w,sizeof(WAVEHDR));
r=55;
r=waveInStart(hw);

Sleep(20);
r=waveInStop(hw);

strcpy(vari1,(char*)(b9));

return *vari1;

}

extern "C" int __cdecl basicmicplay(char* b6){
#define  TV_VAR2   0x1000

BYTE b4[TV_VAR2];



MMRESULT m;

WAVEHDR *w;
WAVEHDR *w2;

WAVEFORMATEX wf;
HWAVEIN   hw={0};
HWAVEOUT hout={0};
HMIXER hm;
WAVEINCAPS    caps;
WAVEOUTCAPS    caps2;
UINT  ui;
int r;
wf.nSamplesPerSec=8000;
wf.wBitsPerSample=8;
wf.nChannels=1;
wf.wFormatTag=WAVE_FORMAT_PCM;
wf.nBlockAlign=wf.nChannels*(wf.wBitsPerSample/8);
wf.nAvgBytesPerSec= wf.nSamplesPerSec * wf.nBlockAlign;;
wf.cbSize=0;

w2=(WAVEHDR*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(WAVEHDR));
w2->dwBufferLength= TV_VAR2;

char temp4[8000]="";
strncpy(temp4,(char*)(b6),7950);
w2->lpData=temp4;



r=::waveOutGetDevCaps(ui,&caps2,sizeof(caps2));

r=waveOutOpen(&hout,WAVE_MAPPER,&wf,(DWORD)NULL,(DWORD)NULL,NULL);

r=waveOutPrepareHeader(hout,w2,sizeof(WAVEHDR));

r=waveOutWrite(hout,w2,sizeof(WAVEHDR));


r=waveOutUnprepareHeader(hout,w2,sizeof(WAVEHDR));

return *b6;
}



FrederikPot
 
Berichten: 14
Geregistreerd: vr aug 15, 2008 11:31 pm

Re: VOIP dll

Berichtdoor anthonio » zo aug 17, 2008 5:21 pm

Hoi frederic,

allereerst ik heb je onderwerp ff verplaats naar het juiste plaats.
Zeer mooie ddl die je daar in elkaar hebt geknutseld en deze kan inderdaad nog van pas komen voor messenger toepassingen en dergelijke.

Mag ik vragen waarom er maar 20 milliseconden worden opgenomen?

Andy
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Re: VOIP dll

Berichtdoor FrederikPot » zo aug 17, 2008 5:43 pm

Hoi, natuurlijk mag je dat vragen :roll: .. ik weet niet precies waarom eigenlijk, maar het is dacht ik wel zo dat als het bestand(opgenomen data) groter wordt dan 64KB er mogelijk een splitsing komt , doordat het door de socket wordt afgebroken en dan pas de volgende reeks weer verzend , de zogenaamde ticks bij tcp sockets.. of dit bij winsock ook geldt weet ik niet.
En natuurlijk een zo snel mogelijke weergave aan de andere kant.
Moet zeggen voor degene die met de dll wil experimenteren,je mogelijk beter geluid kruigt als je een deel van de data eraf knipt (vanaf de 'achterkant').
Nou tot zover , dan maar weer.
Groeten,

Frederik
FrederikPot
 
Berichten: 14
Geregistreerd: vr aug 15, 2008 11:31 pm

Re: VOIP dll

Berichtdoor anthonio » zo aug 17, 2008 6:21 pm

Bedankt voor dit even nader te verklaren.
Zag er even de logica niet van in maar dit verklaart veel.

Andy
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm


Keer terug naar API/DLL

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron