Ljud ut i Linux GCC?
Ljud ut i Linux GCC?
Vill skicka PCM ljuddata i form av en följd av buffers med olika längd som då skall spelas upp. Skickas inget skall där inte kräkas upp underrun errors o,dyl., bara tystna tills mera data skickas.
Har gjort detta i ett annat OS tidigara, där var det bara att skicka pekare till buffer och dess längd. När en buffer var klar generarades ett event som talade om detta. Finns motsvarande API i Linux? Vill ha så lite "hjälpsamhet" från systemet som möjligt.
Har gjort detta i ett annat OS tidigara, där var det bara att skicka pekare till buffer och dess längd. När en buffer var klar generarades ett event som talade om detta. Finns motsvarande API i Linux? Vill ha så lite "hjälpsamhet" från systemet som möjligt.
Re: Ljud ut i Linux GCC?
Du ska nog kolla på Alsa...
http://cboard.cprogramming.com/linux-pr ... files.html
Är dock osäker på om du kan få ett event dock...
Edit: för undvika underrun skulle du kunna skicka 0:or tills du har ny data...
http://cboard.cprogramming.com/linux-pr ... files.html
Är dock osäker på om du kan få ett event dock...
Edit: för undvika underrun skulle du kunna skicka 0:or tills du har ny data...
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ljud ut i Linux GCC?
Eftersom jag är så jävla lat skulle jag ta till tricket att använda system() och låta något befintligt program spela upp buffrarna. Alltså, skapa en fil med ljuddata och sedan spela upp den med ett befintligt program. Jag vet inte ens vad jag har för system för ljud i min dator. ALSA? Jack? Något annat?
Här finns en del info: https://jan.newmarch.name/LinuxSound/
Edit: Lite ALSA: http://www.linuxjournal.com/article/6735?page=0,0
Här finns en del info: https://jan.newmarch.name/LinuxSound/
Edit: Lite ALSA: http://www.linuxjournal.com/article/6735?page=0,0
Re: Ljud ut i Linux GCC?
Vill inte hålla på och kladda med filer på disk. Data skall skickas direkt till ljudkortet. Ljudhanteringen är PulseAudio. Vill helst att denna används så att flera program kan vara öppna mot ljudkortet samtidigt.
Hur fungerar det utan något event att tala om när buffern är fri? Det måste givetvis vara en non-blocking funktion för att skicka buffern till systemet.
Det allra enklaste är kanske att återanvända befintlig kod och köra denna under Wine... Fast jag vill givetvis helst ha native Linux!
Hur fungerar det utan något event att tala om när buffern är fri? Det måste givetvis vara en non-blocking funktion för att skicka buffern till systemet.
Det allra enklaste är kanske att återanvända befintlig kod och köra denna under Wine... Fast jag vill givetvis helst ha native Linux!
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Ljud ut i Linux GCC?
man borde kunna skicka det direkt till /dev/audio i rawformat utan att låta det landa på disk, om du inte vill det...
vet inte exakt vad du gör men typ:
sox soundfile.wav -t raw -r 8012 -u -b -c 1 | cat > /dev/audio
kanske kan ge någon ledtråd.
sox ovan konverterar en ljudfil men direkt till ljudkortet.
förutsatt att det audiokortet finns som /dev/audio på burken.
vet inte exakt vad du gör men typ:
sox soundfile.wav -t raw -r 8012 -u -b -c 1 | cat > /dev/audio
kanske kan ge någon ledtråd.
sox ovan konverterar en ljudfil men direkt till ljudkortet.
förutsatt att det audiokortet finns som /dev/audio på burken.
Re: Ljud ut i Linux GCC?
Ser ut att blir PulseAudio. Där finns både ett enkelt API med blocking calls som är lika enkelt som att skriva en file och ett mera avancerat som påminner om ett annat OS. Kanske går att använda blocking på en modern dator och hinna skapa nästa block så snabbt att det inte märks, annars får det bli lite läsande av stökig dokumentation för det avancerade alternativet. De som skriver sådant är dessvärre mästare i att få det enkla att se ut som en avhandling i kvantfysik...
Re: Ljud ut i Linux GCC?
mha esound kan man mixa ljud från flera klienter som vill använda samma ljudutgång...
Re: Ljud ut i Linux GCC?
Hur ser "tyst" PCM data ut? Nollor? Skulle man inte kunna fylla i med det när det inte finns något att spela upp.
Kod: Markera allt
någotsomgörPCM|aplay -f S16_LE -r 44100 -c 2
Re: Ljud ut i Linux GCC?
Kunde inte motstå denna dumhet men jag ursäktar mig med att det är min första publicerade musikaliska komposition. Nördmusik.
Varsågod:
Varsågod:
Kod: Markera allt
#include <stdio.h>
#include <math.h>
#include <unistd.h>
/* Kompilera: */
/* gcc musik.c -lm */
/* Spela: */
/* a.out | aplay -f S16_LE -r 44100 -c1 */
int
main ()
{
int i, k, ut;
double t[24];
for (i = 0; i < 12; i++)
{
t[i] = 1.0 * exp (1.0 * i / 12.0 * log (2));
}
{
double c = 1, d = t[2], e = t[4], f = t[5], g = t[7], a = t[9], h = t[11];
double m[24] =
{ c, e, g, a, t[10], a, g, e, c, e, g, a, t[10], a, g, e, c };
for (i = 0; i < 180000; i++)
{
k = (i / 4000) % 24;
ut = 8000 * exp (-1.0 * ((double) (i % 4000) / 2000.0)) *
((1.0 + sin (m[k] * 3.1416 * i / 80.0))
+ (1.0 + sin (3 * m[k] * 3.1416 * i / 80.0)));
write (1, &ut, 4);
}
}
}