Как да изрежете PCM данни, за да идентифицирате броя на извадките или броя на кадрите за подаване?

Искам да захраня libsamplerate (библиотека за понижаване на аудио данни, която се нуждае от попълване на следната структура:

typedef struct
  {   float  *data_in, *data_out ;

      long   input_frames, output_frames ;
      long   input_frames_used, output_frames_gen ;

      int    end_of_input ;

      double src_ratio ;
  } SRC_DATA ;

Полетата на тази структура, които трябва да бъдат попълнени от повикващия, са:

  data_in       : A pointer to the input data samples.
  input_frames  : The number of frames of data pointed to by data_in.
  data_out      : A pointer to the output data samples.
  output_frames : Maximum number of frames pointer to by data_out.
  src_ratio     : Equal to output_sample_rate / input_sample_rate.
  end_of_input  : Equal to 0 if more input data is available and 1 
                  otherwise.

За да попълня тази структура, имам data_in, но не знам броя на кадрите, така че не мога да дефинирам input_frames. Има ли лесен начин за изрязване на потока PCM байтове? Така че мога да го въведа в тази функция и с правилния брой кадри. (Така че този въпрос не е пряко свързан с libsamplerate)


person frankish    schedule 22.07.2013    source източник
comment
Предполагам, че сте предназначени да разделите аудиото - да речем 1024 кадъра наведнъж (следователно членът end_of_input в структурата). Очевидно последното ви обаждане може да има по-малко, когато знаете, че сте в края на потока.   -  person marko    schedule 22.07.2013
comment
Имам data_in, но не знам броя на кадрите. Имате масив от входни проби, но не знаете колко проби имате?   -  person Bjorn Roche    schedule 22.07.2013
comment
@BjornRoche добре, мисля, че мога да изчисля проби, като разделя размера на байта на data_in на 2 (умножете по 8 (бита) и разделете на 16 (бита) за 44100 16-битови моно cpm и за стерео разделя всичко отново на 2..) Но аз може да не е в началото на кадър.. Така че мисля, че трябва да изхвърля тези байтове, преди да ги дам като вход. Ето защо мисля, че трябва да намеря тази точка, за да изрежа аудиото. Греша ли?   -  person frankish    schedule 22.07.2013
comment
Не поставяйте 16-битови масиви в libsamplerate. data_in и data_out са ясно маркирани като тип float, така че първо трябва да конвертирате към този тип. Мисля, че трябва да прочетете малко за основите: blog.bjornroche.com/2013/05/   -  person Bjorn Roche    schedule 23.07.2013