DirectX-DirectSound i C# ,problem zvuk
25.06.2007. u 13:47 · pre 235 meseci
#1
Imam problem sa reprodukcijom zvuka.
Ovako podesavam parametre za reprodukciju:
SignalSampleFrequency mi je frekvencija koju sam prosledio "pre" ovog koda.
Ovo mi je funkcija gde vrsim reprodukciju
U argArrayList se nalaze brojne vrednosti,i sada u zavisnosti od frekvencije ,meni bi bilo pozeljno da se cuje kao razlicit sum.
Imam generator funkcija koji mi je zakacen na uredjaj.U aplikaciji sa tog uredjaja uzimam podatke.Problem mi je sto mi se ne cuju pravilno sinusoide.Npr cujem i na 10 Hz,a bogami i na 40 KHz promenu signala.
Da li mozda neko moze da mi pomogne i nasluti gresku :)
Ovako podesavam parametre za reprodukciju:
Code:
format = new WaveFormat();
format.BitsPerSample =16;
format.Channels = 1;
format.BlockAlign = 2;
format.FormatTag = WaveFormatTag.Pcm;
format.SamplesPerSecond = 22050;
format.AverageBytesPerSecond = format.SamplesPerSecond * format.BlockAlign;
// buffer description
BufferDescription desc = new BufferDescription(format);
desc.ControlFrequency = true;
desc.BufferBytes = format.AverageBytesPerSecond/20 ;
desc.ControlVolume = true;
deviceSound.SetCooperativeLevel(argControl , CooperativeLevel.Priority );
secBuffer = new SecondaryBuffer(desc, deviceSound);
secBuffer.Volume =0;
secBuffer.Frequency = SignalSampleFrequency;
format = new WaveFormat();
format.BitsPerSample =16;
format.Channels = 1;
format.BlockAlign = 2;
format.FormatTag = WaveFormatTag.Pcm;
format.SamplesPerSecond = 22050;
format.AverageBytesPerSecond = format.SamplesPerSecond * format.BlockAlign;
// buffer description
BufferDescription desc = new BufferDescription(format);
desc.ControlFrequency = true;
desc.BufferBytes = format.AverageBytesPerSecond/20 ;
desc.ControlVolume = true;
deviceSound.SetCooperativeLevel(argControl , CooperativeLevel.Priority );
secBuffer = new SecondaryBuffer(desc, deviceSound);
secBuffer.Volume =0;
secBuffer.Frequency = SignalSampleFrequency;
SignalSampleFrequency mi je frekvencija koju sam prosledio "pre" ovog koda.
Ovo mi je funkcija gde vrsim reprodukciju
Code:
public void Play(ref System.Collections.ArrayList argArrayList)
{
int j = 0;
for (int i = argArrayList.Count - 50; i < argArrayList.Count; i++)
{
soundArray[j] =Convert.ToInt16 (argArrayList[i]);
// soundArray[j]=Convert.ToInt16(argArrayList[i])<<4;
j++;
}
secBuffer.Write(0, soundArray , LockFlag.None );
secBuffer.Play(0, BufferPlayFlags.Default );
}
public void Play(ref System.Collections.ArrayList argArrayList)
{
int j = 0;
for (int i = argArrayList.Count - 50; i < argArrayList.Count; i++)
{
soundArray[j] =Convert.ToInt16 (argArrayList[i]);
// soundArray[j]=Convert.ToInt16(argArrayList[i])<<4;
j++;
}
secBuffer.Write(0, soundArray , LockFlag.None );
secBuffer.Play(0, BufferPlayFlags.Default );
}
U argArrayList se nalaze brojne vrednosti,i sada u zavisnosti od frekvencije ,meni bi bilo pozeljno da se cuje kao razlicit sum.
Imam generator funkcija koji mi je zakacen na uredjaj.U aplikaciji sa tog uredjaja uzimam podatke.Problem mi je sto mi se ne cuju pravilno sinusoide.Npr cujem i na 10 Hz,a bogami i na 40 KHz promenu signala.
Da li mozda neko moze da mi pomogne i nasluti gresku :)
Potpis
Svako može, a poneko zna.