Waarmee icecast2 slim oggjes voeren (of dummy sound device)?

Pagina: 1
Acties:

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 18:59
Ik heb sinds gisteren icecast2 en ices2 geinstalleerd en wat het streamen aangaat werkt het op zich perfect. Maar ik loop nog wel tegen wat ongemakken aan.

Wat perfect lukt is random laten spelen uit een vooraf gemaakte playlist (statisch dus), maar als ik me tussentijds bedenk van wat ik als volgende nummer wil hebben kan dat dus niet. Je kunt met ices2 ook een commando opgeven dat als resultaat het pad van een file geeft (script) zodat je buiten ices2 om iets kunt bouwen wat ervoor zorgt dat je mooi dynamisch de volgende track kunt bepalen en dat is precies waar ik mee bezig ben.

Als eerste heb ik een file in m'n audiodirectory waarin telkens het pad opgeslagen wordt; ices2 cat die file als ie weer een liedje nodig heeft, dat is geen probleem.

Een programma dat ik gekozen heb om m'n dynamische playlist bij te houden is cplay. In ~/.cplayrc heb ik het commando voor .oggs aangepast zodat hij een script aanroept genaamd oggplay. Dit script zet eerst het pad van de file in de file die vanuit ices2 gelezen wordt om het volgende nummer te bepalen, daarna wil ik graag dat het nummer in cplay wordt afgespeeld (zonder geluid!). Waarom dan nog afspelen? Da's voor de "synchronisatie", het naar die file schrijven van de locatie van het nummer duurt heel kort en als ik niet het nummer erna zou afspelen zou cplay zo door m'n playlist heenraggen zonder op ices2 te wachten. Het effect zou zijn dat zodra ices2 klaar is met het huidige nummer het laatste nummer uit de playlist van cplay genomen wordt omdat cplay veel sneller klaar is met het afwerken van de lijst dan dat ices2 over het afspelen van de nummers doet.

Hier komt nog bij dat ik naar m'n eigen stream wil luisteren. ogg123 is dus wat lastig aangezien ik dan een raar canoneffect door m'n speakers krijg (zowel cplay als beep die de stream speelt). Om een obscure reden decodeert ogg123 op topsnelheid als je 'm de null audio device laat gebruiken dus dat schiet niet veel op. mplayer -ao null doet wel wat ik ervan vraag.... maar als cplay bij het volgende nummer in de playlist aankomt laat ie het afweten.

Weet iemand hier iets slimmers voor? Een nepaudiodevice zou handig zijn (zodat ogg123 denkt dat ie muziek speelt), met perl iets bouwen om met ogginfo de lengte van de track te extraheren en daarna zoveel seconden als de track duurt te sleepen heb ik ook geprobeerd (ik ben alleen geen perl-held en het werkte alleen met paden zonder spaties erin; daarnaast liet cplay niet echt een duratie van het afspelen zien hoewel dat niet echt erg is). Speciaal voor het doel artsd aanschoppen en artsd zelf muten werkte op zich wel, alleen mute artsd weer niet volledig en hoor je toch nog zachtjes iets 8)7 ...

Als iemand weet hoe je \ om te escapen bij shellcommando's in perl of in perl intern kan sleepen: graag.
Als iemand weet hoe je ogg123 realtime met de null audio device laat decoden: graag.
Als iemand iets veel beters weet... graag :P .

Het maakt me echt niet veel uit wat het uiteindelijk gaat worden zodat ik dynamisch m'n streamplaylist ga bijwerken en tegelijk m'n eigen stream kan luisteren, zolang het maar niet met opname vanaf /dev/dsp gaat... want geluidjes die programma's ondertussen maken hoeven ze niet te horen natuurlijk... :/ ... (hoewel het WEL relaxed zou zijn als er een nep oss-device was waar je op op kon nemen maar niks naar de speakers stuurt en zo elk willekeurig geluid kunt streamen door die device te gebruiken).

Lange post misschien, ik ga als ik thuis ben weer verder prutsen, maar als jullie iets beters weten: graag :) .

❤️‍🩹 Bezuinigen op armen en zieken 🤕 ? Welnee, Zucmantaks, nu 💰 !


  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 18:59
Ik ben er intussen uit... dit is het script dat ik met cplay gebruik om de lengte van de ogg stilte te geven (en de naam van de ogg in een file te stoppen zodat ices2 'm kan vinden):

Perl:
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
#!/usr/bin/perl

use Shell qw(ogginfo, sleep);
use POSIX qw(ceil floor);

$track = $ARGV[0];

/* tracknaam wegschrijven */
open(DAT,">/mnt/data/audio/nexttrack") || die("Cannot Open File");
print DAT $track;
close DAT;

/* hoop gezeur dat vast handiger kan om escapekarakters voor bash toe te voegen */
$file = $track;
$file =~s/\\/\\\\/g;
$file =~s/ /\\ /g;
$file =~s/\\[/\\\\[/g;
$file =~s/]/\\]/g;
$file =~s/\'/\\\'/g;
$file =~s/\"/\\\"/g;
$file =~s/\(/\\(/g;
$file =~s/\)/\\)/g;

$info = `ogginfo $file`;

/* De tijdsinfo uit de uitvoer van ogginfo extraheren */
$timeinfo = substr($info, index($info, "Playback") + 17, rindex($info, "Average") - index($info, "Playback") - 19);

$minutes = substr($timeinfo, 0, index($timeinfo, "m"));
$seconds = substr($timeinfo, index($timeinfo, "m") + 2, 6);
$seconds += $minutes * 60;

/* Voor de nauwkeurigheid de gebroken seconden afpellen en wachten */
$rest = $seconds - floor($seconds);
$rest .= "s";

print ".";
`sleep $rest`;

$timer = floor($seconds);

/* de resterende lengte van de track in hele seconden wachten en elke keer een . afdrukken zodat cplay gaat tellen */
while($timer > 0) {
    print ".";
    `sleep 1s`;
    $timer--;
}

print"\n\nSilent playback ended.\n"; // als je niks afdrukt heeft cplay niet door dat je klaar bent

[ Voor 31% gewijzigd door Bananenplant op 01-03-2005 21:50 ]

❤️‍🩹 Bezuinigen op armen en zieken 🤕 ? Welnee, Zucmantaks, nu 💰 !