c++ - 在 Linux 上播放 mp3 声音缓冲区

标签 c++ linux audio network-programming mp3

我希望能够在 Linux 上播放我在特定端口上接收到的 mp3 音频声音缓冲区。这是一个连续的直播。我看过 pulseaudio、portaudio、mpg123 等等,但似乎不知道该怎么做。

mp3 声音是从网络上的另一台计算机接收的,并使用 naudio 和 lame 进行转换。如果我在 Windows PC 上收到声音,我可以使用 C# 中提供的 naudio dll 简单地播放它。但我不确定如何在 Linux 中绕过它。

如有任何建议,我们将不胜感激。

提前致谢

最佳答案

你看过madplay吗?

它可以从标准输入读取 MP3 数据。您可以使用一个简单的程序,甚至使用 shell 命令将从套接字读取的数据重定向到 madplay 的标准输入:

netcat <hostname> <portname> | madplay - -o wave:- | aplay

如果您在 linux 机器上使用 alsa,以上内容将起作用。

更准确地说,在我的机器上我可以执行以下操作:

  • 使用 netcat 通过 TCP 套接字流式传输 mp3 文件:

    cat ~/Music/Linkin\Park/06\Demos\,\Unreleased\\&\Other/1997\-\Xero/04\-\Stick\N\Move.mp3 | netcat -l localhost -p 8899

  • 连接到端口并使用 netcat 读取 MP3 数据并将流路由到 madplay:

    netcat 本地主机 8899 | madplay - -o wave:- |播放

关于c++ - 在 Linux 上播放 mp3 声音缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874613/

相关文章:

android - 使用录音机录制音频,然后将其上传到服务器android

ios - AurioTouch2声音频率

c++ - 为什么windows下改属性为readonly后还能写入文件?

android - proc/[pid]/stat 中的值是什么意思?

linux - 如何在子文件的第 2 列中 grep 包含值范围(-6 到 -7)的文件名?

c - SDL2 音频回调限制为 8 位?

C++:如何使用名称长度从内存中的字符指针中取消引用多个字符

c++ - 如何编写一个 boost::spirit::qi 解析器来解析从 0 到 std::numeric_limits<int>::max() 的整数范围?

c++ - 使用 Catch C++ 进行单元测试会干扰我的 main()

linux - 在 bash 中使用 grep 的 for 循环语法