如何合成声音?

Che*_*ery 7 python numpy alsa

我想制作类似于真实乐器音频的声音.问题是我很少知道怎么做到这一点.

我所知道的远离真实乐器的是它们输出的声音很少干净.但是如何产生这种不洁的声音呢?

到目前为止,我已经做到了这一点,它产生了非常简单的声音,我不确定它是否正确地使用了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的"计算机音乐教程"一书.它是所有计算机音乐的圣经,虽然它已经存在了几年,但却是学习基础知识的首选书.

如果您想要更快速地产生类似生命的声音,请考虑使用采样技术:即,记录您想要再现的乐器(或使用预先存在的样本库),然后播放样本.这是一种更简单(通常更有效)的方法.


sim*_*mon 8

如果你想(从头开始)生成真正听起来像"有机"的东西,比如物理对象,你可能最好还是要了解一下这些声音是如何产生的.对于一本可靠的介绍,你可以看一本书,如Fletcher和Rossings 乐器的物理学.网络上也有很多东西,你可能想看看James Clark在这里的初级读物

至少撇开这种东西会让你知道你的反对意见.精确建模物理仪器非常困难!

如果您想要做的事情是听起来像物理的东西,而是听起来像仪器X的东西,那么您的工作就会轻松一些.你可以很容易地建立频率并将它们叠加在一起,增加一点噪音,你会得到一些至少听起来不像纯音的东西.

一般来说,阅读有关傅立叶分析的一点将有助于调频(FM)技术.

玩得开心!