0

我正在做一个项目,我有一个 Pd 扩展补丁(使用大量外部组件,因此我在 Pd 扩展中运行/修补它,无需额外配置)运行交互式声音艺术安装。作曲家/艺术家现在希望它在多用户交互式网站中在线运行。我的想法是:

  1. 在网络服务器上运行 Pd 扩展补丁
  2. 让用户与补丁交互(通过 websockets)(得到了工作 - 基于补丁的文本输出,这是工作)
  3. 将补丁中的音频流式传输到用户的浏览器

3号是我卡住的地方。我无法将 PureData 中的音频转换为可以流式传输到 Web 浏览器的内容。我昨天在使用 [oggcast~] 对象,它使用 Icecast2 ( http://icecast.org ),但它无法连接。我正在考虑将它发送到 websocket 或通过 socket.io 或某种 WebRTC 库从 node.js 发送,但我仍然需要将它从 PureData 中取出。

如果我有一个声卡来路由音频,我找到了一个可行的解决方案但是没有声卡,因为它只是一个网络服务器。

它确实需要在服务器端,因为使用了很多音频文件,有些很长。此外,如果多人可以互动并听到彼此的互动,那将是一个巨大的优势。所以不幸的是,WebPd 和任何其他浏览器端 PD 到 javascript 的解决方案都出来了。

有任何想法吗?

4

2 回答 2

0

我建议以下技术:

1.用modprobe snd-aloop生成一个虚拟alsa设备

$ sudo modprobe snd-aloop
$ # (assuming you already have two soundcards: hw:0 and hw:1)

2.准备循环装置(可选)

$ aplay -D hw:2,0,0 Testsong.wav

这会将循环设备切换到某些设置,例如Signed 16 bit Little Endian, Rate: 44100 Hz, stereo. 这有助于 pd 不使用奇怪的费率。

3.让pd在loop设备上播放

现在让 pd 输出到 hw2。

4.使用ffserver从loop设备流式传输

第二步是使用ffserver(或任何其他流媒体服务器)并指示它使用alsa device hw:2,1,0

于 2016-11-25T23:39:34.480 回答
0

好的,所以我有足够的时间来研究、测试和做事。这是我发现的:

libpd 和 python

Python 是一种出色的服务器端语言,支持 websocket 和其他通信协议。它还使用 libpd - 纯数据库/包装器,可用于包括 python 在内的许多编程语言。缺点是它仅适用于 pd vanilla 对象。虽然我听说您可以添加外部支持,但这并不是一件容易的事。我目前正在沿着这条路径寻求解决方案......

WebPD

这不是服务器端解决方案,因此您无法从社区/协作体验中受益,每个人都可以同时听到。

允许您加载 puredata 补丁并通过 Web Audio API 运行它的 Javascript 库。工作正常,但支持的对象数量非常有限!尽管我只使用标准的 pd vanilla 对象就可以让这个补丁正常工作,但让这个补丁与 webpd 一起工作仍然不够。

冰播流媒体

这很好用,除了有很多延迟。6-12秒!我们可以在下面的 icecast.xml 设置中将其减少到 6 秒。其余的只能通过更改源代码和重新编译在 mp3cast~ pd external 中减少,但是可能会出现缓冲/流式传输问题......如果有人想尝试这个 - 请告诉我!:)

有一个纯数据对象(包含在pd-extended中)叫做mp3cast~

  1. 安装这些软件包:

    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
    
  2. 加载 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)
    
  3. 配置 icecast2 编辑 /etc/icecast2/icecast.xml 中的文件

    编辑此以将延迟减少 6 秒:0 0 连接预缓冲区突发,这样您在启动流时不会遇到任何问题。这很好,但增加了一个额外的 6s(默认为 65535)。

    使用您的主机名或 IP 地址以及将在浏览器中键入(或在您的前端代码中连接到)的端口编辑此位置:111.111.111.111 8000

    您还可以更改密码、显示的位置和联系人、挂载点(默认为 /stream)等。但以上只是需要做的。然后按照 mp3cast~ 帮助文件中的说明进行操作。

  4. 启动它:启动 icecast2 服务器:sudo /etc/init.d/icecast2 start 启动 pd 补丁:sudo pd-extended -nogui -noadc -rt -alsa /path/to/patch/pdPatch.pd &

    标志: -nogui 必需!这将其设置为 NO GUI,因为服务器上没有 -noadc 因为我们没有接收音频,所以不要使用它 -rt 给它实时优先级 -alsa force alsa soundcard - 可能没有必要,但很好练习 & - 允许您在 pd-extended 继续运行时继续使用命令行

于 2016-07-26T18:39:20.077 回答