Seite 1 von 2

Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 15:41
von rotalever
Hallo,
I möchte mp3-files über Python abspielen. Dafür will ich den Windows Media Player benutzen. Es gibt zwar auch gute Python-Bibliotheken, aber da MP3 Patentrechtlich geschützt ist, möchte ich es lieber über den WMP machen. Für das Abspielen habe ich bereits diesen Code gefunden. Ich habe ihn zwar noch nicht ausprobiert, aber er sollte funktionieren.

Code: Alles auswählen

from win32com.client import Dispatch
wmp = Dispatch("WMPlayer.OCX")
wmp.openPlayer("mp3")
newItem = wmp.newMedia("mp3") wmp.currentPlaylist.appendItem(newItem)
Ich hoffe auch mal, dass man den Windows Media Player beim Abspielen nicht sieht ;-)

Allerdings habe ich noch ein kleines Problem, da ich auch Audio Visualisierungen auf den Bildschirm zeichnen muss. Dazu muss ich aber die gerade abgespielte Mp3-Datei wieder vom WMP als Audiodaten zurückbekommen. Wie mache ich das mit Python?
Ich habe gehört, dass das mit irgendwelchen "dshow filtern" funktioniert, davon habe ich aber leider keine Ahnung. Kann mir da irgendjemand helfen? Wenn keiner etwas weiß, würde ich mich auch über einen Ansatz freuen, mit dem ich dann weitersuchen kann.

Danke schon mal.[/code]

Re: Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 16:59
von Leonidas
rotalever hat geschrieben:Ich habe ihn zwar noch nicht ausprobiert, aber er sollte funktionieren.
Er wird nicht funktionieren, da in der letzten Zeile zwei Anweisungen drin sind und weil ``newItem`` undefiniert ist.
rotalever hat geschrieben:Allerdings habe ich noch ein kleines Problem, da ich auch Audio Visualisierungen auf den Bildschirm zeichnen muss. Dazu muss ich aber die gerade abgespielte Mp3-Datei wieder vom WMP als Audiodaten zurückbekommen. Wie mache ich das mit Python?

Code: Alles auswählen

audiodatei = file('deinedatei.mp3', 'r')
audiodaten = audiodatei.read()
audiodatei.close()
Wozu man den WMP an dieser Stelle nutzen sollte, ist mir unklar.
rotalever hat geschrieben:Ich habe gehört, dass das mit irgendwelchen "dshow filtern" funktioniert
"DirectShow", falls du eine Suchmaschine verwenden willst.
rotalever hat geschrieben:Wenn keiner etwas weiß, würde ich mich auch über einen Ansatz freuen, mit dem ich dann weitersuchen kann.
GOOM?

Verfasst: Montag 8. Oktober 2007, 17:18
von BlackJack
@Leonidas: Ich glaube es sollten die dekodierten Audiodaten gelesen werden und nicht einfach nur die MP3-Datei so wie sie $GOTT, äh der Encoder, geschaffen hat. ;-)

Zum Dekodieren kann man unter anderem die Python-Anbindung an die `libmad` benutzen.

Re: Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 17:19
von rotalever
Leonidas hat geschrieben: Er wird nicht funktionieren, da in der letzten Zeile zwei Anweisungen drin sind und weil ``newItem`` undefiniert ist.
Jo kleiner Kopierffehler, aber warum ist newItem undefiniert? Da steht doch "newItem = ...".

Code: Alles auswählen

audiodatei = file('deinedatei.mp3', 'r')
audiodaten = audiodatei.read()
audiodatei.close()
Wozu man den WMP an dieser Stelle nutzen sollte, ist mir unklar.
[/quote]
Ganz einfach. Die Audiodaten sind bei MP3 komprimiert. Das ist ja auch grad das Problem. Der Algorithmus zum Entkomprimieren (enthalen in vielen Bibliotheken) ist leider patentiert. WMP bietet eine Schnittstelle zum Abspielen von MP3s. Das Benutzen dieser verstößt aber nicht gegen das Patentrecht. Ist zwar an sich unlogisch, aber damit muss man halt leben. Nur wird jetzt halt das Audio vom WMP abgespielt und ist auch zu hören, aber an die (unkomprimierten) Audiodaten komme ich eben nicht mehr ganz so einfach ran.
Leonidas hat geschrieben: "DirectShow", falls du eine Suchmaschine verwenden willst.
Ja und wie macht man das dann in Python? Habe sowas noch nie gemacht.
Leonidas hat geschrieben: GOOM?
Nene ich will das selber machen.

Verfasst: Montag 8. Oktober 2007, 17:20
von rotalever
BlackJack hat geschrieben:@Leonidas: Ich glaube es sollten die dekodierten Audiodaten gelesen werden und nicht einfach nur die MP3-Datei so wie sie $GOTT, äh der Encoder, geschaffen hat. ;-)
Da war jemand schneller als ich :D
BlackJack hat geschrieben: Zum Dekodieren kann man unter anderem die Python-Anbindung an die `libmad` benutzen.
Wie gesagt, geht leider aus den genannten Gründen nicht, sonst hätte ich schon die passende Bibliothek.

Verfasst: Montag 8. Oktober 2007, 17:25
von BlackJack
Also entweder Du überwindest Deine Abscheu gegenüber dem patentierten Code oder Du steigst auf Ogg Vorbis um. :-)

Edit: Ist das *dekodieren* überhaupt lizenzpflichtig?

Verfasst: Montag 8. Oktober 2007, 17:30
von rotalever
BlackJack hat geschrieben:Also entweder Du überwindest Deine Abscheu gegenüber dem patentierten Code oder Du steigst auf Ogg Vorbis um. :-)
Das erste möchte ich halt nicht so gerne. Das zweite bringt mir nicht viel, wäre aber prinzipiell das Beste.
BlackJack hat geschrieben: Edit: Ist das *dekodieren* überhaupt lizenzpflichtig?
Ja kostet $50000, selbst bei für den Enduser kostenlosen Opensource Projekten.

Verfasst: Montag 8. Oktober 2007, 19:03
von Andy
Hi rotalever,

schade, Mustafas Page ist grad down. Aber er hat zu Deinem Code im ersten Posting auf jeden Fall ne Lösung. In Deinem Script fehlt jedoch natürlich ein

Code: Alles auswählen

wmp.Visible=0
. Über das Decoding weiß ich jedoch auch nichts weiter.

Gruß Andy

EDIT: HA, jetzt ist sie wieder verfügbar! :lol:

Code: Alles auswählen

# this program will play MP3, WMA, MID, WAV files via the WindowsMediaPlayer
from win32com.client import Dispatch
mp = Dispatch("WMPlayer.OCX")
# use an mp3 file you have ...
#tune = mp.newMedia("C:/Program Files/Common Files/HP/Memories Disc/2.0/audio/Swing.mp3")
# or copy one to the working folder ...
#tune = mp.newMedia("Bier1.mp3")
 
# you can also play wma files, this cool sound came with XP ...
tune = mp.newMedia("C:/WINDOWS/system32/oobe/images/title.wma")
mp.currentPlaylist.appendItem(tune)
mp.controls.play()
# to stop playing use
raw_input("Press Enter to stop playing")
 
mp.controls.stop()

Aber statt auf raw_input, solltest Du auf das Script von Leo zugreifen http://www.python-forum.de/post-75664.html#75664

Re: Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 19:37
von Leonidas
rotalever hat geschrieben:
Leonidas hat geschrieben: Er wird nicht funktionieren, da in der letzten Zeile zwei Anweisungen drin sind und weil ``newItem`` undefiniert ist.
Jo kleiner Kopierffehler, aber warum ist newItem undefiniert? Da steht doch "newItem = ...".
Sorry, habe ich übersehen. Ungültige Coder verwirrt mich inzwischen genauso wie den Interpreter ;)
rotalever hat geschrieben:Ganz einfach. Die Audiodaten sind bei MP3 komprimiert. Das ist ja auch grad das Problem. Der Algorithmus zum Entkomprimieren (enthalen in vielen Bibliotheken) ist leider patentiert. WMP bietet eine Schnittstelle zum Abspielen von MP3s. Das Benutzen dieser verstößt aber nicht gegen das Patentrecht. Ist zwar an sich unlogisch, aber damit muss man halt leben. Nur wird jetzt halt das Audio vom WMP abgespielt und ist auch zu hören, aber an die (unkomprimierten) Audiodaten komme ich eben nicht mehr ganz so einfach ran.
rotalever hat geschrieben:
Leonidas hat geschrieben: "DirectShow", falls du eine Suchmaschine verwenden willst.
Ja und wie macht man das dann in Python? Habe sowas noch nie gemacht.
Es gibt inzwischen mit DirectPython eine Anbindung an DirectX. Aber DirectX zu nutzen.. ich weiß nicht...

Re: Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 19:41
von rotalever
leonidas hat geschrieben: Es gibt inzwischen mit DirectPython eine Anbindung an DirectX. Aber DirectX zu nutzen.. ich weiß nicht...
Das wäre wahrscheinlich etwas overkill :roll:
Aber möglicherweise kann man sich ja aus deren Code was rausholen (wenn nichts anderes mehr hilft).

Re: Audiodaten von Windows Media Player bekommen

Verfasst: Montag 8. Oktober 2007, 23:44
von poker
rotalever hat geschrieben:Es gibt zwar auch gute Python-Bibliotheken, aber da MP3 Patentrechtlich geschützt ist, möchte ich es lieber über den WMP machen.
IMO bezieht sich der Patentschutz nur darauf wenn du selber eine Implementierung des Codecs schreibst oder wenn du einen Proprietären Codec selber im Programm nutzen willst. Auch beziehen sich die Lizenzansprüchen IMO darauf das du Löhnen musst wenn du Kommerziell MP3-Files vermarkten willst (IMO haben die ehe ein an der Klatsche).

rotalever hat geschrieben: Ganz einfach. Die Audiodaten sind bei MP3 komprimiert. Das ist ja auch grad das Problem. Der Algorithmus zum Entkomprimieren (enthalen in vielen Bibliotheken) ist leider patentiert.
rotalever hat geschrieben:
BlackJack hat geschrieben: Edit: Ist das *dekodieren* überhaupt lizenzpflichtig?
Ja kostet $50000, selbst bei für den Enduser kostenlosen Opensource Projekten.
Ja, aber doch nur wenn du selber einen Dekoder **implementierst** und nicht einen bestehenden als backend nutzt(?)
Dennoch können da Projekte wie libavcodec[1] und FFmpeg[1], und VLC das FFmpeg voraussetzt(!) ohne Schwierigkeiten bestehen.


Irgendwie verstehe ich nicht wirklich die Problematik von dir, rotalever, auch wenn ich mir den Thread jetzt schon zum 2 mal durchlese. Du willst ja keinen Codec selber schreiben. -- Deshalb mal für ganz dumme wie mich zusammengefasst:
- Du willst ein Programm schreiben das MP3-Files abspielen kann.
- Du willst zusätzlich den dekodierten Strom abfangen um die Daten weiter zu verarbeiten (In deinem Fall für Visualisierungszwecke)
- Du willst keinen Codec selber schreiben!

Habe ich das soweit erfast? Wenn ja: Wo ist den bitte das Problem!? Binde z.B. FFmpeg ein[1] über ctypes oder schau ob du nen Python Wrapper findest. Songbird ist doch auch Open source und kann viele Medien abspielen :? Und die Zahlen sicherlich auch keine Gebühren :?


[1]: OK, die Lizenz technische Frage ist hier heikel. Aber VLC nutzt FFmpeg auch und keiner hat denen bisher vors knie gefickt! Eventuell wäre es angebracht das du dich mal mit den Devs von VLC in Verbindung setzt und fragst, wie Sie die "rechtliche" diffuse "Problematik" mit FFmpeg umgehen. Nur so als Vorschlag.

Ich denke nämlich, solange du FFmpeg und libavcodec nicht direkt selber mitlieferst sondern **nur** von deinem Programm voraussetzt(!) dürfte es für dich keinerlei Rechtlicher Konsequenzen geben! Das ist aber nur Spekulation, die darauf beruht das VLC das auch nutzt und bisher keine Schwierigkeiten hatte. In dem Fall muss dann der User aus dem FFmpeg selber ein Binary machen (oder pre-comps aus dem netzt saugen).

BTW: Falls ich hier gerade nur müll geschrieben habe, lasst es mich wissen. Aber IMO denke ich, da es sich rotalever etwas zu kompliziert macht :?

Als Abschluss: rotalever setzt dich mit diversen Devs von Open Source Projekten (in dem Bereich) in Verbindung und bespreche diese Thematik mit denen und wie Sie damit umgehen und bis zum welchen Grad es Rechtlich ist.

Verfasst: Dienstag 9. Oktober 2007, 09:02
von BlackVivi
rotalever hat geschrieben:Ja kostet $50000, selbst bei für den Enduser kostenlosen Opensource Projekten.
Das glaub ich aber kaum oO' Immerhin verwenden viele Programme libmad und ich glaube kaum, dass die 50000 $ zur Verfügung haben... Das entwickeln eines decoders kostet soviel, wie poker schon richtig gesagt hat. Aber mit einer libmad Anbindung hast du ja schon einen hervorragenden decoder...

Verfasst: Dienstag 9. Oktober 2007, 12:41
von rotalever
Ich habe mich ausgibig informiert, dass jedes, und mit jedes war wirklich jedes gemeint, Projekt die Lizenzgebühren zahlen muss.

Auch wenn man eine Bibliothek benutzt und diese nur einbindet ist es nicht legal. Man darf keinen MP3 Decoder mit seinem Programm ausliefern, wenn man keine Lizenz hat. Egal ob der jetzt selbstprogrammiert ist oder nicht. Das ist Fakt und offiziell exakt genauso bestätigt.

Aber den WMP als Backend zu benutzen ist legal, da er erstens im Windows enthalten ist und nicht beim Programm dabei ist und zweitens von Microsoft eine Lizenz dafür erworben wurde.

Warum existieren so viele Opensource/kostenlose Projekte? Ganz einfach, sie handeln alle illegal. Ob man sich jetzt sagt, dass man auch dieses Risiko eingehen möchte, ist eben eine persönliche Entscheidung der Entwickler.

Verfasst: Dienstag 9. Oktober 2007, 12:43
von BlackVivi
Vielleicht kannst du uns'ne gute Quelle für diese Behauptung geben. Zu sagen, dass jedes OpenSource Projekt das mit libmad arbeitet illegal handelt, ist doch'ne ziemlich gewagte Aussage oO'

Verfasst: Dienstag 9. Oktober 2007, 12:48
von rotalever
BlackVivi hat geschrieben:Vielleicht kannst du uns'ne gute Quelle für diese Behauptung geben. Zu sagen, dass jedes OpenSource Projekt das mit libmad arbeitet illegal handelt, ist doch'ne ziemlich gewagte Aussage oO'
Schreib halt eine Email an www.mp3licensing.com

Das ganze wird aber eigentlich auch etwas Offtopic...

Verfasst: Dienstag 9. Oktober 2007, 19:21
von Leonidas
rotalever hat geschrieben:
BlackVivi hat geschrieben:Vielleicht kannst du uns'ne gute Quelle für diese Behauptung geben. Zu sagen, dass jedes OpenSource Projekt das mit libmad arbeitet illegal handelt, ist doch'ne ziemlich gewagte Aussage oO'
Schreib halt eine Email an www.mp3licensing.com
Natürlich sagt dir Thomson das, was erwartest du?

Das ist ja so als würde man SCO fragen, ob Linux "deren" Quellcode nutzt.

Verfasst: Dienstag 9. Oktober 2007, 19:28
von Andy
Leonidas hat geschrieben: Natürlich sagt dir Thomson das, was erwartest du?

Das ist ja so als würde man SCO fragen, ob Linux "deren" Quellcode nutzt.
KicherKicher :mrgreen: Ohne dass ich Thomson kenne. Aber natürlich verfolgt er auch zuerst die, von denen er die Kontaktdaten kennt!!! :lol: :P

Verfasst: Dienstag 9. Oktober 2007, 19:45
von Andy
Leonidas hat geschrieben: Natürlich sagt dir Thomson das, was erwartest du?

Das ist ja so als würde man SCO fragen, ob Linux "deren" Quellcode nutzt.
KicherKicher :mrgreen: Ohne dass ich Thomson kenne. Aber natürlich verfolgen die auch zuerst die, von denen die die Kontaktdaten kennen!!! :lol: :P

Verfasst: Dienstag 9. Oktober 2007, 19:47
von BlackVivi
Ich find' das Gerede um die Lizenz und sowas eigentlich überhaupt nicht Off-Topic. Immerhin... das wären rund 50~ Open Source Projekte, die absolut illegal handeln O_O Das wäre ein Skandal für mich. Unter diversen Suchwörtern unter Google konnte ich aber nicht herausfinden, dass libmad oder irgendjemand der's benutzt hat irgendwelche Probleme hatte...

Vielleicht bin ich auch unfähig. Aber trotzdem denke ich, dass du damit deine Aufgabenstellung damit viel eleganter und vor allem Plattformunabhängiger lösen kannst...

Verfasst: Dienstag 9. Oktober 2007, 19:51
von rotalever
BlackVivi hat geschrieben: Vielleicht bin ich auch unfähig.
Bei Google und Co. findet man dazu auch gar nix. Vielleicht ein paar falsche Gerüchte, das wars. Opensource Projekte wurden meines Wissens auch noch nicht angeklagt.
BlackVivi hat geschrieben: Aber trotzdem denke ich, dass du damit deine Aufgabenstellung damit viel eleganter und vor allem Plattformunabhängiger lösen kannst...
Ja natürlich. Ich könnte alles mit einer bestimmten Bibliothek (pymedia) wunderbar lösen, aber ich respektiere eben so eine Firma, auch wenn es mir nicht gefällt.