我试图在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
为什么?
答案 0 :(得分: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,其中涉及捕获用于本地播放的流。
答案 1 :(得分:1)
添加到@William Denman的答案initWithContentsOfURL_byReference_
返回nil,这意味着创建声音时发生错误。在这种情况下,我们知道它,因为URL应该指向NSSound
理解的有效文件(AIFF,WAVE,NeXT,SD2,AU和MP3)。
即使NSSound
在此实例中有效,也必须在播放前下载整个文件;正如@William Denman指出的那样,这不适用于溪流。