Gå til innhold

Anbefalte innlegg

Hei,

 

Driver å lager en liten softsynth.

Bruker Device, SecondaryBuffer, WaveFormat og BufferDescription fra DirectSound.

Alt fungerer vel så vel, men problemet er at når jeg spiller

av den genererte waveformen, så spilles den i 1 sekund. Hvordan kan jeg bestemme

lengden på samplen som spilles av, slik at den feks spilles av i 0.5 s.

Har sett på alle medlemmene til klassene, men finner ikke ut av det.

 

Jeg har feks keyboard-støtte, så når jeg trykker på en tast så spilles waveformen av,

men som sagt spiller den av i ett sekund.

Så hvis jeg holder inne tasten, så spilles den av med et intervall på 1s, og ikke

lengden av samplen.

 

Her er litt info om hva jeg har satt ting til:

 

Secondary Buffer.Play's BufferPlayFlags er satt til Default og ikke Looping.

Secondary Buffer.Write's er satt til LockFlag.None //LockFlag.EntireBuffer ser ikke ut til å ha noen effekt. så begge to gir samme output.

 

BitsPerSample = 16;

sampleRate = 44100

sampleSize = 8000; //denne kan jeg endre på, hvis jeg setter den til 44100 så blir samplens

//varighet på 1 sekund. Men selv om den er feks 8000 så er varigheten 1s,

//men samplens frekvens blir lysere.

 

Noen vet hvordan jeg kan velge lengden til samplen som spilles av?

Jeg har ikke lyst å endre på frekvensen i secondaryBuffer, fordi samplen i utgangspunktet har _en_ lengde. (Så frekvensen til samplen setter jeg ikke i DSound, men jeg genererer den selv).

 

Noen ideer?

Endret av Rudi81
Lenke til kommentar
Videoannonse
Annonse

Det er en ting som du må være klar over her som noen blir forvirret av. En sample er i alle tilfeller av målinger den minste lesbare enhet. Altså i DirectSound, er en sample 8, 16 eller 24-bit.

Samplerate forteller frekvensen på data som går igjenn, altså frekvensen på antall samples som går til DirectSound.

44100 betyr at 44100 samples må gå igjennom for å danne 1 sekund med lyd.

 

Derfor kan det være lurt å ikke kalle en lyd-bit for en sample, fordi det kan være forvirrende når du jobber såpass langt ned.

 

Skal du ha et buffer på to sekunder, må du ha 88100 samples. Men DirectSound må være klar over at frekvensen er 44100 også, noe den sikkert er.

 

edit: Du burde forøvrig kikke på XAct istedet for DirectSound, grunnet at DirectSound er under deprekering (skal altså ikke lenger brukes)

Jeg går utifra at du bruker SlimDX, hvis ikke burde du gjør det.

Endret av GeirGrusom
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...