Zeneszerver több csatornával konzolból

Fórumok

Sziasztok,

egy elég érdekes problémával nézek szembe. Egy több napos rendezvényre kellene multimédiát szolgáltatni és a következő lenne a feladat:

Zenét kellene szolgáltatni egy szerver gépen, méghozzá konzolból, de mintha ez nem lenne elég, PHP-ból kellene tudni irányítani és ráadásul az egészet minimum kétcsatornásan, mert a zene mellett az announce üzenetek mennének a másikon.

A terv az, hogy egy webes felület (amit még elkészítek) kezelné az egészet egy szerveren és a különböző munkaállomásokról kerülnének be az announce-ok és a zenék a lejátszási sorba.

Tehát amire szükségem lenne, az egy elég alacsony szinten konfigurálható zenelejátszó daemon.

Amit eddig találtam a témában, az vagy konzolos, de rendes "grafikus" felületes program, illetve ráakadtam az mpd-re (music player daemon) de az nem volt elég okos.

Kérdés: ismertek ilyen szoftvert vagy nekem kell megoldani? Esetleg lehetőség arra, hogy két párhuzamosan futó program kimenetét összemixeljem?

Ha fontos, Ubuntu Server és ALSA fut a gépen. Esetleg ha valaki otthon van a témában az is érdekelne, hogy hogy tudok a 7.1-es hangkártyámon különböző csatornákat megcímezni.

Köszi

J

Hozzászólások

hi, a VLC, és a IceCast jutott eszembe; mindkettő nagy tudású, amennyire tudom a VLC konzolból szépen vezérelhető.

Köszi, ha az alsaplayer nem teszi meg, akkor megpróbálom... egyelőre úgy néz ki, hogy menni fog. Sajnos igazából úgy kellene megcsinálni, hogy nekiállok C++-ban kódolni, mert az ütemezőnek is gyorsabban kellene futnia, de most csak a PHP-s megoldásra lesz szabad kapacitásom.

Esetleg érdekel valakit az eredmény egyébként? Mert ha igen, akkor csinálok belőle szép opensource projektet.

icecast+madplay? mi ilyet hasznalunk, az egyetlen problemaja, ha egy epp lejatszott tracket kell megszakitani, es mas szamra lepni, ekkor dobja az osszes klienst, bar ez ellen elvileg lehetne az icecast configban tenni vmit. konzolra sajnos meg jobbat en sem talaltam, ami valoban elfutna X nelkul, es php-bol tudnad vezerelni.

Igen, ez lenne a történés most, például alsaplayerrel és szépen működik is. Most már csak két problémám van ezzel kapcsolatban:

1. Hogyan tudom a 7.1-es hangkártyám különböző csatornáit megvezérelni? (Akár külön hangkártyaként látva)

2. Hogyan tudok Linux alatt (akár saját programozással) másodpercnél pontosabban ütemezni? (SIG_ALARM csak másodperces beállítással van tudtommal.)

Köszönöm

Update: az első megoldódott. Sajnos csak 2+2 csatorna, de jobb mint a semmi. ~/.asoundrc

pcm.dshare {
    type dmix
    ipc_key 2048
    slave {
	pcm "hw:0"
	rate 44100
	channels 4
    }
    bindings {
	0 0
	1 1
	2 2
	3 3
    }
}

pcm.frontx {
    type plug
    slave {
	pcm "dshare"
	channels 4
    }
    ttable.0.0 1
    ttable.1.1 1
}

pcm.rearx {
    type plug
    slave {
	pcm "dshare"
	channels 4
    }
    ttable.0.2 1
    ttable.1.3 1
}

Kis magyarázat: a hivatalos doksi alapján létrehoztam három virtuális PCM eszközt. Az első a DMIX plugint használja és beleküldi a kimenetet a hangkártyába (hw:0). A második blokk (frontx) kiküldi az első két csatornáját a dmix-nek (0->0, 1->1), a harmadik (rearx) pedig az első két csatornáját hátsó két csatornaként küldi a dmix-nek (0->2, 1->3). Ezzel kaptam két darab kétcsatornás hangkártyát.

Már néztem, a webes felületet már saját magam szeretném megírni.

Közben találtam egy (fél) megoldást. Az alsaplayer dmixen keresztül húzva tudja, amit nekem kell. A lényeg az, hogy indítok két sessiont és azokat tudom is irányítani.

Ezek után már csak az a feladat, hogy megfelelő időpontban lefuttassam cronból a vezérlőrendszert, ami állítgatja a hangerőt, bemondja a dolgokat, stb.

Még nagyon kisérleti az ötlet, de úgy tűnik, menni fog. Ja és mielőtt elfelejtem, kell hozzá az alsaplayer-text csomag.

Az mplayernek van olyan interface-e, amikor stdio-n kapja a parancsokat/adja a visszajelzest.. (a grafikus frontendek is ezt hasznaljak)
Elonye, hogy rengeteget tud, sok formatumot ismer, stb.. de gondolom nem kell bemutatni..
man-ban van pelda a 7.1-re (lehet, hogy csak 5.1)
---------------------
Q: Why do real Java programmers wear glasses?
A: Because they don't C#.

Beleütköztem egy szorosan ide kapcsolódó problémába. PHP-ból a következő paranccsal próbálok indítani lejátszást:

system("./play " . escapeshellarg($this->sessionname) . " " . escapeshellarg($song) . "");

A play file tartalma a következő:


#!/bin/bash
echo $1
echo $2
alsaplayer -d dmix -i text -s "$1" "$2" &

Ennek ellenére a lejátszás elindítása után a program szinte azonnal visszatér, ami értelemszerűen nem cél. Szerettem volna háttérben elindítani. Van erre megoldás?

Adott esetben azt is el tudom képzelni hogy más alapokra helyezzem az egészet, ötletek jöhetnek.