我正在开发一个项目,我有一个Pd扩展补丁(使用大量的外部设备,所以我在没有额外配置的Pd扩展中运行/补丁)运行交互式声音艺术装置。现在,作曲家/艺术家将在多用户互动网站上在线运行。我的想法是:
3号是我被困的地方。我无法将PureData中的音频转换为可以流式传输到Web浏览器的内容。我昨天使用[oggcast~]对象,它使用Icecast2(http://icecast.org),但它无法连接。我正在考虑将它发送到websocket或从node.js通过socket.io或某种WebRTC库,但我仍然需要从PureData中获取它。
我找到了一个可能工作的解决方案 IF 我有一个声卡来传输音频。但是没有声卡,因为它只是一个Web服务器。
它确实需要是服务器端,因为有很多音频文件使用,有些非常长。如果多个人可以互动并听到彼此的互动,那么这将是一个巨大的优势。所以不幸的是,WebPd和任何其他浏览器端PD到javascript解决方案都已淘汰。
有什么想法吗?
答案 0 :(得分:0)
Python是一种出色的服务器端语言,支持websockets和其他通信协议。它还使用libpd - 纯数据库/包装器,可用于许多编程语言,包括python。缺点是它最适用于pd香草物品。虽然我听说你可以添加外部支持,但这并不容易。我正在按照这条路走向解决方案...
这不是服务器端解决方案,因此您无法获得社区/协作体验的好处,每个人都可以同时听到。
Javascript库,允许您加载puredata补丁并通过Web Audio API运行它。工作正常,但支持非常有限的对象!虽然我只能使用标准的pd vanilla对象来使这个补丁运行良好,但我仍然不能让这个补丁与webpd一起使用。
这很好用,除了有很多延迟。 6-12秒!我们可以在下面的icecast.xml设置中将其减少到6s。其余的只能通过改变源代码和重新编译来减少mp3cast~pd外部,但是可能会出现缓冲/流媒体问题......如果有人想试试这个 - 请告诉我! :)
有一个名为mp3cast~
的纯数据对象(包含在pd扩展中)安装这些软件包:
pd-extended
alsa声音驱动程序:
alsa
alsa-tools
libasound2-dev
流媒体和依赖项:
curl
libxml2
libxslt
lame
icecast2 // This will also launch a setup program in your command line - it will ask you to enter three separate passwords - delete the default (make sure you delete ALL THE WAY to the beginning of the line) then enter your password, each time
加载alsa虚拟驱动程序
在“/ etc / modules”(Ubuntu 14.04)中添加行:
snd-dummy
在Ubuntu命令行中输入:
sudo modprobe snd-dummy // loads dummy sound card into the kernel
sudo adduser <yourusername> audio // adds you to the audio group
sudo init 6 // reboots ubuntu (any other method of restarting is fine)
配置icecast2 在/etc/icecast2/icecast.xml
编辑文件编辑此项以将延迟减少6秒: 0 0 连接预缓冲器,以便在启动流时不会出现任何问题。这很好,但增加了额外的6s(默认情况下保留为65535)。
使用您的主机名或IP地址以及将在浏览器中输入的端口(或连接到前端代码中)来编辑此位置: 111.111.111.111 8000
您还可以更改密码,显示位置和联系人,挂载点(默认情况下为/ stream)等。但以上只是需要完成的工作。然后按照mp3cast~help文件中的说明进行操作。
启动它: 启动icecast2服务器: sudo /etc/init.d/icecast2 start 启动pd补丁: sudo pd-extended -nogui -noadc -rt -alsa /path/to/patch/pdPatch.pd& amp;
国旗: -nogui需要!这将它设置为NO GUI,因为服务器上没有 -noadc因为我们没有收到音频,所以就是不要使用它 -rt给它实时优先级 -alsa force alsa声卡 - 可能没有必要,但是很好的做法 &安培; - 允许您在pd-extended继续运行时继续使用命令行
答案 1 :(得分:0)
我建议遵循以下技巧:
$ sudo modprobe snd-aloop
$ # (assuming you already have two soundcards: hw:0 and hw:1)
$ aplay -D hw:2,0,0 Testsong.wav
这会将循环设备切换到某些设置,如Signed 16 bit Little Endian, Rate: 44100 Hz, stereo
。这有助于pd不使用我们的费率。
现在让pd输出到hw2。
第二步是使用ffserver(或任何其他流媒体服务器)并指示它使用alsa设备hw:2,1,0