2013-06-15 1 views
0

Я делаю несколько простых простых программ с libsndfile и в настоящее время и пытаюсь найти способ печати тишины в аудиофайле, кроме приглушения из другого файла. Якобы, я делаю драм-машину. В данный момент я могу записать длину входного аудиофайла и добавить их друг к другу, если я так захочу. Хотелось бы получить более глубокое понимание этой, казалось бы, сверхпростой задачи .. или пощечины, если на самом деле это так просто.Как вы печатаете тишину в аудиофайле с помощью libsndfile?

Спасибо!

+0

Я понимаю молчание нули. Я думаю, что мой вопрос был в основном, как я мог бы читать/писать из массива, который я сделал, а не напрямую из файла? Я теперь вижу, что я избавляюсь от цикла while здесь: while ((readcount = sf_read_double (sndfile, data, BUFFER_LEN)) и вместо этого передается в моем собственном массиве с использованием SNDFILE * для выходного файла sf_write_double (SNDFILE sndfile, double * ptrToMyArray, sf_count_t frames) – pritchardsmith

+0

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

+0

@ Erik de Castro Lopo – pritchardsmith

ответ

1

Тишина в аудиофайле - это просто куча последовательных нулевых значений.

Для вставки N кадров молчания на текущей постиону записи файла так просто, как:

void sf_insert_silence (SNDFILE *file, int channels, int frames) 
{ short silence [frames * channels]; 

    memset (silence, 0, sizeof (silence)); 
    sf_writef_short (sndfile, silence, frames); 
} 
+0

большое спасибо. Я предполагаю, что мой следующий вопрос будет состоять в том, как бы я прочитал короткий образец в массиве, который позже будет вставлен в больший массив молчания? Значение, определите длину звука, который хотите записать, и через определенные промежутки времени прочитайте в файле образец ловушки или hi hat в массиве или указав на него. Когда я пытаюсь очистить пространство для массива удвоений для фреймов в аудиофайле, я не могу получить количество удвоений, необходимое из sfinfo.frames, потому что возвращение - sf_count_t. @ Erik de Castro Lopo – pritchardsmith

+0

@pritchardsmith sf_count_t - это просто целочисленный тип. Это C (или, возможно, C++), поэтому преобразование из sf_count_t тривиально. Просто используйте его, если бы вы использовали любой другой тип номера. –

+0

@ Eric de Castro Lopo, когда я использовал его как int, у меня были ошибки относительно ожидаемых типов. Хотя после некоторого ворчания он казался двойником типа и работал в коде, когда я использовал его таким образом. – pritchardsmith