在Python中将声卡输入播放到声卡输出

时间:2017-08-27 13:31:23

标签: python linux audio pyaudio portaudio

有没有人知道是否有办法使用Python在同一声卡中输出某个声卡输出? (或任何其他语言)

如果是这样,是否可以编写一个脚本来读取声卡的输入并将其弹回到同一张卡上的输出,如果此输入静音超过十分钟,则将其重新路由到输出?

提前致谢

修改:欢迎使用任何操作系统的答案。 Windows或Linux发行版首选,OSX也可以接受。

2 个答案:

答案 0 :(得分:2)

pyaudio有一种称为非阻塞回调的方法,其中输入(如麦克风)直接路由到输出(扬声器/耳机),这意味着不能对输入流进行任何操作。 /> 不确定那就是你要找的东西。
如果你需要在写(或发送到putput)之前操纵流,那么你有@ rewolf的答案。

来自site的源代码。

"""
PyAudio Example: Make a wire between input and output (i.e., record a
few samples and play them back immediately).

This is the callback (non-blocking) version.
"""

import pyaudio
import time

WIDTH = 2
CHANNELS = 2
RATE = 44100

p = pyaudio.PyAudio()

def callback(in_data, frame_count, time_info, status):
    return (in_data, pyaudio.paContinue)

stream = p.open(format=p.get_format_from_width(WIDTH),
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                stream_callback=callback)

stream.start_stream()

while stream.is_active():
    time.sleep(0.1)

stream.stop_stream()
stream.close()

p.terminate()

答案 1 :(得分:1)

挑选设备

您可以获得PyAudio API支持的设备列表:

filterList:function()(
    var that = this;
    return this.banner.filter(function(item) { 
             return item.banner_img && item.banner_img.some(function(img) {          
                 return img.img && img.img.toLowerCase() === that.search.toLowerCase();           
             }); 
         });
   )

录制和播放,实时

可以通过打开和读取输入流来完成录制,这可以通过输出流同时播放。 可以使用p = pyaudio.PyAudio() host_info = p.get_host_api_info_by_index(0) device_count = host_info.get('deviceCount') # can iterate through devices and check their info: p.get_device_info_by_host_api_device_index(0, device_index) {'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': 0.01, 'defaultLowInputLatency': 0.0029024943310657597, 'maxInputChannels': 2L, 'structVersion': 2L, 'hostApi': 0L, 'index': 0L, 'defaultHighOutputLatency': 0.1, 'maxOutputChannels': 0L, 'name': u'Built-in Microphone', 'defaultHighInputLatency': 0.013061224489795919} input_device_index

选择设备

例如,这会立即录制并播放:

output_device_index

我并没有完全按照您在卡片之间弹跳音频的确切问题等等。但我相信您可以从我上面提到的内容中找到答案。

希望这有帮助