Разница между фреймами и элементами в libsndfile?

Я пишу программное обеспечение, которое обрабатывает аудиофайлы. Я использую библиотеку libsndfile для чтения данных волновых файлов и столкнулся с сомнением, которое не было разрешено их документацией: в чем разница между функциями, считывающими элементы, и функциями, считывающими фреймы? Или, другими словами, получу ли я одинаковые результаты, если поменяю местами sf_read_short и sf_readf_short?

В некоторых вопросах я читал, что аудиокадр равен одному сэмплу, поэтому я подумал, что то, что libsndfile называет элементами, может быть одним и тем же. Во время моих тестов они оказались одинаковыми.


person Mauren    schedule 06.04.2014    source источник


Ответы (1)


Я тоже забеспокоился и нашел ответ.

Q12 : Я просматриваю файл sf_read*. Что такое предметы? Что такое фреймы?

Элемент представляет собой отдельный образец типа данных, который вы читаете; то есть одно короткое значение для sf_read_short или одно плавающее значение для sf_read_float. Для звукового файла только с одним каналом кадр аналогичен элементу (т. е. одному сэмплу), в то время как для многоканальных звуковых файлов один кадр содержит один элемент для каждого канала.

Вот два простых, правильных примера, оба из которых, как предполагается, работают со стереофайлом, сначала используя элементы:

    #define CHANNELS 2
    short data [CHANNELS * 100] ;
    sf_count items_read = sf_read_short (file, data, 200) ;
    assert (items_read == 200) ;

и теперь считываем тот же объем данных с помощью фреймов:

    #define CHANNELS 2
    short data [CHANNELS * 100] ;
    sf_count frames_read = sf_readf_short (file, data, 100) ;
    assert (frames_read == 100) ;

Это копия и вставка из: часто задаваемых вопросов по libsndfile, вопрос 12.

person Benjamin    schedule 15.07.2014