【问题标题】:PyObjC - streaming music with NSSoundPyObjC - 使用 NSSound 流式传输音乐
【发布时间】:2013-11-24 00:26:44
【问题描述】:

我尝试在this blog之后使用 Python+PyObjC 制作一个简单的音乐流媒体应用程序

import Foundation
from AppKit import NSSound
sound = NSSound.alloc()
url = Foundation.NSURL.URLWithString_("http://206.217.213.235:8050/")
sound.initWithContentsOfURL_byReference_(url, True)

sound.play()

失败了

>>> sound.play()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: cannot access attribute 'play' of NIL 'NSSound' object

为什么?

【问题讨论】:

    标签: python pyobjc


    【解决方案1】:

    这是因为 AppKit 中的 NSSound 对象提供了一种在 Mac 应用程序中播放 AIFF 和 WAV 声音文件的方法,而不是 Shoutcast 。见:http://nodebox.net/code/index.php/PyObjC

    我很快试图找到一个现有的 Python 模块来做你想做的事,但它似乎不存在。然而,有很多用 Python 实现的应用程序可以做到这一点,您可以分析它们以了解它们是如何做到的。例如:https://pypi.python.org/pypi/DeeFuzzer

    我能为您找到的最佳替代方案是 How do I capture an mp3 stream with python,它谈到了捕获流以进行本地播放。

    【讨论】:

      【解决方案2】:

      添加到@William Denman 的答案initWithContentsOfURL_byReference_ 正在返回 nil,这意味着创建声音时发生错误。在这种情况下,我们知道它是因为 URL 应该指向 NSSound 可以理解的有效文件(AIFF、WAVE、NeXT、SD2、AU 和 MP3)。

      即使NSSound 在这种情况下工作,它也必须在播放前下载整个文件;正如@William Denman 指出的那样,这不适用于流。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多