我想制作类似于真实乐器音频的声音。问题是我很少知道如何获得它。
我所知道的远离真实乐器的是它们输出的声音很少干净。但是如何产生这种不洁的声音?
到目前为止,我已经做到了这一点,它产生了非常简单的声音,我不确定它是否正确地使用了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())
答案 0 :(得分:16)
声音合成是一个复杂的话题,需要多年的学习才能掌握。
这也不是一个完全解决的问题,尽管相对较新的发展(例如物理建模综合)在模仿现实世界的仪器方面取得了进展。
您可以选择多种选择。如果您确定要进一步探索合成,那么我建议您先了解FM合成。它在软件中相对容易学习和实现,至少在基本形式中,并产生各种有趣的声音。另外,请查看Curtis Roads的“计算机音乐教程”一书。它是所有计算机音乐的圣经,虽然它已经存在了几年,但却是学习基础知识的首选书。
如果您想更快地制作逼真的声音,请考虑使用采样技术:即,记录您想要再现的乐器(或使用预先存在的样本库),然后再播放样本。这是一种更简单(通常更有效)的方法。
答案 1 :(得分:8)
很高兴,如果你想(从头开始)生成一些真正听起来像“有机”的东西,比如一个物理对象,你可能最好先了解一下这些声音是如何产生的。要获得可靠的介绍,您可以查看一本书,例如Fletcher和Rossings The Physics of Musical Instruments。网络上也有很多东西,你可能想看看James Clark的here
至少撇开这种东西会让你知道你的反对意见。准确地建模物理仪器非常困难!
如果您想要做的事情是听起来像物理的东西,而不是听起来像仪器X的东西,那么您的工作就会轻松一些。你可以很容易地建立频率并将它们叠加在一起,增加一点噪音,你会得到至少听起来不像纯音的东西。
阅读有关傅立叶分析的一般信息将有助于调频(FM)技术。
玩得开心!
答案 2 :(得分:1)
答案 3 :(得分:0)
正如其他人所说,根本不是一个微不足道的话题。在编程方面(特别是如果你关心低延迟)和综合部分都存在挑战。 Julius O. Smith的页面是声音合成的金矿。 有许多合成技术http://ccrma-www.stanford.edu/~jos/。