2014-06-06 4 views
0

Je me demandais s'il était possible de jouer un son directement dans une entrée de python. J'utilise linux, et que je me sers de l'OSS, ALSA et PulseAudioComment jouer un son sur un flux d'entrée

+0

Quel est le problème que vous essayez de résoudre? –

+0

J'ai un fichier son, et j'essaie de lire ce fichier sonore non pas dans un flux de sortie, mais dans un flux d'entrée/flux de capture. – Natecat

+0

Et pourquoi voulez-vous l'avoir dans un flux d'entrée? –

Répondre

2

Vous pouvez certainement jouer (et générer) son python

Voici un exemple de code qui génère sinusoïde, ouvre périphérique de lecture par défaut Alsa et pièces sinusoïde par cette

#!/usr/bin/env python3 
import math 
import struct 
import alsaaudio 
from itertools import * 

def sine_wave(frequency=440.0, framerate=44100, amplitude=0.5): 
    """Stolen from here: http://zacharydenton.com/generate-audio-with-python/""" 
    period = int(framerate/frequency) 
    if amplitude > 1.0: amplitude = 1.0 
    if amplitude < 0.0: amplitude = 0.0 
    lookup_table = [float(amplitude) * math.sin(2.0*math.pi*float(frequency)*(float(i%period)/float(framerate))) for i in range(period)] 
    return (lookup_table[i%period] for i in count(0)) 

sound_out = alsaaudio.PCM() # open default sound output 
sound_out.setchannels(1) # use only one channel of audio (aka mono) 
sound_out.setrate(44100) # how many samples per second 
sound_out.setformat(alsaaudio.PCM_FORMAT_FLOAT_LE) # sample format 

for sample in sine_wave(): 
    # alsa only eats binnary data 
    b = struct.pack("<f", sample) # convert python float to binary float 
    sound_out.write(b) 

ou vous pouvez loopback microphone à vos haut-parleurs

#!/usr/bin/env python3 
import struct 
import alsaaudio 

sound_out = alsaaudio.PCM() # open default sound output 
sound_out.setchannels(1) # use only one channel of audio (aka mono) 
sound_out.setperiodsize(5) # buffer size, default is 32 

sound_in = alsaaudio.PCM(type=alsaaudio.PCM_CAPTURE) # default recording device 
sound_in.setchannels(1) # use only one channel of audio (aka mono) 
sound_in.setperiodsize(5) # buffer size, default is 32 

while True: 
    sample_lenght, sample = sound_in.read() 
    sound_out.write(sample) 

exemples beaucoup plus peuvent être trouvés dans pyth sur la bibliothèque d'alsaaudio http://pyalsaaudio.sourceforge.net/libalsaaudio.html

+0

Cela ne répond pas à la question. –

+0

mais il est néanmoins utile :) – starfry

-1

Je suppose que cela dépend de ce que vous aimeriez faire avec après que vous l'ayez "dans" python. Je regarderais certainement la bibliothèque de scikits.audiolab. C'est ce que vous pourriez utiliser si vous vouliez établir des spectrogrammes de tous les sons que vous essayez de traiter (je suppose que c'est ce que vous voulez faire?).