0

Pythonからの入力に直接サウンドを再生できるかどうか疑問に思っていました。Linux を使用しており、OSS、ALSA、Pulseaudio を使用しています。

4

2 に答える 2

3

あなたは間違いなくpythonで音を鳴らす(そして生成する)ことができます

これは、正弦波を生成し、デフォルトの Alsa 再生デバイスを開き、それを介して正弦波を再生するサンプル コードです。

#!/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)

または、マイクをスピーカーにループバックできます

#!/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)

python alsaaudio ライブラリhttp://pyalsaaudio.sourceforge.net/libalsaaudio.htmlには、さらに多くの例があります。

于 2014-06-06T08:39:59.503 に答える
-1

私はそれをPythonに「入れた」後に何をしたいかによると思います。私は間違いなく scikits.audiolab ライブラリを見ていきます。これは、処理しようとしている音のスペクトログラムを作成したい場合に使用できるものです (それがあなたがやりたいことだと思いますか?)。

于 2014-06-09T11:24:04.810 に答える