2009-04-26 102 views
6

我想製作出類似於真實樂器中的音頻的聲音。問題是我很少知道如何得到這些。如何合成聲音?

我知道這是什麼遠未真正的樂器是他們的聲音輸出很少進行清潔。但如何產生這種不潔的聲音?

這遠遠我已經得到做到這一點,它會產生相當平淡的聲音從我不知道它甚至正確使用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()) 

回答

8

爽快,如果你想生成(從零開始)的東西,聽起來真的「有機」,即像一個物理對象,你可能要有點了解如何生成這些聲音最好關機。對於一個堅實的介紹,你可以看看一本書,如Fletcher和Rossings The Physics of Musical Instruments。網上也有很多東西,你可能想看一看詹姆斯克拉克的底漆。here

在這類東西上至少有一些東西可以讓你知道你在對付什麼。準確建模物理儀器非常困難!

如果你想要做的是有一些聽起來物理,而一些聽起來像儀X,你的工作就簡單得多了。你可以很容易地建立頻率並將它們疊加在一起,增加一點噪音,並且你會得到至少聽起來不像純音的東西。

讀一點關於一般會幫助傅立葉分析,將調頻(FM)技術。

玩得開心!

15

聲音合成是一個複雜的話題,需要多年的學習掌握。

它也不是一個完全解決的問題,雖然相對最近的發展(如物理建模合成)已在模仿真實世界文書方面的進展。

有很多選擇可供您選擇。如果你確定你想進一步探索合成,那麼我建議你首先了解FM合成。在軟件中學習和實現相對容易,至少在基本形式中,併產生各種有趣的聲音。另外,請查閱Curtis Roads出版的「電腦音樂教程」一書。這對所有電腦音樂來說都是聖經,儘管它已經有幾年了,但它是學習基礎知識的首選書。

如果您想要更快速地產生逼真的聲音,請考慮使用採樣技術:即記錄要再現的樂器(或使用預先存在的採樣庫),然後播放採樣。這是一個更直接(並且往往更有效)的方法。

+0

我不想使用示例銀行。我想要一些類似於樂器的東西,而不是像生活一樣。 – Cheery 2009-04-26 14:48:42

1

我同意這是非常不平凡的,沒有設置「正確的方式」,但你應該考慮從一個(或製作自己的)MIDISoundFont開始。

0

正如其他人所說,根本不是一個小問題。在編程方面(尤其是如果你關心低延遲)和綜合部分都存在挑戰。合成的金礦是Julius O. Smith的頁面。有很多合成技術http://ccrma-www.stanford.edu/~jos/