45

Pythonで正弦波のような単純な音を生成することは可能ですか?

これに使用できるモジュールはありますか? そうでない場合、どのように独自の作成を行いますか?

また、サウンドを再生するためにPythonを実行するための何らかのホスト環境が必要ですか、それとも端末から呼び出すだけで実現できますか?

答えが OS に依存する場合、私は mac を使用しています。

4

7 に答える 7

17

私はこれでゲームに少し遅れていることを知っていますが、これは合成とオーディオ合成のための非常に素晴らしいpythonプロジェクトです: https://github.com/hecanjog/pippi

それはまだ活発に開発されていますが、しばらくの間続いています。

于 2013-12-06T15:53:03.970 に答える
7

コンパイルできない、または存在しないプロジェクトで時間を無駄にした後、正弦波、方形波、および複合波の単一または複数のチャネルの生成を提供する Python モジュールwavebenderを発見しました。結果は、wavefile または に書き込むことができ、そこからリアルタイムでaplaysys.stdoutによって直接解釈できます。いくつかの有用な例がここで説明されており、プロジェクトのgithub ページに含まれています。

于 2013-12-17T08:11:43.007 に答える
5

私はPythonで強力なシンセサイザーに取り組んでいます。カスタム関数を使用して、.wav ファイルに直接書き込みました。この目的で使用できる組み込み関数があります。サンプル レート、サンプルあたりのビット数、チャンネル数、および合成時間を反映するように .wav ヘッダーを変更する必要があります。

これは、bytearray を適用した後に wave ファイルのデータ パラメータへの書き込みに適した値のリストを出力する初期バージョンの正弦波ジェネレータです。[編集] bytearray を適用する前に、変換関数でリストをリトル エンディアンの 16 進数値に変換する必要があります。.wav 仕様の詳細については、以下の WAVE PCM サウンドファイル形式のリンクを参照してください。[/編集]

def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16):
    bytelist = []
    import math
    TwoPiDivSamplerate = 2*math.pi/samplerate
    increment = TwoPiDivSamplerate * freq
    incadd = phase*increment
    for i in range(int(samplerate*time)):
        if incadd > (2**(bitspersample - 1) - 1):
            incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1))
        elif incadd < -(2**(bitspersample - 1) - 1):
            incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd)
        bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd))))
        incadd += increment
    return bytelist

新しいバージョンでは、波形を使用して、波形パラメータの周波数、振幅、および位相を変調できます。データ形式により、波をブレンドして連結することは簡単です。これが気に入らない場合は、 WAVE PCM サウンドファイル形式を確認してください。

于 2015-08-12T22:48:30.273 に答える
3

ずんぐりした配列をサウンドとして再生できるPyAudiereが好きです...Matlabのバックグラウンドとうまく調和していると思います。クロスプラットフォームだと思います。scikits.audiolabも同じことをしていて、より最新でサポートが充実していると思います... wavfileとして保存したり、バッファに書き込んだり、Pythonの組み込みサウンドライブラリを使用したりするよりも簡単に思えます。

于 2012-03-19T19:41:43.673 に答える