Beiträge von redeagle

    Die vermuteten Probleme sind alle aufgetreten.
    Beim beenden der Verbindung zu Icecast, beendet Icecast auch alle verbindungen zu den Listenern. Das macht diese Lösung nicht nur im Code hässlich.
    Die Lösung war entsprechend etwas aufwändiger:


    mp3 Dateien sind in unabhängige Teile zerlegt - Frames. Jeder Frame enthält ein paar millisekunden audio material.
    Um nun einen pausierbaren Stream bereit zu stellen reicht es nicht aus, einfach ein paar kilobyte aus der datei zu laden und zu Icecast zu senden. Man muss die Datei Frameweise übertragen.
    Wenn jetzt der Stream pausiert werden soll, kann man einfach anstatt des nächsten Frames aus der mp3-Datei einen Frame übertragen, der nur Stille enthält.


    Bei diesen stillen Frame muss man darauf achten, dass er exakt die Codierung (bitrate, mode) hat, wie auch die Frames aus den mp3-Files.
    Ich habe einen solchen Frame wie folgt erstellt:

    Bash
    ffmpeg -filter_complex aevalsrc=0 -acodec libmp3lame -ab 320k -t 1 monosilence.mp3
    ffmpeg -i monosilence.mp3 -ab 320k -ac 2 stereosilence.mp3


    Dann konnte ich mit dem Code, den ich schrieb um eine mp3-Datei Frameweise einzulesen den 1. Frame aus der stereosilence.mp3 extrahieren. (Code ist unten verlinkt)


    Der algorithmus sieht nun wie folgt aus:


    Code
    for each frame in mp3-file
        if not muted
            stream frame
        else
            stream silence


    Hier noch drei interessante Links die mir geholfen haben das ganze zu implementieren:

    Und zuletzt noch der daraus entstandene Code:

    Hi,


    Ich habe folgendes Problem, bzw folgenden Wunsch:


    Ich streame mp3 dateien mithilfe der Bibliothek libshout zu einem Icecast Server.


    Jetzt würde ich gerne die Musik pausieren. Wie geht man da am besten vor?



    Idee 1: Statt der Chunks aus der mp3 einfach andere Daten an Icecast senden.
    Problem: Ich weiß nicht an welcher Stelle der mp3-Datei, absgesehen von dem Offset der Rohdaten, ich bin. Irgendwann irgendwelche daten oder auch nur eine Sekunde Stille einspielen würde den Decoder des Zuhörers stören.


    Idee 2.1: Komplett die Verbindung zu Icecast beenden.
    Problem: Sehr hässlich und unelegant.


    Idee 2.2: Einfach aufhören die Daten zu senden. Icecast beendet dann die Verbindung und ich bekomme ein Timeout error.
    Problem: Noch schlimmer als Idee 2.1


    Idee 3: Den angebrochenen Song zuende streamen, und dann eine Sekunde Stille streamen bis das pausieren aufgehoben wurde.
    Problem: Man verzögert die Reaktion um die Zeit bis zum Ende des Lieds, anstatt nur um die Größe der Buffer.



    Habt ihr weitere Ideen, oder Erfahrung mit diesem Problem?

    Ich habe jetzt noch ein wenig mit den Layouts herumgespielt und auch an der Testapp noch etwas geändert.
    Solange ich setProgress vor dem Zusammenbau des GUIs anwende funktioniert es in beiden fällen so wie es soll. Wende ich setProgress zur Laufzeit, wenn ich z.B. auf einen Button klicke, wird die original SeekBar korrekt gesetzt, die Vertikale nicht.


    m( Während ich diese Antwort schrieb habe ich die Lösung gefunden.
    Den Code für die vertikale SeekBar habe ich auf stackoverflow gefunden. Weiter unten wird eine Lösung für mein Problem beschrieben :-[


    Trotzdem Danke für die Hilfe.

    FILL_PARENT geht im ersten Code nicht, weil die Vertikale SeekBar dann einen Button darunter überdeckt. (wurde in diesem Thread thematisiert :))


    Das Problem ist auch weiterhin, dass die LayoutParams-Klasse in meinem Testprogramm weder das weight-Attribut noch den entsprechenden Constructor anbietet.
    Wie kann das sein? Beide Projekte nutzen die selbe Java und Android-API (2.3.3) Version.


    Das weight-Attribut ist jedenfalls jetzt der vermutlich einzige unterschied, wobei ich der LayoutParams-Klasse auch nicht wirklich traue. Es scheint ja offensichtlich eine andersartige Klasse zu sein…

    Starte Eclipse mal von der Konsole aus. Vielleicht wird dort irgendein Fehler ausgegeben.


    Ich hatte damals mit Kubuntu 11.10 64bit auch sehr viele Probleme - eclipse hatte ich dort aber nie laufen, aber andere Programme crashten ständig. Die Qualität von (K)ubuntu war recht mies. Mit Fedora 15 64bit und Eclipse 3.6.2 habe ich bisher keine Probleme.

    Hm… merkwürdig


    Ich habe folgendes, einfaches Testprojekt angelegt:



    Sowohl die Horizontale als auch die Vertikale SeekBar verhalten sich wie erwartet. Der Fehler tritt nicht auf.
    Dann wollte ich einfach mal den SeekBars die gleichen Einstellungen geben wie im obigen, fehlerhaften, Code. Allerdings hat in diesem Testprogramm die Klasse LayoutParams kein weight-Attribut ?(
    Warum? Es ist doch in beiden Fällen die selbe Klasse…

    Hi


    Ich möchte beim "Klicken" auf einen Button eine SeekBar auf einen definierten Wert setzen.


    Java
    public void onClick(View v)
        {
    		if(v != this.GUI_fixpos) return;
    		
    		this.GUI_volume.setProgress(this.SavedVolume);
    	}


    Allerdings bekomme ich dann folgendes Resultat:


    Der gelbe Balken ist an der richtigen Position, allerdings wird der Schieber auf 0 gesetzt.
    Wie kann ich das Problem beheben? Im Internet wird immer nur von setProgress gesprochen, aber das reicht offensichtlich nicht :)


    Die Konfiguration der SeekBar:

    Ich kenne mich tatsächlich mit Mikrocontrollern aus, aber ein aufwändiges Heimkino-System habe ich nicht :) Was mein Laptop mir bietet ist ausreichend - da ist ne super Soundcard drin, mehr brauche ich nicht :D

    Hi


    Habe mich gerade spontan registriert da ich vor zwei Tagen angefangen habe Apps für Andorid zu schreiben :)


    Ich Programmiere schon länger in Assembly, C und C++. Mit Java habe ich allerdings noch keine Erfahrung und muss daher neben der Android-API auch mit der Sprache kämpfen, vor allem weil man sich doch etwas eingeschränkt fühlt wenn man zuvor nur OOP-Erfahrungen mit C++ gemacht hat.


    Ich besitze ein Samsung Galaxy S plus mit Android 2.3.3 und bin äußerst zufrieden damit :). Angefangen Apps zu schreiben habe ich, weil ich ein paar dinge des GUIs vom Linux meines Laptops auslagern möchte. Aktuell versuche ich einen Mixer zu Implementieren der per WLAN auf den PulseAudio-Server meines Linux-Laptops zugreift und darüber die Lautstärken der einzelnen Anwendungen steuern kann. - Quasi ein externes Mischpult für Arme :D


    mfg.: redeagle

    Hi




    Ich möchte ein Widget(?) erstellen, dass das Gesamte View ausfüllt in dass es hineingepackt wird. Dieses Widget besteht aus drei Teilen: Einem TextView welches einen Titel enthalten soll, eine vertikale SeekBar ( http://stackoverflow.com/a/7341546 ) und ein Button. Das TextView soll ganz oben, der Button ganz unten sein, der platz dazwischen soll von der SeekBar ausgefüllt werden. Setze ich die Höhe der SeekBar allerdings auf FILL_PARENT so wird diese bis nach ganz unten ausgedehnt sodass der Button nicht mehr zu sehen ist.


    Wie löse ich dieses Problem? Ist das LinearLayout bereits das Problem?




    ps.: Ich hoffe ich habe mich gut genug ausgedrückt - Ich habe erst vor zwei Tagen mit der App-Entwicklung auf Androids begonnen weshalb mir die Fachausdrücke noch nicht so geläufig sind :)


    mfg.: redeagle