7

本物の楽器の音に近い音を出したいです。問題は、それを取得する方法がほとんどわからないことです。

本物の楽器とはほど遠いことを私が知っているのは、それらが出力する音はめったにクリーンではないということです。しかし、そのような汚れた音を出すにはどうすればよいでしょうか。

これまでのところ、私はこれを行うようになりました.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())
4

4 に答える 4

16

音声合成は複雑なトピックであり、習得するには長年の研究が必要です。

また、これは完全に解決された問題ではありませんが、比較的最近の開発 (物理モデリング合成など) では、実世界の楽器を模倣することが進歩しています。

いくつかのオプションが用意されています。合成をさらに探求したいと確信している場合は、FM 合成について学ぶことから始めることをお勧めします。ソフトウェアでの学習と実装は、少なくとも基本的な形では比較的簡単で、幅広い範囲の興味深いサウンドを生成します。また、Curtis Roads の本「The Computer Music Tutorial」もチェックしてください。コンピューター ミュージックのすべてのバイブルであり、数年前の本ですが、基礎を学ぶのに最適な本です。

生き生きとしたサウンドをより迅速に生成する方法が必要な場合は、サンプリング手法の使用を検討してください。つまり、再現したい楽器を録音 (または既存のサンプル バンクを使用) し、サンプルを再生するだけです。これは、はるかに簡単な (そして多くの場合、より効果的な) アプローチです。

于 2009-04-26T14:43:37.177 に答える
8

本当に「有機的」に聞こえるもの、つまり物理的なオブジェクトのようなものを (ゼロから) 生成したい場合は、これらのサウンドがどのように生成されるかについて少し学ぶのが最善でしょう。堅実な紹介として、Fletcher and Rossings The Physics of Musical Instrumentsなどの本を見ることができます。Web 上にもたくさんの情報があります。James Clark の入門書をご覧になることをお勧めします。

この種のものに少なくともざっと目を通しておけば、自分が何に直面しているのかがわかります。物理的な楽器を正確にモデリングすることは非常に困難です。

楽器 X のようなサウンドではなく、フィジカルなサウンドが必要な場合は、作業が少し楽になります。周波数を非常に簡単に構築し、それらを積み重ねて、少しノイズを追加すると、少なくとも純粋なトーンのようには聞こえないものが得られます。

一般的なフーリエ解析について少し読むと、周波数変調 (FM) 技術と同様に役に立ちます。

楽しむ!

于 2009-04-26T16:32:34.277 に答える