Gå til innhold

Lydmanipulering ved hjelp av Windows Audio Session API (WASAPI)


Anbefalte innlegg

Heisann!

Jeg har planlagt et lite sommerprosjekt som går på å manipulere all lyd fra datamaskinen i real-time før det sendes til lydkortet. Applikasjonen trenger i første omgang ikke et grafisk grensesnitt eller intaraktivitet. Den trenger bare å gjøre manipulasjonen så lenge programmet kjører. Har funnet ut av WASAPI antageligvis kan gjøre dette for meg.

 

Prøver å følge beskrivelene på denne siden http://msdn.microsoft.com/en-us/library/windows/desktop/dd316775(v=vs.85).aspx

Får til å velge stanard lydutgang og litt sånn, men aner ikke hvordan jeg får tak på den totale lydstrømmen "ut av windows" slik at jeg kan manipulere den, og ei heller hvordan jeg får skrevet til bufferen til lydutgangen. Eksemplene som gis på rendering eller capturing bruker en client-class som kan implementeres på mange måter, men som de selvsagt ikke har inkludert.

 

Tips eller forslag til hvordan jeg kan lese audio streamen til windows, for så å skrive til bufferen til default utgangen?

 

Eventuelt tips til andre programmerings bilbiotek eller programmer for å skape samme funksjonalitet?

Lenke til kommentar
Videoannonse
Annonse

Etter det jeg vet (mulig jeg tar feil) så tror jeg du er pent nødt til å bruke WASAPI for å hente ut lyd fra Windows. Du kan godt dytte ferdig data til et annet API (loopback problem kanskje?).

Skulle ønske jeg kunne hjulpet mer, men har bare børstet borti dette ved en tidligere anledning, og kom ikke spesielt lenger enn grunn research.

Lenke til kommentar

Ok, litt fremgang her. Ser ut som jeg har fått tak i bufferen til det som kommer/eller er på vei ut av PCen. Jeg får en peker til en BYTE. Denne byten er en del av en packet, som de beskriver som dette:

The methods in this interface manage the movement of data packets that contain audio-rendering data. The length of a data packet is expressed as the number of audio frames in the packet. The size of an audio frame is specified by the nBlockAlign member of the WAVEFORMATEX structure that the client obtains by calling the IAudioClient::GetMixFormat method. The size in bytes of an audio frame equals the number of channels in the stream multiplied by the sample size per channel. For example, the frame size is four bytes for a stereo (2-channel) stream with 16-bit samples. A packet always contains an integral number of audio frames.

 

nBlockAlign er i mitt tilfelle, akkurat nå, 8. Sample size pr channel er 32 bit (4 byte) og 2 kanaler (stereo). Hvordan kan jeg bruke denne pekeren til denne BYTE'n til å ekstrakte den faktiske amplitudeverdien til hver kanal på enten heltallsformat eller flyttallsformat?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...