我想制作的声音类似于真正的乐器的音频。问题在于我几乎没有知道如何获得这个问题。

我所知道的远非真正的乐器是,他们输出的声音很少干净。但是如何产生这种不洁的声音呢?

我已经做到了这一点,它会产生相当简单的声音,我不确定它甚至正确地使用了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())
有帮助吗?

解决方案

令人愉悦的话,如果您想生成(从头开始)真正听起来“有机”的东西,即像物理对象一样,最好了解这些声音的产生方式。为了进行扎实的介绍,您可以看一本书,例如Fletcher和Rossings 乐器的物理学. 。网络上也有很多东西,您可能想看看詹姆斯·克拉克(James Clark) 这里

至少要浏览这种东西将使您了解自己所面对的事情。准确地对物理仪器进行建模非常困难!

如果您想做的是听起来很身体,而是听起来像乐器X的东西,那么您的工作要容易一些。您可以很容易地构建频率,并将它们堆叠在一起,添加一点噪音,并且您会得到至少听起来不像纯音的东西。

一般而言,阅读一些有关傅立叶分析的信息将有所帮助,频率调制(FM)技术也将有所帮助。

玩得开心!

其他提示

声音合成是一个复杂的主题,需要多年的研究才能掌握。

这也不是一个完全解决的问题,尽管相对较新的发展(例如物理建模合成)在模仿现实世界的仪器方面取得了进展。

您有许多选择对您打开。如果您确定要进一步探索合成,我建议您首先了解FM合成。至少以基本形式学习和实现,它相对容易学习和实现,并且会产生各种有趣的声音。另外,请查看柯蒂斯路(Curtis Roads)的《计算机音乐教程》。这是所有计算机音乐的圣经,尽管它已经使用了几年了,但它是学习基础知识的首选。

如果您想要一种更快的方式来产生像寿命一样的声音,请考虑使用采样技术:也就是说,记录要复制的仪器(或使用先前存在的样本库),然后播放样品。这是一种更直接(通常更有效)的方法。

我同意这是非常不平凡的,没有设置的“正确方法”,但是您应该考虑从A(或制作自己的)开始 Midi 配子.

正如其他人所说,根本不是一个琐碎的话题。在编程方面(尤其是在关心低延迟)和合成部分都存在挑战。朱利叶斯·O·史密斯(Julius O. Smith)的页面是声音合成的金矿。有 很多 合成技术 http://ccrma-www.stanford.edu/~jos/.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top