1) xxd -- narzędzie pozwala konwertować pliki binarne do postaci szesnastkowej, m.in. do tablicy "c" czy do plaintekstu.
2) Myślę, że trochę za bardzo kombinujesz.
Większość playerów ma możliwość pobierania danych wejściowych ze standardowego wejścia.
Jeżeli już chcesz generować strumień dźwięku w swoim programie i odtwarzać go jakimś playerem, to najłatwiej jest uruchomić go jako proces potomny i przekierować jego standardowe wejście do rodzica przez pipe'a. Potem wystarczy rodzicem wysyłać dane w odpowiednim formacie (który najczęściej możesz wybrać przez parametry uruchomienia).
mplayer zdaje się ma taką opcję, podobnie jak aplay (z pakietu alsa-utils).
Coś jak w przykładzie poniżej (skopiowałem go z internetu dlatego ten przykład odtwarza wideo, ale idea jest taka sama):
cat /dev/video1 | mplayer -cache 1024 -
player -- mplayer, aplay -- możesz uruchomić w swoim programie, podobnie stworzyć pipe'a.
Jeżeli chcesz "wszyć" dane sampli do programu zamiast czytać z pliku możesz użyć programu xxd, wygenerować tablicę i przepisywać ją do pipe'a. Ale taka tablica może być bardzo duża.
3) Możesz zainteresować się biblioteką libasound i odgrywać pliki przez API alsy. Jeżeli wystarczy Ci odgrywanie nieskompresowanych sampli (albo dynamicznie generujesz dźwięk) taki program nie jest skomplikowany. Są nawet gotowe przykłady.
Np. spójrz na to:
https://gist.github.com/ghedo/963382