我想制作类似于真实乐器音频的声音.问题是我很少知道怎么做到这一点.
我所知道的远离真实乐器的是它们输出的声音很少干净.但是如何产生这种不洁的声音呢?
到目前为止,我已经做到了这一点,它产生了非常简单的声音,我不确定它是否正确地使用了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())
Run Code Online (Sandbox Code Playgroud)
Rob*_*son 16
声音合成是一个复杂的话题,需要多年的学习才能掌握.
尽管相对较新的发展(例如物理建模综合)在模仿现实世界的仪器方面取得了进展,但它也不是一个完全解决的问题.
您可以选择多种选择.如果您确定要进一步探索合成,那么我建议您先了解FM合成.它在软件中相对容易学习和实现,至少在基本形式中,并产生各种有趣的声音.另外,请查看Curtis Roads的"计算机音乐教程"一书.它是所有计算机音乐的圣经,虽然它已经存在了几年,但却是学习基础知识的首选书.
如果您想要更快速地产生类似生命的声音,请考虑使用采样技术:即,记录您想要再现的乐器(或使用预先存在的样本库),然后播放样本.这是一种更简单(通常更有效)的方法.
如果你想(从头开始)生成真正听起来像"有机"的东西,比如物理对象,你可能最好还是要了解一下这些声音是如何产生的.对于一本可靠的介绍,你可以看一本书,如Fletcher和Rossings 乐器的物理学.网络上也有很多东西,你可能想看看James Clark在这里的初级读物
至少撇开这种东西会让你知道你的反对意见.精确建模物理仪器非常困难!
如果您想要做的事情是听起来像物理的东西,而是听起来像仪器X的东西,那么您的工作就会轻松一些.你可以很容易地建立频率并将它们叠加在一起,增加一点噪音,你会得到一些至少听起来不像纯音的东西.
一般来说,阅读有关傅立叶分析的一点将有助于调频(FM)技术.
玩得开心!