AC3Filter support
September 02, 2010, 06:49:10 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Download NEW AC3Filter 1.63b
 
   Home   Help Search Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: Пожалуйста, поправьте форматирование выходного потока в PCM Float  (Read 2085 times)
willow
Newbie
*
Posts: 3


View Profile
« on: October 12, 2009, 05:41:46 PM »

Code:
bool
WinampSink::query_input(Speakers _spk) const
{
  switch (_spk.format)
  {
    case FORMAT_PCM16: break;
    case FORMAT_PCM24: break;
    case FORMAT_PCM32: break;
    case FORMAT_PCMFLOAT: break;  //<<<<< Добавить эту строчку
    default: return false;
  }
...
}


bool
WinampSink::open(Speakers _spk)
{
...

  switch (_spk.format)
  {
    case FORMAT_PCM16:    bps = 16; size2time = 1.0 / (2 * nch * _spk.sample_rate); break;
    case FORMAT_PCM24:    bps = 24; size2time = 1.0 / (3 * nch * _spk.sample_rate); break;
    case FORMAT_PCM32:    bps = 32; size2time = 1.0 / (4 * nch * _spk.sample_rate); break;
    case FORMAT_PCMFLOAT: bps = -32; size2time = 1.0 / (4 * nch * _spk.sample_rate); break;  //<<<<< Добавить эту строчку
    default: return false;
  }

...
}

Альтернативные выходные плагины для Winamp понимают PCM Float и иногда даже способны обработать PCM Double (bps = -64).
Logged
valex
Administrator
*****
Posts: 509



View Profile WWW
« Reply #1 on: October 15, 2009, 09:37:38 PM »

Хм. А как же отличаются Int и Float форматы, если при открытии Output модуля ему даются только
Quote
int  (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms);

Т.е. как мне сказать выходному плагину, что я хочу отдать ему именно Float данные? (Битность одна и та же, а больше формат указать вроде негде).
Logged
willow
Newbie
*
Posts: 3


View Profile
« Reply #2 on: October 16, 2009, 10:42:44 PM »

Это чистая случайность и не моё изобретение. Интерфейс любых типов модулей в винампе очень неаккуратный, полно дыр которые можно забить явно ошибочными параметрами, например разрядность звукового потока *возможно* указать отрицательную. Альтернативные плагины используют отрицательные значения как указание на разрядность плавающей точки, т.е:

int bitspersamp

16 - 16 bit
20 - 20 bit (нестандартное)
24 - 24 bit
32 - 32 bit (нестандартное)
-32 - float (нестандартное)
-64 - double (нестандартное)
-80 - extended (нестандартное)

Т.е. знак означает что вывод идёт в плавающей точке. Строго говоря, даже 24 бит винамп научился понимать и так сказать "узаконил" лишь относительно недавно так что ситуация, что формат не будет принят выходной плагиной абсолютно нормальна. Входные плагины подцепляют выходные плагины напрямую и достаточно часто выходные плагины представляют из себя пост-процессоры, те же ресемплеры например.
« Last Edit: October 16, 2009, 10:46:14 PM by willow » Logged
valex
Administrator
*****
Posts: 509



View Profile WWW
« Reply #3 on: October 16, 2009, 11:09:10 PM »

Спасибо, про отрицательные значения bitspersamp не знал, сделаю.
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.9 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!