Как получить доступ к аудио вывод для анализа в Python 3 - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь воспроизвести песню, сделать для нее аудио-визуализатор во время воспроизведения, и я хочу, чтобы визуализатор основывался на выходных сигналах, чтобы он был более модульным и легче синхронизировался, но я не знаю, как получить доступ к аудиовыходу моего компьютера без специального оборудования. Как мне это сделать только с помощью программирования.

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

Наконец, этот код в основном взят из этой фантастической статьи на эту тему: https://www.swharden.com/wp/2016-07-19-realtime-audio-visualization-in-python/

import pyaudio
import numpy as np
maxValue = 2**16
bars = 35
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=2,rate=44100, 
              input=True, output=True, frames_per_buffer=256
             )
while True:
    data = np.fromstring(stream.read(1024),dtype=np.int16)*100
    #print(type(data))
    dataL = data[0::2]
    dataR = data[1::2]
    #print(dataR.shape)
    peakL = np.abs(np.max(dataL)-np.min(dataL))/maxValue
    peakR = np.abs(np.max(dataR)-np.min(dataR))/maxValue
    lString = "#"*int(peakL*bars)+"-"*int(bars-peakL*bars)
    rString = "#"*int(peakR*bars)+"-"*int(bars-peakR*bars)
    #print(dataL)
    print("L=[%s]\tR=[%s]"%(lString, rString))
    #if lString != rString:
    #    print('here')

1 Ответ

0 голосов
/ 13 сентября 2018

Вот три идеи:

  1. Направьте выход на JACK , обработайте в pyaudio (с pyjack ) и затем выводите на динамики.
  2. Используйте микрофон, это именно то, что сделано в статье.
  3. Если вы можете воспроизводить музыку в том же приложении, что и визуализация, у вас есть много вариантов. Я бы, наверное, проверил, например, PyGame , поскольку он предоставляет все необходимое для воспроизведения музыки в реальном времени и создания визуальных эффектов. В противном случае много ресурсов можно найти в Python In Music .

Имейте в виду, что если бы ваша идея состояла в том, чтобы воспроизводить музыку в каком-то плеере и позволить Python каким-то образом поймать поток, это было бы довольно сложно. Процессы и потоки изолированы для хорошей цели. Доступ к пространству памяти, которое вам не принадлежит, может легко привести к ошибке сегментации.

...