Войти
ПрограммированиеФорумЗвук

OpenAL щелчки

#0
23:34, 18 дек. 2008

Проигрываю потоковый звук в ogg формате. При циклическом воспроизведении в момент окончания звука и начале нового возникает щелчек. Я так предполагаю дело в буфере. Кто когда нить с этим сталкивался?


#1
11:05, 19 дек. 2008

Сдвигать границы буфера пробовал?

#2
0:57, 23 дек. 2008

А как это сделать? У меня при генерации буфера используеться количество фактически считанных байт из файла:

  // vars
  char    eof = 0;
  int      current_section;
  size_t    TotalRet = 0, ret;
  char    *PCM;

  if (Size < 1) return false;
  PCM = new char[Size];
 
  // Read loop
  while (TotalRet < Size)
  {
    ret = ov_read(mVF, PCM + TotalRet, Size - TotalRet, 0, 2, 1, ¤t_section);

    // if end of file or read limit exceeded
    if (ret == 0) break;
    else if (ret < 0)    // Error in bitstream
    {
      //
    }
    else
    {
      TotalRet += ret;
    }
  }
  if (TotalRet > 0)
  {
    alBufferData(BufID, format, (void *)PCM, TotalRet, freq);
    if (!ChkErr()) return false;
  }
  delete [] PCM;
  return (ret > 0);

#3
10:06, 23 дек. 2008

Попробуй читать также, а в OpenAL передавать PCM+1024 и TotalRet-2048. Если щелчки исчезнут (именно щелчки т.к. стык получится неровноый), то проблема скорее всего в чтении.
Месяц назад мучался с похожей проблемой в XAudio, но щелчки при зацикливании были во время воспроизведении звука из WaveBank'ов. А вот ogg и чистый wav воспроизводились нормально.

#4
14:13, 23 дек. 2008

Я еще не сказал, что помимо щелчков в перерывах небольшая пауза и при окончании звука и начале воспроизведения его заново возникают щелчки. Попробовал подрезать данные PCM+1024 и TotalRet-2048, пауза вроде как пропала, а щелчки все равно остались. Как ни странно код я брал из примеров, который идет к OpenAL SDK. Но у них я не нашел примеров с зацикленным потоковым звуком.

И еще появились щелчки теперь все время ))))

#5
15:15, 23 дек. 2008

K@TZZ0!!!
Проблема может быть связана с неправельным представлением формата, точнее положения 0.  Другими словами signed char != usigned char. У первого 0 = 0 у второго 0 = 127. Встречал этот прикол в какомто редакторе, кажеться ГолдВаве. При неправельном представлении происходит скачек из 0 в максимум, а дальше звук тоже неправильно представляеться но на слух это различить сложно.

#6
16:57, 23 дек. 2008

В моем случае звук из потока нормально играет, глюк возникает при воспроизведении заново при цикле

#7
17:03, 23 дек. 2008

А от размера файла это может зависеть?

#8
17:03, 23 дек. 2008

Всмысле если маленький файл

#9
17:45, 23 дек. 2008

K@TZZ0!!!
>Всмысле если маленький файл
Если очень очень маленький то на встроеных звуковухах будет репеть. Но в общем случае влиять не должно.

Давай так, создай мелодию в одну секунду, заполни данные нулями, и проиграй у себя, если щелчки будут то приведи размер семпла и значение.

ПрограммированиеФорумЗвук

Тема в архиве.