Płynność dźwięku

0
sndPlaySound("Dzwiek\\start.wav", SND_FILENAME | SND_LOOP | SND_ASYNC | SND_NODEFAULT);
//...jakiś kod, dźwięk w zależności od pewnej siły odtwarza się przez rożny czas
//dalej
PlaySound(NULL,NULL,SND_NODEFAULT); //usuwanie tej linii nic nie daje
sndPlaySound("Dzwiek\\ustalenie.wav", SND_FILENAME | SND_LOOP | SND_ASYNC | SND_NODEFAULT);

U mnie na komputerze 2 rdzeniowym dźwięk ładnie się odtwarza, nie słychać momentu stopu, w którym zakańczny jest jeden dźwięk a odtwarzany drugi.
Na komputerze kolegi niestety słychać stop, że dźwięk się urywa i drugi rozpoczyna. Podejrzewam, że to zależy od procka. Czy jest wobec tego jakiś sposób na zaradzenie temu?

0

BTW problem z dźwiękiem występuje na Viście. Ponadto w czasie gry często dźwięk po prostu ginie i nie ma go. Tak poza tym to sama aplikacja na Viście często się zawiesza.

0

Lepiej uzyć DirectX do odtwarzania dźwięku - na pewno będzie dużo wydajniej. To czego użyłeś ma już co najmniej 20 lat i istnieje tylko dla zachowania wstecznej kompatybilności ze starymi programami.

0

Aha, ok dzięki za info. Czyli to grubsza sprawa, myślałem, że może da się coś z tym zrobić jeszcze. To zostawiam tak jak jest, bo opanowanie DirectaSounda to z tydzień, bo tam aby muzyczkę odtworzyć to z 200 linii kodu trzeba nastukać, a ja na już potrzebuje odtwarzać dźwięk.

0

Możesz jeszcze spróbować użyć równie archaicznego MCI, albo jakiejś biblioteki typu bass o ile twoja gra nie jest komercyjna.

0

Dałem przed akcją wczytanie do pamięci muzyki i w czasie odtwarzania pobieranie z pamięci zamiast dysku i trochę przestój zmalał aczkolwiek i tak jest trochę słyszalny, ale dobra jest:)

0

uzyj direct sound a MMSystem sobie odpusc

kawalek kodu

  if (FAILED (DirectSoundCreate (ads[i]->guid, &pds, NULL))){
 ShowMessage("Unable to create the DirectSound Object");//   cout << "Unable to create the DirectSound Object!!!" << endl;
    return 3;
  }
  if (FAILED (pds->SetCooperativeLevel (((TWinControl*)AParent)->Handle,
    DSSCL_PRIORITY))){
 ShowMessage("Unable to set the cooperative level with DirectSound");//     cout << "Unable to set the cooperative level!!!" << endl;
      return 4;
  }


  memset (&bd, 0, sizeof (DSBUFFERDESC));
  bd.dwSize = sizeof (DSBUFFERDESC);
  bd.dwFlags = DSBCAPS_PRIMARYBUFFER;
  bd.dwBufferBytes = 0;     //must be 0 for primary buffer
  bd.lpwfxFormat = NULL;    //must be null for primary buffer

  memset (&wf, 0, sizeof (WAVEFORMATEX));
  wf.wFormatTag = WAVE_FORMAT_PCM;
  wf.nChannels = 2;
  wf.nSamplesPerSec = 44100;       //44,1 KHz   // 1 KHz = 1000 pomiarów na sekunde czyli mamy 44100 pomiarów na sekunde      ? 0,022675736961451247165532879818594
  wf.wBitsPerSample = 16;
  wf.nBlockAlign = 4;
  wf.nAvgBytesPerSec = 176400;

  if (SUCCEEDED (pds->CreateSoundBuffer (&bd, &ppdsb, NULL))){
	ppdsb->SetFormat (&wf);
  }

no dodam od siebie ze mozna tez uzyc direct show i odtworzyc dzwiek bo jak uzywasz directosound to sie wsadza do bufora jakis skrawek dzwieku statycznie czy tam dynamicznie, zapisuj do secondarybuffer

1 użytkowników online, w tym zalogowanych: 0, gości: 1