2013-11-23 3 views
0

Я попытался сделать простую музыку потокового приложения с помощью Python + PyObjC следующих this blogPyObjC - потоковая музыка с NSSound

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 

Почему?

ответ

1

Это происходит потому, что объект NSSound в AppKit дает возможность играть AIFF и WAV звук файлов в Mac приложениях и не пренадлежит потоков. См.: 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

, чтобы добавить к ответу @William Denman initWithContentsOfURL_byReference_ возвращает ноль, что означает возникновение ошибки при создании звука. в этом случае мы знаем его, потому что URL должен указывать на действительный файл, который понимает NSSound (AIFF, WAVE, NeXT, SD2, AU и MP3).

, даже если NSSound работал в этом случае, он должен был бы загрузить весь файл перед воспроизведением; как отметил @William Denman, это не работает с потоками.

Смежные вопросы