Как создать звук с нуля C # - PullRequest
15 голосов
/ 09 ноября 2011

Я пытаюсь создать виртуальное пианино на C # и хочу создать музыкальную ноту с нуля.

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

Так есть ли способ создать правильный звук - например, B flat, в C # без использования файла .wav, все в коде через c #, и если нет, есть ли способ сделать это на другом языке - C ++ .

Спасибо, я постарался сделать это как можно более понятным.

Ответы [ 5 ]

7 голосов
/ 09 ноября 2011

Я думаю, это должно начаться с вас:

http://blogs.msdn.com/b/dawate/archive/2009/06/24/intro-to-audio-programming-part-3-synthesizing-simple-wave-audio-using-c.aspx

РЕДАКТИРОВАТЬ: Я должен добавить, что генерация звуков без сэмплов .wav и эмуляция пианино расходятся друг с другом.

Если вы хотите получить «настоящий» звук пианино, лучше всего работать с семплами (держите их в памяти, если вы не хотите хранить их в файловой системе). Если вам нужен простой способ испускания точных нот (которые звучат совсем не так, как на настоящем пианино), то делать это программно - путь!

4 голосов
/ 09 ноября 2011

Если вы хотите подражать фортепиано, у вас есть только два варианта, один из которых - использовать сэмплы, а другой - физическое моделирование .Физическое моделирование требует довольно глубоких знаний в области DSP (фильтрация, свертка и т. Д.), И пианино было бы сложным инструментом для решения, но это было сделано подобными Pianoteq

Onобъект сэмплов: чтобы создать пианино, находящееся где-то рядом с убедительным аналогом, в идеале вам потребуется более одного сэмпла на ноту для разных скоростей с перекрестными затуханиями между ними, но вы, вероятно, можете избежать использования сэмпла на ограниченном диапазоне нот, чтобыуменьшить общее количество образцов.

0 голосов
/ 09 ноября 2011

Здесь вы найдете статью, включающую источник о том, как создать звук пианино с нуля, по крайней мере, на одну октаву музыкальных нот (он расширяемый).

0 голосов
/ 09 ноября 2011

Может быть, использование библиотеки MIDI может помочь? Я не в этом дело, но если вы не хотите использовать аудиофайлы, это единственное, что приходит мне в голову. Есть вопрос об этом здесь .

0 голосов
/ 09 ноября 2011

Возможно, вы захотите взглянуть на MIDI.

Существует Windows API , который можно обернуть в C ++, а затем предоставить управляемый интерфейс, который можно использовать в C #.

...