用python通过麦克风播放mp3文件

用python通过麦克风播放mp3文件,python,audio,input,mp3,microphone,Python,Audio,Input,Mp3,Microphone,有没有办法使用python(而不是任何外部软件)像麦克风输入一样播放mp3文件? 例如,我有一个mp3文件,用python脚本,它会通过我的麦克风播放,这样语音室的其他人就会听到。正如我所说,这只是一个例子 当然,我做了一些研究。我发现我可以用一个软件来创建一个虚拟设备,只需做一些事情就可以得到结果。但我的观点是,如果不安装软件,但使用某种python脚本,是否有可能 它讲述了有关麦克风、Mp3和媒体文件的所有内容如果您想知道如何使用Python播放Mp3,那么这是一个广泛的问题 有没有可能,没

有没有办法使用python(而不是任何外部软件)像麦克风输入一样播放mp3文件?

例如,我有一个mp3文件,用python脚本,它会通过我的麦克风播放,这样语音室的其他人就会听到。正如我所说,这只是一个例子

当然,我做了一些研究。我发现我可以用一个软件来创建一个虚拟设备,只需做一些事情就可以得到结果。但我的观点是,如果不安装软件,但使用某种python脚本,是否有可能
它讲述了有关麦克风、Mp3和媒体文件的所有内容

如果您想知道如何使用Python播放Mp3,那么这是一个广泛的问题

有没有可能,没有任何依赖关系,是的,但不值得。好吧,播放未压缩的音频是,但是MP3,好吧,我将在下面解释

要在不安装pyaudio或pygame或类似软件的情况下播放Python中的原始音频数据,首先必须知道脚本将在哪个平台上运行

然后实现一组很好的功能,用于选择音频设备、设置采样率、比特率、单声道/立体声等属性、将流传送到声卡并停止播放

这并不难,但要做到这一点,您必须在Windows上使用ctypes,Mac和Linux上的PyObjC是一个特例,因为它支持许多音频系统(可能使用套接字连接到PulseAudio,或使用管道连接到某些进程,如aplay/paplay/mpeg123…或利用gstreamer)

但是,既然你有很好的库,有简单的接口来访问和使用音频设备,为什么还要经历所有这些来避免依赖关系呢

PyAudio是一款很棒的产品

好吧,这是你关心的

但是,在没有外部库的情况下,从纯Python实时播放MP3,这并非完全不可能,但很难实现,据我所知,甚至没有人尝试过这样做

有纯Python MP3解码器实现,但它比实时音频播放所需的速度慢10倍。它几乎可以全速进行优化,但没有人对此感兴趣

它主要具有教育价值,用于不需要实时速度的情况

这就是你应该做的:

安装pygame并使用它直接播放MP3

或:

安装PyAudio和一些对Mp3进行解码的库,在pypi.python.org上有相当多的库,并使用它对Mp3进行解码并将输出提供给PyAudio

有更多的可能性,包括PyPipe,但是我认为这些是最简单的解决方案。 好的,我们澄清了你真正需要的是什么,这里是答案

我会留下完整的第一个答案,因为你们也需要那个部分

现在,您需要将音频播放到录制流,以便任何录制音频输入的应用程序都可以录制您正在播放的内容

在Windows上,这称为立体声混音,可以在音量控制中的“音频输入”下找到

选择立体声混音作为默认输入。现在,当您打开一个录音应用程序,该应用程序不选择自己的输入频道,而是使用所选频道(如Skype),它将录制所有从扬声器出来的声音和进入麦克风/线路输入的声音

我无法100%确定此选项是否会出现在所有窗口上,或者它是您拥有的声卡的一项功能

我确信Creative和Realtek声卡支持它

所以,研究一下这个

要从Python中选择该选项,必须使用ctypes连接到winmm.dll并调用相应的函数。我不知道是哪一个,有什么论据

如果音量控制中不存在此选项,则除了安装一个虚拟声卡为您执行环回操作外,它别无选择

可能会有这样一个软件打包成库,这样您就可以从Python或其他任何东西中使用它

在Linux上,使用Pulseaudio应该很容易。我不知道怎么做,但我知道你可以做到,重定向流等有教程在那里的某个地方

然后您可以从Python调用该命令,将其设置为该值并重置为正常值

在Mac上,我真的不知道,但这应该是可能的

如果你想让MP3只在录音流中播放,而不是在扬声器上播放,那么在Windows上,如果没有环回音频设备,你将无法做到这一点

在Linux上,我相信你能做到这一点,在Mac上,这应该是可能的,但是Q


我目前没有时间嗅探库等,以提供一些有用的代码给你,所以你将不得不自己做。但我希望我的指导能对您有所帮助。

这是可能的,但它不是100%使用python,因为它需要安装其他软件。(据我所知,这个特定的答案只适用于Windows,但在Linux上应该类似于PulseAudio,而不是VB音频电缆,但我不是Linux的日常用户,所以我不知道。)

首先下载:,这将创建一条“虚拟音频电缆”,程序可以在其中向输入设备(看起来像扬声器的设备)播放音乐,并通过管道将音乐传输到输出设备(看起来像麦克风的设备)

然后在cmd中运行这个命令:
pip install pygame==2.0.0.dev8
(或者
py-m pip install pygame==2.0.0.dev8
,这取决于python的安装情况)[它是开发版本的另一个原因是它只需要sdl2中的一些函数,而主分支使用sdl1)

然后:

>>> from pygame._sdl2 import get_num_audio_devices, get_audio_device_name #Get playback device names
>>> from pygame import mixer #Playing sound
>>> mixer.init() #Initialize the mixer, this will allow the next command to work
>>> [get_audio_device_name(x, 0).decode() for x in range(get_num_audio_devices(0))] #Returns playback devices
['Headphones (Oculus Virtual Audio Device)', 'MONITOR (2- NVIDIA High Definition Audio)', 'Speakers (High Definition Audio Device)', 'Speakers (NVIDIA RTX Voice)', 'CABLE Input (VB-Audio Virtual Cable)']
>>> mixer.quit() #Quit the mixer as it's initialized on your main playback device
>>> mixer.init(devicename='CABLE Input (VB-Audio Virtual Cable)') #Initialize it with the correct device
>>> mixer.music.load("Megalovania.mp3") #Load the mp3
>>> mixer.music.play() #Play it
要停止音乐,请执行:
mixer.music.stop()

此外,音乐不会通过扬声器播放,因此您将运行另一个python脚本或线程来处理通过扬声器播放音乐的问题。(另外,如果您想让它在按键上播放,我建议您使用python库键盘,GitHub文档非常好,您应该能够自己找到它。)

这花了我一段时间