1

song1 と song2 (コメントアウトされたもの) を同時に再生しようとしていますが、myro や winsound などを使用してそれを行う方法がわかりません。誰かがスレッドの使用を提案しましたが、私は非常に初心者のプログラマーであるため、その方法もわかりません。誰かが私がこのことを理解したり、これを行う方法を詳細に説明したりするのを手伝ってくれませんか? これが私がこれまでに持っているものです:

import winsound
from myro import *
def main():

    HftM1 = makeSong("Db4 3/8; C4 3/8; Bb3 1/4; Bb3 3/8; Ab3 3/8; Gb3 3/8; Ab3 1/16; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8; C4 1/16; Db4 3/8; C4 3/8; Bb3 1/8; F3 1/16; Gb3 1/16; Bb3 3/8; Ab3 3/8; Gb3 3/8; C4 3/8; Bb3 3/8; Ab3 1/8; Eb3 1/16; F3 1/16; Ab3 3/8; G3 3/8; F3 3/8")

    saveSong(HftM1, "HymnfortheMissing1.txt", append=1)

    HftM2 = makeSong("Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8; Bb2 1/8; F3 1/8; Bb3 1/4; Bb2 1/8; F3 3/8; Gb2 1/8; Db3 1/8; Gb3 1/4; Gb2 1/8; Db3 3/8; Ab2 1/8; Eb3 1/8; Ab3 1/4; Ab2 1/8; Eb3 3/8; F2 1/8; C3 1/8; F3 1/4; F2 1/8; C3 3/8")

    saveSong(HftM2, "HymnfortheMissing2.txt", append=1)

    song1 = readSong("HymnfortheMissing1.txt")

    #song2 = readSong("HymnfortheMissing2.txt") #This part of the song is supposed to be played at the same time as the first part, but I don't know how to do that so...

    play = []

    for n in range(len(song1)):
        play = song1[n]
        note = play[0]
        duration = play[1]
        winsound.Beep(int(note), int(duration*2000))
main()
4

1 に答える 1

3

この種の作業にはPyGameを使用することをお勧めします。この関連する質問を確認してください。ミキサーモジュールを使用する必要があります。

一般に、オーディオ ストリームに対して何らかの数学的操作を使用して PCM データを混合する必要があります (例の議論については、この質問を参照してください)。


更新: Myro (私は一度も使用したことがありません) は、関数を使用してこれを行う方法があるとドキュメントで述べています。beep

beep(self, duration, frequency, frequency2 = None): 音を鳴らします。2 つのトーンが与えられると、ロボットはそれらを組み合わせます。

簡単な例として、最初の曲で音符 A、デュレーションが 1 秒で、2 番目の曲で音符 B、デュレーションが 2 秒の場合、2beep回呼び出す必要があります。まず、音符 A と B の両方を 1 秒間同時に再生します。 B のみをさらに 1 秒間再生します。

言うまでもなく、このコードは、PyGame などを使用してオーディオ ファイルからサウンドを再生し、それらをミキシングするよりもはるかに複雑になります。

于 2012-10-15T19:11:53.793 に答える