2016-10-02 5 views
0

Я читаю через Марк Оуэн «Practical Signal Processing» и упражнение во второй главе говорят «Создание вектора, содержащий образцы нескольких секунд синусоиды 400Гц при 32кЦе.» (question 2.3)Как создать и воспроизвести вектор из образцов тонов?

Поскольку книга Безразлично 't одобрить любую технологию, я пытаюсь сделать это в Supercollider с:

«Pbind (\ freq, Pseq ([400,400,400,400,400,400,400,400,400,400,]), \ dur, 0,15;) play;"

но у меня есть две проблемы: как удалить промежуток между нотами во время воспроизведения паттерна и как мне генерировать тоны в шаблоне с определенной частотой дискретизации?

Спасибо!

ответ

2

Похоже, вы работаете на «неправильном» уровне. Использование Pbind очень высокоуровневое, задавая шаблоны музыкальных событий, тогда как автор, по-видимому, хочет, чтобы вы подумали о математике, участвующей в создании отдельных образцов аудиоданных.

Поскольку это упражнение для читателя, я не дам полного ответа, но: SuperCollider имеет оператор sin(), как и на многих других языках. Вы можете сгенерировать список значений, а затем применить sin(), например. с помощью

 sin([0,1,2,3,4,5]) 

или

 sin((0..100)) 

Те простые примеры; они не получают частоту или частоту выборки или продолжительность, которые вы указываете.

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

x = sin((0..1000)); 
b = Buffer.sendCollection(s, x); 
b.play 
+0

Спасибо за ответ ! Я попробовал ваш последний пример, (sin ((0..1000));), но только что услышал быстрый чирп в моем левом канале. Полный вопрос на самом деле довольно длинный (если вы проверяете ссылку), и он хочет воспроизведения; Я просто пытался выяснить первоначальные шаги. Похоже, что мой другой вариант, используя PortAudio, может быть лучшим выбором, учитывая низкий уровень. – mjbraun