C kódban mp3 lejátszás fade-in/out effekttel
2019-02-22T11:23:20+01:00
2019-02-24T09:06:02+01:00
2022-08-11T10:35:30+02:00
b10up
Sziasztok!

Egy Raspberry Pi 3B-n kellene mp3-at lejátszanom. 
C (vagy C++) nyelven fogom írni a kódot, viszont nehézségekbe ütköztem. 
Korábban simán felparaméterezve indítottam egy cvlc-t, ha ilyesmi kellett, ami lejátszás végén bezáródott. Most viszont arra lenne szükségem, hogy 2 mp3 fájlt úgy játsszak le, hogy ha egy esemény érkezik, az egyik 2 másodperces fade out effekttel megálljon, de ez alatt a következő már fade innel induljon el. 

Ilyesmire van valakinek ötlete, hogy merre induljak el? A válaszokat előre is köszönöm
Mutasd a teljes hozzászólást!
Ugyan nem előreszámítható, de ki lehet éppen próbálni, hogy a pi saját szoftveres framework-je mit tesz abban az esetben, ha kettő programot egymásra nyitsz, és mindkettő hangot játszik le. Az én tippem, hogy fade-elni nem fog, csak egymásra tolja őket. Ha 2 másodperc helyett leszeded fél másodpercre az időablakodat, aki hallgatja, talán fel sem figyel rá. Az átlag népek felületesek, nem foglalkoznak részletekkel. Pláne, ha a szokatlan esemény nem tart sokáig. Kicsit csúnya, de nagyon sokkal kevesebb munka lenne. És a nagyon sokkal kevesebbet úgy értem, hogy csak órák a hónapok helyett (scriptből indítani következő lejátszót, várni kicsit, pid-et felszedni valami szöveg file-ból, arra kill-t küldeni, aztán régi file-t törölni, új pid-et kiírni a régi helyére, és kész). Döntsd el, megérnek-e neked annyit a részletek, vagy sem.
Mutasd a teljes hozzászólást!


  • Ilyesmire van valakinek ötlete, hogy merre induljak el?

    Google.
    Mutasd a teljes hozzászólást!
  • Az mp3 frame-ekből áll. Elejétől a végéig. Wiki ismeri, olvasgatsz róla. File megnyitása és olvasása linux alatt megint csak ismert, temérdek sok a példa neten. Frame-enként olvasod, dekódolod, lesz pcm stream-ed. Dekódolásra kotorsz akármit. Példa: ( C\C++ open source Mp3 to PCM convertor ), hirtelen első találat google-el, de van temérdek sok egyéb is. A hangerősség egy abszolút hangerősségbe van belemappelve, amit egyáltalán ki lehet küldeni hangszóróra. Azon keresztül tudsz halkítani / hangosítani. Ha érkezik az eseményed, elkezded halkítani az előzőt, aztán ha nullára ért, le is kapcsolod. A másik stream-et eseménynél elkezded, és folyamatosan hangosítod, míg végül már csak azt játszod teljes hangerővel.

    Gyors áttekintésnek. Kellemes szórakozást.
    Mutasd a teljes hozzászólást!
  • Ezzel kezdtem, de nem vezetett eredményre. Mindenhol az általam is használt forkolós módszert látom, hogy meghívnak egy másik programot. Amivel nincs baj, csak nem tudom, hogyan lehetne lejátszás közben szabályozni a hangerejét csak annak az egy lejátszónak.
    Mutasd a teljes hozzászólást!
  • Köszönöm, beleásom magam
    Mutasd a teljes hozzászólást!
  • Ugyan nem előreszámítható, de ki lehet éppen próbálni, hogy a pi saját szoftveres framework-je mit tesz abban az esetben, ha kettő programot egymásra nyitsz, és mindkettő hangot játszik le. Az én tippem, hogy fade-elni nem fog, csak egymásra tolja őket. Ha 2 másodperc helyett leszeded fél másodpercre az időablakodat, aki hallgatja, talán fel sem figyel rá. Az átlag népek felületesek, nem foglalkoznak részletekkel. Pláne, ha a szokatlan esemény nem tart sokáig. Kicsit csúnya, de nagyon sokkal kevesebb munka lenne. És a nagyon sokkal kevesebbet úgy értem, hogy csak órák a hónapok helyett (scriptből indítani következő lejátszót, várni kicsit, pid-et felszedni valami szöveg file-ból, arra kill-t küldeni, aztán régi file-t törölni, új pid-et kiírni a régi helyére, és kész). Döntsd el, megérnek-e neked annyit a részletek, vagy sem.
    Mutasd a teljes hozzászólást!
  • Egymásra tudok nyitni 2 lejátszót, egyszerre szólnak. Itt az lenne a lényeg, hogy mikor az egyik mp3 lejátszását le kell zárni, akkor a hangerejét le tudjam venni nullára.
    Közben néztem, az mplayer parancssorban futtatva is elvileg tud hangerőszabályozást. Most kérdés az, hogy esetleg ha ezt forkolom C-ben, utólag tudok-e neki parancsokat beküldeni.
    Mutasd a teljes hozzászólást!
  • Úgy látom, az mpg321-et szokás javasolni. Ennek nyílt a forráskódja: e3c/mpg321  - és egy kicsit belekotorászva az is kiderül, hogy van valami "remote" opciója (e3c/mpg321 ), ahol parancsok adhatók neki, többek közt a hangerőre vonatkozóan is ("G" vagy "GAIN").

    Szerk: látom cocoya3 is véletlenül olyat javasolt, amiben áttételesen ez a forrás tűnik fel, de vele ellentétben nem javasolnám, hogy te próbálj meg MP3-at dekódolni, mert az egyrészt nehéz, másrészt még le is kell utána játszani, ami szintén nehéz. Szóval első körben a remote-ra menj rá, második körben meg az mpg321-et próbáld módosítani. Az előbbihez valószínűleg nem is kell sajátot fordítanod, inkább a dokumentációt kell hozzá átnyálazni. A módosításhoz nyilván le is kell tudni fordítani.
    Mutasd a teljes hozzászólást!
  • Az írta, C programot fog írni. A figyelmeztetést tőlem is megkapta, a többit illetőleg meg talán nem azért vagyunk itt, hogy programozást tiltsunk meg bárkinek 
    Mutasd a teljes hozzászólást!
  • Végül sikerült megoldani kísérleti szinten. A fade hatás muszáj, mert egy szabadulószobához készül, de abban egyetértek, hogy sokakat nem zavarna a hirtelen váltás.

    Úgy oldottam meg, hogy forkolva elindítom az mplayert -volume 100 -volstep 1 paraméterrel, végtelen ismétlésben, és mikor jön az esemény (Raspberry GPIO bemenet), akkor elindítok még egyet, csak volume 0 paraméterrel. Amint ez megvolt, egy for ciklus százszor lefut, az elsőnek a / karaktert küldi el (halkítás), másiknak a *-ot (hangosítás), végül bezárja azt, amelyik le lett halkítva.

    Köszönöm mindenkinek a tippeket!
    Mutasd a teljes hozzászólást!
abcd