Как создать и воспроизвести вектор из сэмплов тонов?

Я читаю книгу Марка Оуэна "Практическая обработка сигналов", а в упражнении во второй главе говорится: "Создайте вектор, содержащий выборки нескольких секунд синусоидальной волны с частотой 400 Гц и частотой 32 кГц" (вопрос 2.3)

Поскольку в книге не одобряется ни одна технология, я пытаюсь сделать это в Суперколлайдере с помощью:

"Pbind(\freq, Pseq([400,400,400,400,400,400,400,400,400,400,]), \dur, 0.15;).play;"

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

Благодарю вас!


person mjbraun    schedule 02.10.2016    source источник


Ответы (1)


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

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

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

or

     sin((0..100))

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

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

 x = sin((0..1000));
 b = Buffer.sendCollection(s, x);
 b.play
person Dan Stowell    schedule 03.10.2016
comment
Спасибо за ответ! Я попробовал ваш последний пример (sin((0..1000));), но только что услышал быстрый чириканье в моем левом канале. Полный вопрос на самом деле довольно длинный (если вы проверите ссылку), и он хочет воспроизвести; Я просто пытался понять начальные шаги. Похоже, мой другой вариант, использование PortAudio, может быть лучшим выбором, учитывая низкий уровень. - person mjbraun; 04.10.2016