Вопрос

Я бы хотел создавать звуки, которые были бы похожи на звук реальных инструментов.Проблема в том, что я очень мало представляю, как этого добиться.

Что я знаю так далеко от реальных инструментов, так это то, что звуки, которые они издают, редко бывают чистыми.Но как издавать такие нечистые звуки?

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

import numpy
from numpy.fft import fft, ifft
from numpy.random import random_sample
from alsaaudio import PCM, PCM_NONBLOCK, PCM_FORMAT_FLOAT_LE

pcm = PCM()#mode=PCM_NONBLOCK)
pcm.setrate(44100)
pcm.setformat(PCM_FORMAT_FLOAT_LE)
pcm.setchannels(1)
pcm.setperiodsize(4096)

def sine_wave(x, freq=100):
    sample = numpy.arange(x*4096, (x+1)*4096, dtype=numpy.float32)
    sample *= numpy.pi * 2 / 44100
    sample *= freq
    return numpy.sin(sample)

for x in xrange(1000):
    sample = sine_wave(x, 100)
    pcm.write(sample.tostring())
Это было полезно?

Решение

Приветствую, если вы хотите создать (с нуля) что-то, что действительно звучит "органично", т.е.как и физическому объекту, вам, вероятно, лучше всего узнать немного о том, как генерируются эти звуки.Для более подробного введения вы могли бы ознакомиться с такой книгой, как Флетчер и Россингс Физика музыкальных инструментов.В Интернете тоже много чего есть, возможно, вы захотите взглянуть на букварь Джеймса Кларка. здесь

Хотя бы беглый просмотр подобных материалов даст вам представление о том, с чем вы столкнулись.Точно моделировать физические инструменты очень сложно!

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

Вам поможет небольшое чтение об анализе Фурье в целом, а также о методах частотной модуляции (FM).

Получайте удовольствие!

Другие советы

Звуковой синтез - это сложная тема, которая требует многолетнего обучения для освоения.

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

Есть несколько вариантов, открытых для вас. Если вы уверены, что хотите дальше изучить синтез, я предлагаю вам начать с изучения синтеза FM. Его относительно легко выучить и реализовать в программном обеспечении, по крайней мере, в основных формах, и создает широкий спектр интересных звуков. Кроме того, проверьте книгу «Учебник по компьютерной музыке» от Curtis Roads. Это Библия для всех вещей компьютерной музыки, и, хотя это несколько лет, это книга по выбору для изучения основ.

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

Я согласен с тем, что это очень нетривиально и нет «правильного пути», но вы должны подумать о том, чтобы начать с (или создания собственного) Миди Soundfont.

Как говорили другие люди, совсем не тривиальная тема. Существуют проблемы как с точки зрения программирования (особенно, если вы заботитесь о низкой задержке), так и в части синтеза. Золотая жила для синтеза звука - это страница Юлия О. Смита. Есть много методов синтеза http://ccrma-www.stanford.edu/~jos/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top