Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[Python] Streamen van audio

Pagina: 1
Acties:

Verwijderd

Topicstarter
Welkom,

Ik ben nog niet zo lang bezig met Python, dus het kan dit ik dit totaal verkeerd aanpak, dus meldt dat dan graag even :)

Het Probleem

Ik ben een Python programma aan het maken dat audio streams moet kunnen afspelen. Ik neem hier eerst als voorbeeld 3FM. Nu is het zo dat wanneer ik op luister druk er gewoon "niks gebeurt". Geen foutmelding/terminaloutput, geen geluid, gewoon helemaal niks. Kan iemand mij vertellen wat er fout is aan mijn code een een klein hintje geven hoe het dan wel moet?

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env python

import re
import gobject
import pygtk
pygtk.require('2.0')
import gtk
import gnomevfs
import urllib
import distutils
import pygst

url="http://www.omroep.nl/radio3/live64.asx"
class Listen:

    def callback(self, widget, data):
        print "Je luistert naar %s" % data

    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def play(widget, data):
    radiofile=urllib.urlretrieve(url)

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.set_title("Radio luisteren")

        self.window.connect("destroy", lambda w: gtk.main_quit())

        vbox = gtk.VBox(False, 5)
        hbox = gtk.HBox(False, 5)
        self.window.add(hbox)
        hbox.pack_start(vbox, False, False, 0)
        self.window.set_border_width(5)

        frame = gtk.Frame("Gebruiksaanwijzing")
        label = gtk.Label("Luister nu naar 3FM door op luisteren te drukken!")
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)

    frame = gtk.Frame("Luisteren")
    button = gtk.Button("Luisteren")
    frame.add(button)
    vbox.pack_start(frame, False, False, 0)
        button.connect("clicked", self.callback, "3FM")
    button.connect("clicked", self.play)

    self.window.show_all ()

def main():
    gtk.main()

if __name__ == "__main__":
    radio = Listen()
    main()

Verwijderd

Topicstarter
schopje, niemand die een/de fout ziet?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:42

Creepy

Tactical Espionage Splatterer

Een kick na een uur? Sommige mensen hier hebben *wel* een prive leven... :/
Kicken mag, maar pas na 24 uur. Niet iedereen zit hier continu de pagina's te verversen...

Als extra toevoeging: "er gebeurd niks" is wel heel weinig. Ben je al aan het debuggen geslagen? Zo te zien niet, of je vergeet dat te vermelden. Als je Programming Beleid eens wilt doorlezen dan zie je wat we van je vragen voordat je hier een topic opent.

Anyway: Wat gebeurd er als je op de knop drukt? Zo te zien haal je namelijk alleen maar een URL op en verder niks...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Ehm, is het de bedoeling dat het vanaf regel 44 niet meer ingesprongen is, zodat je daar in class-scope zit in plaats van in method (Listen.__init__) scope? Lijkt me namelijk niet...

Rustacean


Verwijderd

Je weet dat Python je identation verplicht maakt. Daar zitten nogal wat fouten in. Zo gaat je urllib.urlretrieve() niet uitgevoerd worden want die is niet onder de play() functie.

Dit script op deze manier zou fouten moeten geven trouwens.

En wat creepy zegt. Het enige wat je doet is een URL ophalen, je doet niks met de data daarvan of wat dan ook?

urllib.urlretrieve heeft drie argumenten, de eerste is het netwerk adres, de tweede is het bestand waar hij een kopie van het netwerk object moet opslaan en de derde is een callback functie. Nu is het enige wat je doet de stream kopieren naar een temporary file en je doet verder niks meer met radiofile. :)

code:
1
2
3
4
5
simon@aardbei:~$ python player.py 
  File "player.py", line 24
    radiofile=urllib.urlretrieve(url)
            ^
IndentationError: expected an indented block


Als ik alle indentationerrors fix krijg je dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env python

import re
import gobject
import pygtk
pygtk.require('2.0')
import gtk
import gnomevfs
import urllib
import distutils
import pygst

url="http://www.omroep.nl/radio3/live64.asx"
class Listen:

    def callback(self, widget, data):
        print "Je luistert naar %s" % data

    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def play(widget, data):
        radiofile=urllib.urlretrieve(url)

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.set_title("Radio luisteren")

        self.window.connect("destroy", lambda w: gtk.main_quit())

        vbox = gtk.VBox(False, 5)
        hbox = gtk.HBox(False, 5)
        self.window.add(hbox)
        hbox.pack_start(vbox, False, False, 0)
        self.window.set_border_width(5)

        frame = gtk.Frame("Gebruiksaanwijzing")
        label = gtk.Label("Luister nu naar 3FM door op luisteren te drukken!")
        frame.add(label)
        vbox.pack_start(frame, False, False, 0)

        frame = gtk.Frame("Luisteren")
        button = gtk.Button("Luisteren")
        frame.add(button)
        vbox.pack_start(frame, False, False, 0)
        button.connect("clicked", self.callback, "3FM")
        button.connect("clicked", self.play)

        self.window.show_all ()

def main():
    gtk.main()

if __name__ == "__main__":
    radio = Listen()
    main()


Welke werkt. Alleen doe je natuurlijk niks met je urllib.urlretrieve.

[ Voor 97% gewijzigd door Verwijderd op 08-08-2008 11:11 ]