Pyo-как последовательно воспроизводить два звуковых файла, считанных из оперативной памяти?

У меня есть два звуковых файла одинаковой длины, которые я хочу воспроизвести последовательно. В частности, я хочу, чтобы первый файл играл три раза, а второй файл играл один раз.

Я могу достичь этого через a SfPlayerи aTrigFunc, но у меня такое впечатление, что это будет читать звуковой файл с диска каждый раз, когда я переключаю звуки. Есть ли способ, которым я могу сделать это через aSndTable, который держит звуки в RAM ?

Вот решение с использованием SfPlayerиTrigFunc, используя этот пример в качестве вдохновения .

from pyo import *
s = Server().boot()
DOWNLOADS = 'C:UsersmmoisenDownloads'
first = DOWNLOADS + 'first.wav'
second = DOWNLOADS + 'second.wav'
sf = SfPlayer(first, speed=100/135.0, loop=True, mul=0.5).out()

count = 0

def foo():
    global count
    count += 1
    print count
    if count == 3:
        sf.path = second
    if count == 4:
        sf.path = forst
        count = 0

trig = TrigFunc(sf['trig'][0], foo)

s.start()

1 ответ

  1. Чтобы воспроизводить звуковые файлы последовательно из оперативной памяти, мне просто нужно было вызватьappendSndTable, как это:

    from pyo import *
    s = Server().boot()
    DOWNLOADS = 'C:\Users\mmoisen\Downloads\'
    first = DOWNLOADS + 'first.wav'
    second = DOWNLOADS + 'second.wav'
    
    # Using an array like this didn't work; it just played the first clip
    # t = SndTable([first,first,first,second])
    t = SndTable(first)
    t.append(first)
    t.append(first)
    t.append(second)
    a = Osc(table=t, freq=t.getRate(), mul=.4).out()
    
    s.start()
    

    Использование списка звуковых файлов не работало, он просто воспроизводил первый звук повторно.