Как вы проигрываете два разных файла песен на python одновременно?
Я пытаюсь играть 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()
1 ответ
Я рекомендую вам использовать PyGame для такого рода работы и проверить этот связанный вопрос. Вы должны использовать модуль микшера.
В общем случае вам придется смешивать данные PCM, используя некоторые математические манипуляции с аудиопотоками (пример обсуждения см. В этом вопросе).
Обновление: Myro (который я никогда не использовал) говорит в документах, что есть способ сделать это, используя beep
функция:
звуковой сигнал (собственный, длительность, частота, частота2 = нет): сделать тональный сигнал. Если даны два тона, робот объединит их.
В качестве простого примера, если у вас есть нота A, длительность 1 секунда в первой песне и нота B, длительность 2 секунды во второй песне, которую вы должны будете вызвать beep
дважды: сначала сыграть обе ноты A и B одновременно в течение 1 секунды, а затем сыграть только ноту B еще 1 секунду.
Излишне говорить, что этот код будет намного сложнее, чем просто воспроизведение звуков из аудиофайлов с использованием чего-то вроде PyGame и их микширование.