AMajor Skrevet 17. juni 2011 Del Skrevet 17. juni 2011 (endret) 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 17. juni 2011 av Rudi81 Lenke til kommentar
GeirGrusom Skrevet 18. juni 2011 Del Skrevet 18. juni 2011 (endret) 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 18. juni 2011 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå