-
22.01.2012, 14:14 #1Новичок
- Регистрация
- 22.01.2012
- Сообщений
- 37
Синтезатор с чистым строем
Здравствуйте, уважаемые форумчане!
Я по образованию и роду занятий не музыкант,
но немного увлекаюсь теорией музыки
и это увлечение в итоге привело к тому,
что я написал программульку, синтезатор с чистым строем.
Информация тут:
Исходные тексты тут:
Буду признателен, если кто-то, кто интересуется чистым строем,
попробует эту программку и выскажет предложения или замечания.
Программа написана для того,
чтобы попробовать "на вкус" чистый строй.
При отсутствии "настоящего" синтезатора может
вполне подойти для несложного аккомпанемента пению :)
Написана для ОС Linux, проверялась в Debian и Ubuntu.
P.S. Извиняюсь, если разместил тему не в том разделе,
ничего более подходящего не нашел.Последний раз редактировалось xjiss; 17.02.2012 в 22:15.
- Регистрация
- 22.01.2012
- Сообщений
- 37
Re: Синтезатор с чистым строем
... ндас, ЧСХ, народ безмолвствует...
ладно, попробуем с другой стороны зайти.
специально "написал" и сыграл "Реквием по РТС".
(48000 Hz, stereo, s16 little endian)
ну? )) есть кто живой?
Последний раз редактировалось xjiss; 24.02.2012 в 09:33.
Re: Синтезатор с чистым строем
Уважаемый xjiss, наверное, проблема в том, что здесь мало линуксоидов.
- Регистрация
- 22.01.2012
- Сообщений
- 37
Re: Синтезатор с чистым строем
Да, наверное. Ну да и ладненько.
Re: Синтезатор с чистым строем
Думаю, мне будет очень интересно почитать исходники. Возможно, это почти то самое, что я давно ищу. Потому как я как раз пробовал найти хотя бы онлайновые синтезаторы для некоторых строев, однако ничего хорошего не нашёл. Возможно, если повезёт, удастся переделать этот синтезатор для работы в каких-нибудь персидских ладах. Или просто в 53-РДО, или ещё какие-нибудь РДО, чтобы просто поиграться и посравнивать их на слух между собой. В своё время, лет уже 10 назад (ой, блин, неужели это уже целых 10 лет прошло...) я начинал было писать игрульки, издающие (и даже записывающие) какие-то звуки, и даже, хе-хе, показывал и рассказывал одному цивильному товарищу, как это делается (в качестве источника хватило хороших комментариев в заголовках от OSS, кажется), но... это было во времена ещё OSS'ного интерфейса звукового устройства, а очень вскоре он стал как-то неактуален, сменившись на ALSA, и всё на этом застопорилось. В то время как попытки понять, как то же самое делать в ALSA, кончились ничем, т.к. такого же понятного руководства, как в заголовках OSS, я что-то не нашёл среди аналогичных заголовков. А потом на несколько лет (примерно до 2009) вообще вышел из рядов пользователей Линукс. Может быть, почитав Ваши исходники, мне, наконец, удастся что-то понятьДа ещё тут программа с нитями - в своих тогдашних почти-школьных программах я до нитей не доходил, всё делал последовательно в единственной. Короче, надеюсь, такая сравнительно небольшая программа, которую и части которой, в отличие от больших, можно обозреть взглядом одного человека - почти самое то что надо, чтобы посмотреть, как более-менее цивильно делается то, что я хотел и пытался сделать нецивильно тогда. В общем, большое спасибо: уже из того, что я успел прочитать в исходниках за первые 10-15 минут, я почерпнул много интересного и полезного для себя, при своём самом начальном уровне. Уже давненько я ничего на C не писал вообще - наверное, как раз те самые лет 10 после тех первых попыток, т.к. по работе-то всё перл да перл обычно...
- Регистрация
- 22.01.2012
- Сообщений
- 37
Re: Синтезатор с чистым строем
Думаю, с точки зрения кодинга - не проблема.
Проблема вот где
Ну, освоить хоть немного ALSA было одной из целей написания
программки.
Есть еще вариант с callback.
(это один из ранних)
Он мне больше нравится,
но, к сожалению, он не работает с Pulse Audio
из-за причудливых архитектурных взаимотоношений
этой ALSA с Pulse Audio.
Ок, жду замечаний и всё такое.
Большая проблема - тембр.
Я его "делал" тупо перебирая различные формы сигнала.
Сейчас там используется гауссиана (на первом полупериоде колебания),
второй оставлен нулём. Звучит относительно сносно, но глуховато.
- Регистрация
- 22.01.2012
- Сообщений
- 37
Re: Синтезатор с чистым строем
Имеется ввиду, что при генерации звука при помощи звуковой карты
нельзя сгенерировать, к примеру, пилу/менандр/etc с каким
угодно периодом (и, соответственно, с какой угодно частотой).
Период всегда будет кратен 1/F, где F - частота, на которой работает звучка.
Считать это проблемой или нет - это другой вопрос.
Если JI - то это как раз не проблема. )
А если темперации - тогда да, какбы проблема,
поскольку не получится абсолютно точно выдержать
интервалы. Хотя.. по мне это тем более не проблема )
Re: Синтезатор с чистым строем
Это только если задаться целью уложить период сигнала обязательно в целое число отсчётов. Да, может быть, так оно проще, и занимает меньше всего памяти для хранения пресинтезированного образца, насколько это возможно. И требует минимум процессорного времени на вычисление отсчётов в этих пресинтезирванных образцах. Но с другой стороны, когда речь идёт о таких частотах, где на период звука приходится десяток-другой отсчётов, а то и меньше - в общем-то не проблема пресинтезировать не один период такого звука, а достаточно много. Если мы для каждой ноты (считая, что каждая нота синтезируется отдельным генератором) будем синтезировать, скажем, столько периодов, сколько укладывается в 1 секунду, то мы можем в области сколь угодно высоких частот (вплоть до принципиального предела по частоте дискретизации) синтезировать частоты с шагом по крайней мере 1 Гц. А при желании - и с большей точностью, если синтезируемый период не делать равным точно 1 с, а немножко укорачивать или удлинять согласно нашим потребностям.
И вообще, всё это относится только к работе с пресинтезированным звуком. На лету же синтезировать можно звук вообще любой частоты - с такой точностью, какую позволяют сами вычисления на компьютере.
Разумеется, на высоких частотах при таком синтезе значения отсчётов будут как-то меняться с каждым периодом звука (а повторяться только с каждым синтезируемым периодом). Поэтому частоты вроде F/2 на самом деле очень проблематичны: из-за наличия всего лишь 2 отсчётов в периоде мы не можем двигать её по фазе, т.к. при этом будет фактически падать вплоть до нуля амплитуда. А значит, будут возникать сильные биения. Более-менее сносно работает синтез с нецелым числом отсчётов на период при числе отсчётов на период ближе к 3 (пусть даже немножко меньше) и более - это довольно близко аналогично той причине, по которой трёхфазные (или с бОльшим числом фаз) асинхронные электродвигатели лучше однофазных (которые даже не могут без посторонней помощи пуститься в определённую нужную сторону). Поэтому, собственно, реальная "рабочая" часть частотного диапазона ЦАПей и АЦПей должна довольно сильно не дотягиваться до F/2. Более-менее реалистичная оценка - это F/3 с небольшим. Ну т.е. для частоты дискретизации 48 кГц можно более-менее дотягиваться где-то до 16-18 кГц, а выше лезть уже не стоит. При этом необходимо при синтезе звука с высокими частотами (а значит, малым числом отсчётов на период) подразумевать, что значения отсчётов не должны быть мгновенными значениями используемой функции в данной точке, а должны быть средними за весь тот кусок функции, который они "представляют". Если это дело нарушить, то в самом деле будем иметь артефакты в виде биений с частотой f-F/n. А при точных значениях f=F/n, хотя и не будет биений, но тембр звука будет тем или иным образом искажаться, отклоняясь от запланированного.
- Регистрация
- 22.01.2012
- Сообщений
- 37
Re: Синтезатор с чистым строем
эээ... а как звучка может выдать _нецелое_ число отсчетов?....
Во-первых, честно говоря, не вижу разницы между real-time (на лету) и "заранее".
Во-вторых, не понимаю, как можно сгенерировать *дискретный по времени* сигнал любой частоты.
Давайте на тупом примере. Пусть у нас сигнал - меандр.
И пусть звучка работает на 48 кгц, то есть длительность одного сэмла
примерно 20 мксек (чуть больше, не важно).
Какую самую высокую частоту меандра можно получить?
Один сэмпл - типа 10000, второй - минус 10000.
То есть минимальный период - 40 мксек.
Соотвестсвенно, макс. частота - F/2
Следующий период - 3*20 = 60 мксек., частота - F/3
Ну и тд, чем больше, тем больше возможностей
для изменения скважности меандрика.
Но, пардон, как можно сгенерировать меандр с периодом
в 2.5 периода дикретизации?!?
Или в 100 с половиной?
---
Может, вы Фурьёвое преобразование имеете ввиду?
Так оно само по себе в дискретном виде неточно.
Скажем, если синус раскладывать, то одна гармоника
получится тогда и только тогда, когда будет взято целое
число периодов этого синуса.
Похожие темы
-
Москва синтезатор
от Mikle в разделе Покупка и продажа инструментов и аксессуаровОтветов: 1Последнее сообщение: 31.10.2008, 00:05 -
Как работать над звуком, чтобы он был чистым?
от Violin-zimmerman в разделе Скрипичная и альтовая музыкаОтветов: 16Последнее сообщение: 24.08.2008, 10:12 -
Синтезатор
от Викуля в разделе ИнструментарийОтветов: 7Последнее сообщение: 13.02.2007, 21:20 -
Синтезатор
от TANIA в разделе ИнструментарийОтветов: 15Последнее сообщение: 05.09.2006, 20:01



Ответить с цитированием



Социальные закладки