Ljud ut i Linux GCC?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Ljud ut i Linux GCC?

Inlägg av Marta »

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.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Ljud ut i Linux GCC?

Inlägg av Micke_s »

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...
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Ljud ut i Linux GCC?

Inlägg av lillahuset »

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? :D

Här finns en del info: https://jan.newmarch.name/LinuxSound/

Edit: Lite ALSA: http://www.linuxjournal.com/article/6735?page=0,0
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Ljud ut i Linux GCC?

Inlägg av Marta »

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!
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Ljud ut i Linux GCC?

Inlägg av lillahuset »

RAMdisk?
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Ljud ut i Linux GCC?

Inlägg av svanted »

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.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6889
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Ljud ut i Linux GCC?

Inlägg av Marta »

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...
svanted
Inlägg: 5082
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Ljud ut i Linux GCC?

Inlägg av svanted »

mha esound kan man mixa ljud från flera klienter som vill använda samma ljudutgång...
Användarvisningsbild
maDa
Inlägg: 4073
Blev medlem: 11 november 2005, 22:13:16
Ort: Malmö
Kontakt:

Re: Ljud ut i Linux GCC?

Inlägg av maDa »

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
SvenW
Inlägg: 1116
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Ljud ut i Linux GCC?

Inlägg av SvenW »

Kunde inte motstå denna dumhet men jag ursäktar mig med att det är min första publicerade musikaliska komposition. Nördmusik.
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);
      }
  }
}
Skriv svar