Ein neues Feature "APPEND-PAUSE" für fb2k?

Begonnen von anaono, 14. August 2013, 11:07:10

Vorheriges Thema - Nächstes Thema

anaono

Ein neues Feature "POSTGAP-NEW"

Ich möchte nach einem neuen Feature in, oder einem Plugin für, fb2k fragen:

========================================
Edit (15.08.2013 09:24, TagNamen geändert):

Das Audio-file-tag "POSTGAP-NEW" mit z.B. dem Wert "10.8" soll bewirken, dass eine zusätzliche Pause von 10,8 Sek. am Ende des Tracks angehängt wird, abhängig davon, ob der neue Menü-Punkt "Playback -> Play Postgap-new" an- oder ausgeschaltet ist.

Normalerweise wird vor einem laufendem Track ein weißes Dreieck angezeigt (in der Playliste). Während die Pause läuft, soll dieses Dreieck ersetzt werden, durch eine runter zählende Zahl; für das Bsp. "10.8": "10 9 8 ... 1" und dann schaltet foobar2000 weiter zum nächsten Track.

========================================

Weiß jemand, in welchem/n Forum/en ich danach fragen kann?

grimes

Das wäre eine nette Ergänzung zu meinem plugin Stop after album.
Da gibt es z.B. schon die Funktion "Gap tracks", die jeweils eine fest definierte pause hinter den tracks einfügt.

Mal schauen, ob ich Zeit finde das zu implementieren.

anaono

#2
Ja prima :)


Ich hatte meine Anfrage inzwischen auch hier eingestellt:

http://www.hydrogenaudio.org/forums/index.php?showtopic=102223


und hier hat sich eine kleine Diskusion entwickelt:

http://www.hifi-forum.de/index.php?action=browseT&back=1&sort=lpost&forum_id=54&thread=17408


grimes

#3
Zum Namen APPEND-PAUSE:
pause ist durch play/pause/stop schon belegt.
Gängig ist der Begriff Gap (Lücke, Zwischenraum). Zu Unterscheiden ist ein pregap und ein postgap.
In diesem Fall handelt es sich um ein postgap. Daher würde ich vorschlagen den Tag und den Menüeintrag "postgap" zu nennen.

Zum Countdown:
Das ist schwerer zu implementieren.
Im Wesentlichen müsste die plugin-interne Variable einer globalen foobar2000-eigenen Variablen %countdown% zugewiesen werden.
Keine Ahnung, ob das geht. Ich klammere dies vorerst mal aus.



fooamp

Kann mit jemand erläutern, wozu das Ganze überhaupt gut sein sollte.

anaono

#5
Zitat von: anaono in 14. August 2013, 15:34:40
und hier hat sich eine kleine Diskusion entwickelt:

Im Post #5 habe ich meine Motivation erläutert:

http://www.hifi-forum.de/index.php?action=browseT&forum_id=54&thread=17408&postID=5#5

2 Weitere Anwendungsbeispiele habe ich unter "2. Fall" und "3. Fall" beschrieben in:

http://www.hifi-forum.de/index.php?action=browseT&forum_id=54&thread=17408&postID=1#1



TomPro

Ein mögliches Beispiel:
Wenn ein "Alleinunterhalter" seine Playbacks für eine Show automatisch abfahren möchte und Zeit für Applaus und Ansagen mit einkalkuliert.

Als Technicker eines "Phil Collins" Double mache ich z.B. ähnliches:
Ich habe mir kurze Files erstellt mit ca. 10 sec Stille und im Namenstag ein Codewort untergebracht welches von einem WSH Script abgefragt wird und dann automatisch foobar nach dem File anhält. So können wir Titel hintereinander spielen oder aber Pausen für Ansagen generieren und ich muss immer nur auf Play drücken wenn's weitergehen soll


anaono

Zitat von: grimes in 14. August 2013, 18:40:08
Zum Namen APPEND-PAUSE: ... Daher würde ich vorschlagen den Tag und den Menüeintrag "postgap" zu nennen.

Prima, habe ich geändert

Was hälst Du von dem neuen Namen "Playback -> Play Postgap-new"?


Zitat von: grimes in 14. August 2013, 18:40:08
Zum Countdown: ... Ich klammere dies vorerst mal aus.

Ja, verstehe ich und es ist ja auch nicht wesentlich, sondern nur "nice to have".


----------

Ich hoffe Du bekommst keinen Schreck: Ich habe den Gedanken "Trennen von Postgap und eigentlichem Track" nochmal ausformuliert. Es ist etwas umfangreich geworden. Aber es baut auf dem einfachen Request aus dem Eingangsthread auf, ist also "abwärtskompatibel":

http://www.hifi-forum.de/index.php?action=browseT&forum_id=54&thread=17408&postID=1#1

Und fürs erste reicht es den "1. Fall" oder vielleicht noch den "2. Fall" zu implementieren.


----------

@TomPro: Danke für das weitere Anwendungsbeispiel :)

grimes

Erste Testversion im Anhang (nur für Mitglieder)


  • Stop after album v3.6

ZitatMenu | Playback | Control | Postgap (ON/OFF)

Der Tag heißt %POSTGAP%, die Angabe der Zeit ist in Millisekunden, d.h. 5000 = 5s.




anaono

Danke, super so schnell :)

Etwas verwirrend, dass fb2k während der Pause nichts anzeigt, aber das hattest Du ja angekündigt.

Was hälst Du von meiner Ausformulierung "Trennen von Postgap und eigentlichem Track"?

Um den 1. Fall daraus zu erfüllen schlage ich folgende Änderungen vor:

- den Tag %POSTGAP% umbenennen in %POSTGAP-NEW% (wegen dem 2. Fall aus "TvPueT")
- Für das Format ss.mm (Sekunden.Millisekunden) verwenden, also z.B. "5.00" für 5 Sek.
- und vielleicht der Name für den Menüeintrag: "Play Postgap-new" statt "Postgap"

Dann fehlt noch der "Countdown" und der 1. Fall ist fertig implementiert.

Einen Bug habe ich entdeckt:
Wenn der letzte Track (einer *.m3u-Playlist) zu Ende ist, wird er nach 10 Sek. automatisch neu gestartet.


PS:
Als ich eine PM schreiben wollte bekam ich von foobar-users.de die Fehlermeldung:
Ein Fehler ist aufgetreten!
Sie haben nicht die Berechtigung Private Mitteilungen zu versenden.
Hast Du vielleicht eine Idee, wie ich PMs schreiben kann?

grimes

Den vorgeschlagenen Änderungen stehe ich allesamt kritisch gegenüber.
Beispiel: Wenn es ein POSTGAP-NEW gibt, so fragt sich der Anwender wo ist das POSTGAP-OLD. Der Anwender ist verwirrt.
Play suggeriert, dass ein track gespielt wird... etc.
Millisekunden: Ist ein hoher Aufwand alles von Integer zu float umzustellen.
Zum Selbermachen: Sourcecode steht zur Verfügung.

Zum Bug:
Ich fürchte, da lässt sich nichts machen.
Sowohl bei stop_after_current als auch beim playlistenende wirft foobar2000 "stop_reason_eof".
"gap & play" basiert auf "stop_reason_eof". So wird dummerweise das playlistenende nicht ordnungsgemäß beendet sondern mit gap wiederholt.
Wenn jemand eine Idee hat?

(PM ab 10 Beiträgen)

fbuser

Zitat von: grimes in 15. August 2013, 17:19:10Millisekunden: Ist ein hoher Aufwand alles von Integer zu float umzustellen.
Wirklich? Es müßte doch reichen, die String-Eingabe zunächst in eine Float-Variable umzuwandeln, diese mit 1000 zu multiplizieren und das Ergebnis als Integer für die Millisekunden weiterzuverwenden.

Zitat von: grimes in 15. August 2013, 17:19:10Sowohl bei stop_after_current als auch beim playlistenende wirft foobar2000 "stop_reason_eof".
"gap & play" basiert auf "stop_reason_eof". So wird dummerweise das playlistenende nicht ordnungsgemäß beendet sondern mit gap wiederholt.
Wenn jemand eine Idee hat?

Das könnte in etwa so aussehen:

void on_playback_stop(play_control::t_stop_reason stopreason)
{
  switch(stopreason)
  {
    case play_control::stop_reason_eof:
    {
      size_t playlist;
      size_t index;
      static_api_ptr_t<playlist_manager>->get_playing_item_location(playlist,index); // index enthält letzten gespielten Track

     size_t count=static_api_ptr_t<playlist_manager>->playlist_get_item_count(playlist); // Anzahl der Playlist-Einträge ermitteln
     if(index+1<count) // der zuletzt gespielte Track war nicht der letzte Track in der Playlist
     {
       // pausiere
     }
     
      break;
    }
  }
}

anaono

#12
Zitat von: fbuser in 15. August 2013, 18:32:25
Zitat von: grimes in 15. August 2013, 17:19:10Millisekunden: Ist ein hoher Aufwand alles von Integer zu float umzustellen.
Wirklich? Es müßte doch reichen, die String-Eingabe zunächst in eine Float-Variable umzuwandeln, diese mit 1000 zu multiplizieren und das Ergebnis als Integer für die Millisekunden weiterzuverwenden.

Oder vielleicht so:
- den String z.B. "3.21" bei "." splitten ("3" und "21")
- den ersten Teil mit 1000 multiplizieren (== 3000)
- den zweiten Teil Ziffernweise auseinandernehmen ("21"\[0] und "21"[1])
- mit 100 und mit 10 multiplizieren (== 200 und == 10)
- und alles addieren (== 3210)

PS: "\[" soll eine "[" sein.


fbuser

Zitat von: anaono in 15. August 2013, 18:50:53
- den String z.B. "3.21" bei "." splitten ("3" und "21")
- den ersten Teil mit 1000 multiplizieren (== 3000)
- den zweiten Teil Ziffernweise auseinandernehmen ("21"\[0] und "21"[1])
- mit 100 und mit 10 multiplizieren (== 200 und == 10)
- und alles addieren (== 3210)
Sorry, aber das ist unnötig kompliziert.

grimes

Danke fbuser!

Ich habe mit deinem Code ein Problem. Wie mache ich einen Typ size_t* (index) zu size_t (count) kompatibel.

switch(p_reason)
{
case play_control::stop_reason_eof:
{
size_t* playlist;
size_t* index;
static_api_ptr_t<playlist_manager>()->get_playing_item_location(playlist,index); // index enthält letzten gespielten Track

size_t count=static_api_ptr_t<playlist_manager>()->activeplaylist_get_item_count (); // Anzahl der Playlist-Einträge ermitteln
if(index + 1 < count) // der zuletzt gespielte Track war nicht der letzte Track in der Playlist
{
  console::formatter() << "Test Count: " << count;
}
break;
}
}


liefert den folgenden Fehler:

1>------ Erstellen gestartet: Projekt: foo_stopafteralbum, Konfiguration: Release Win32 ------
1>  foo_stopafteralbum.cpp
1>foo_stopafteralbum.cpp(4811): error C2446: '<': Keine Konvertierung von 'size_t' in 'size_t *'
1>          Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
1>foo_stopafteralbum.cpp(4811): error C2040: '<': 'size_t *' unterscheidet sich von 'size_t' in Bezug auf die Anzahl vorgenommener Dereferenzierungen