我有一个来自navigator.getUserMedia的MediaStreamSource,它连接到GainNode,而GainNode又连接到ScriptProcessorNode,如下所示:
[getUserMediaStream] -> [MediaStreamSource] -> [GainNode] -> ScriptProcessorNode -> (destination)
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,正在执行主要工作的是ScriptProcessorNode,即通过WebSocket处理原始音频流并将其传输到远程服务器(我的应用程序基本上是基于Web的录音机)以进行保存.这很好用.
但是,现在我正在尝试引入第二个MediaStreamSource,这次来自WebRTC PeerConnection.对等连接本身工作正常,如果将音频路由到元素,我可以听到来自同伴的音频.但是,我希望第二个MediaStreamSource也可以通过管道输入ScriptProcessorNode,有效地记录两个音频流.
我想要做的是在两个音频流到达ScriptProcessorNode之前将它们混合在一起.我尝试将第二个MediaStreamSource连接到同一个GainNode(以及直接连接到ScriptProcessorNode),但这不起作用,因为这两个节点都不接受多个输入节点(即使它在尝试连接多余节点时从未返回任何错误).我想要实现这样的事情:
像这样的东西:
[MediaStreamSource] -> [Intermediary Node(s)?] -> [GainNode] -> [ScriptProcessorNode] -> [Server]
/
[MediaStreamSource] /
Run Code Online (Sandbox Code Playgroud)
然后我查看了WebAudio规范,发现实际上确实需要多个输入的唯一节点是ChannelMergerNode.然而,本说明书中指出流被合并到基于它们被连接到的节点上,使得连接在输入第一个流将成为输出的左信道和第二流将成为右声道的顺序信道.从这一点开始,我认为结果将最终成为我左耳上的一条流,而另一条右边则是右边的流.我只想将两个流合并并混合成单个单声道.
使用当前的WebAudio API,这有可能吗?
非常感谢你的帮助!
的Eirik
我目前正在使用 IPython 内核创建交互式 python 终端。
我已经成功地使用 KernelManager 类('IPython.kernel.manager.KernelManager')设置了一个工作解释器(通过 web 使用 websockets)。但是,我还想实现一个功能,可以保存内核当前状态的“快照”。换句话说,我想保存内核的 locals() 和 globals() dict 的副本,然后我应该能够在以后将其应用回内核,以便实际上跳回(或向前)时间。
为此,我需要了解如何直接访问解释器的命名空间,而无需实际通过内核的消息传递通道。也就是说,我需要对命名空间中对象的实际引用。
这可能吗?我一直试图在一天的大部分时间里搜索 IPython 文档,但没有取得多大成功。
非常感谢您的帮助。
埃里克