MATLAB 的假麦克风输入

Fake microphone input for MATLAB

我正在 MATLAB 上进行一个记录声音和过程的项目。我完全厌倦了在开发过程中一遍又一遍地播放相同的声音。

有没有什么方法可以 "fake" 麦克风,即在我的电脑上播放一个文件,然后在 MATLAB 中使用我用来录制麦克风的相同代码获取它?

感谢您的帮助。

PS:我在 Mac OS X Yosemite

这取决于您实现代码的方式 - 如果您 post 相关部分,您将能够获得更具体的建议 - 但通常您可以替换部分代码通过从磁盘读取文件的调用捕获来自麦克风的输入 - wavread 对此很有用 (http://uk.mathworks.com/help/matlab/ref/wavread.html).

如果你正在做实时的事情那么它可能会或可能不会工作,但如果不是那么你可以在第三方应用程序中播放声音文件并使用一些东西在内部将输出重新连接到输入。 Soundflower 是一种可以执行此操作的工具,还有其他工具。

还有更多的难题需要解决。

如果只有异步工作模式是可能的

如果您只是想安静地工作,而 MATLAB 进程正在开发中不需要与声音回放同步(不依赖于声音样本从哪里开始 & 只需要"some" 一旦 MATLAB 代码准备就绪,将输入与声音相关的数据),最简单的方法是将插孔连接器插入 MIC,并通过外部设备无限循环地重新播放声音( MP3 播放器等),享受宁静。

如果需要同步操作模式

如果您的 MATLAB 代码需要同步处理,与声音样本的开始对齐并在 MATLAB 代码完成后终止重播过程,那么您需要的东西比仅仅重新布线更复杂(无论是物理上还是虚拟上)声音传递。

有一些方法可以让 MATLAB 与外部进程进行通信,从而允许在远程端触发同步事件(发送类似 HeyPythonProcess.startTheSoundREPLAY() 的消息)并使整个声音处理既静音(例如,python 音频服务可以在您的完全(即可编程)控制下将声音字节移动到相应的混音器路径)和完全同步(通过事件驱动的消息传递层,比如 ZeroMQ 允许) 从而根据需要保持流程。

如果这听起来很复杂?是的,这很复杂,但既现实又可能。 MATLAB 允许以完全自主的多代理方式进行进程间通信/消息传递(没有从属关系,实际上是完全自主的工作模式),这为您提供了未来的巨大力量,也许,一旦进入分布式 cloud/grid处理项目。

使用 MATLAB 操作桥接模式的副作用

还有另一种同步方式,使用python-MATLAB桥,其中python端"enforces"同步(控制实验)和启动/停止MATLAB部分工作(因此将回放与 MATLAB 处理对齐作为副作用)

from pymatbridge import Matlab as aMATLAB   # get ready
'''                                         # 
mlab = aMATLAB()                            # a class instance ( empty )
'''                                         
mlab = aMATLAB( matlab = '...aMatlabCODE' ) # a class instance ( initialised )

mlab.start()                                # True once connected.
#
# start playing sound here
# ... and make MATLAB-beyond-the-bridge process it
# ...
# ....>>> |||||||||||||
#         vvvvvvvvvvvvv
results = mlab.run_code('a=1;')             # process code / vars