LINUX.ORG.RU

Синтезатор с нуля для начинающего

 , ,


0

1

Добрый вечер, лор. Я хочу начать экспериментировать со звуком и прочими музыкальными вещами, да и навыков программирования у меня особо нет, хотелось бы их приобрести на практике. Посоветуйте, на каком языке программирования писать, как идёт работа со звуком, устройствам. Думаю обратить взор на С или С-подобные языки. Слышал много срачей вокруг С и Раста, что лучше учить? Принцип синтеза понимаю.

Можно начать с изучения кода какого-нибудь синтезатора, например Amsynth, и строения синтезаторов вообще.

Korchevatel ★★★★★
()

Можно попробовать SoX, я на нём синтезировал всякие звуки.

Xenius ★★★★★
()
Ответ на: комментарий от Korchevatel

Думаю что ТС в первую очередь надо понять как выводить звук вообще, а это значит ему надо разобраться с музыкальным плеером, причём чем проще, тем лучше, например mpg123

Или mpeg123???

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от Korchevatel

Можно начать с изучения кода какого-нибудь синтезатора, например Amsynth, и строения синтезаторов вообще.

Так-то это хорошее занятие, но начинать с этого скучновато.

Я бы начал с функции, которая в цикле генерит синусоиду и приделывает к ней заголовок WAV. Потом разные комбинации синусоид, потом вообще любые периодические функции. И слушать, как всё это звучит.

И что самое интересное — если с самого начала не заморачиваться воспроизведением в РМВ, а ограничиться на этом этапе синтезом файлов, то писать это можно почти на чём угодно, хоть на перле. Но я б конечно взял кресты.

Вот когда велосипедить надоест, и захочется чего-то упорядоченного — тогда уже самое время глядеть на более готовые решения. Хоть sox тот же.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

На C или C++ будет удобнее всего, IMO.

waker ★★★★★
()

Чисто теоретически тебе нужно найти какую-то программу, в которой можно этот звук синтезировать удобным DSL-ем. И уже его и изучать. Скорей всего это будет что-то вроде JS.

Если хочется прям снизу, я бы изучил формат WAV и просто генерировал бы звук прям в него. Насколько я помню, он довольно простой и никаких проблем с этим не должно быть. А прослушивать можно любым удобным способом, как и конвертировать потом в какой-нибудь flac при желании. Язык тут опять же можно брать абсолютно любой. Я бы писал на Java, но это потому, что я её хорошо знаю и за счёт её высокоуровневости я был бы наиболее продуктивен.

А если ты хочешь какие-то процессоры звука в реалтайме писать, тут уже хз, нужны какие-то реалтаймовые фишки, возможно вплоть до микропроцессоров.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)

С + SDL2. В твоём распоряжении будет звук в виде просто массивов чисел. Ты можешь прозрачно манипуливать,модулировать изменять что у годно, при этом кроссплатформенно. Просто массивы данных которые ты можешь менять и воспроизводить.

anonymous
()

Пошёл читать первую попавшуюся книгу по С https://books.goalkicker.com/CBook/

Как доберусь до нужных знаний, буду генерировать звук в формате WAV простыми функциями, как советовали выше.

Eternellement
() автор топика
Последнее исправление: Eternellement (всего исправлений: 1)

А можно взяться сразу за Csound.

anonymous
()

Если комбинировать готовые алгоритмы, то csound.

Если изучать алгоритмы синтеза, то на чём удобнее (нагенерировать числа можно на чём угодно).

Если писать плагин для DAW (а скорее всего, ты захочешь именно это), то скорее всего ты хочешь C++. C++ с фреймворком JUCE — классический вариант. Есть и варианты для других языков, например, Dplug для D.

Говорят, есть ещё такой специальный функциональный язык Faust.

Сам хочу вот это посмотреть: https://github.com/soul-lang/SOUL

Ceiling_QB ★★★★
()

Советую питон.

  1. Много готовых фреймворков(https://wiki.python.org/moin/PythonInMusic)
  2. У тебя навыков программирования особо нет, поэтому в С или С++ или расте ты будешь очень много воевать с компилятором вместо того что бы решать свою задачу
Aswed ★★★★★
()

Бери JavaScript и Tone.js

anonymous
()

Говна насоветовали, бери PureData или пирать мах/мсп

anonymous
()

Бесполезный тред. Бери любимый язык и вперёд, синус выдать в звуковуху везде легко, а дальше удобнее на том, на чем тебе удобнее.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

Ну так не создавайте рандомные треды, создавайте все как один толковые и конструктивные.

И говори потише, пожалуйста, не видишь, люди время форумчанам тратят, мешаешь же.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от Eternellement

Выбери любимый язык. Интернет не поможет, тут как с дистрибутивами.

t184256 ★★★★★
()
#include <errno.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <unistd.h>

int main () {
  pid_t pid;
  const int semitones[] = { 0, 2, 4, 5, 7, 9, 11, 12 };
  unsigned int note, step;
  double phase, delta;
  int fds[2];
  uint16_t wave[44100];

  if (pipe (fds) == -1) {
    perror ("pipe");
    abort ();
  }

  pid = fork ();
  if (pid == -1) {
    perror ("fork");
    abort ();
  } else if (pid == 0) {
    close (fds[1]);
    close (0);
    dup2 (fds[0], 0);
    close (1);
    execlp ("aplay", "aplay", "--channels=1", "--rate=44100", "--format=S16_LE", NULL);
    perror ("execlp (aplay)");
    abort ();
  }

  close (fds[0]);

  for (note = 0; note < sizeof (semitones) / sizeof (semitones[0]); note++) {
    phase = 0.0;
    delta = 2.0 * M_PI * 261.63 * pow(2.0, 1.0 / 12.0 * ((double) semitones[note])) / 44100.0;
    for (step = 0; step < 44100; step++) {
      wave[step] = 32767.0 * sin (phase);
      phase += delta;
    }
    if (write (fds[1], wave, sizeof (wave)) != sizeof (wave)) {
      perror ("write");
      abort ();
    }

    memset (wave, 0, sizeof(wave));
    if (write (fds[1], wave, sizeof (wave)) != sizeof (wave)) {
      perror ("write");
      abort ();
    }
  }

  close (fds[1]);
  wait (NULL);
  return 0;
}

gcc -o synth -lm -W -Wall synth.c

kmeaw ★★★
()
Ответ на: комментарий от hobbit

правильно сначала синусоида уже можно будет ноты использовать, то есть синусоида с частотой 440 Гц это ля, остальные аналогично.

XoFfiCEr ★★☆☆
()

Бери сразу @metaprog там все это удобно, стильно модно.

anonymous
()

Специально для этого умные люди придумали supercollider

anonymous
()
Ответ на: комментарий от kmeaw
echo 'main(i){for(i=0;;i++)putchar(((i*(i>>17|i>>9)&46&i>>3))^(i&i>>10|i>>100));}'|gcc -x c - && ./a.out|aplay
EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)

Если нужна хорашая интерактивность(для прототипов) и с уклоном(так уж вышло) в логику(секвенсоры всякие) то pure data или supercollider. Если нужен отличный звук то csound. Если нужно писать плагины и прочий девелоп, то как уже сказали либо готовые фрэймворки аля juce, либо готовые библиотеки типа https://github.com/PaulBatchelor/Soundpipe

Писать с нуля нужно только если точно знаешь все детали реализации, те не один прототип уже пройден, для этого вышеперечисленное и существует.

А ну и в стиле предыдущего комментария, можешь попробовать https://github.com/viznut/IBNIZ

anonymous
()

Короче тебе скорее всего нужен supercollider. Минусы - найхеройвешая документация, нет звука в double(float), как скриптовый язык sclang ниже среднего по синтаксису.

anonymous
()

Возьми Си и напиши генератор сигнала разной формы для jack. У jack очень простой api, быстро разберешься. Можно ещё попробовать pulseaudio simple api, там тоже просто.

А потом, когда поймёшь как всё работает на низком уровне, можно синтезить всё, что захочется.

Puzan ★★★★★
()
3 июля 2021 г.

Русские книги по математике - беспощадное говно. Авторам срать на читателей. Скачай с libgen (яндекси) «How to Prove It: A Structured Approach: Daniel Velleman». Прочти и выполни все упражнения. Это ключ к чтению всех прочих математически строгих книг, необходимых для ВУЗов (опять же англоязычных, потому что даже самые расхваленные русскоязычные - говно). Для того, чтобы просто сдать экзамены можешь пройти курсы algebra I/II, geometry, trigonometry, precalculus, college calculus на khanacademy. Реально работает.

anonymous
()
Ответ на: комментарий от thesis

Csound

Поддерживаю. Все генераторы и миксеры полностью проработаны. Бери и пользуй.

anonymous
()
Ответ на: комментарий от yoghurt

Писать подобное на Си - себя не уважать. Скриптовщина же!

А зачем твоя скриптуха если это элементарно пишется на С?

James_Holden ★★★
()
Ответ на: комментарий от James_Holden

элементарно пишется на С

Ежели писать на С, то полностью. А это получается смесь бульдога с единорогом, нерыба-немясо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.