Portál AbcLinuxu, 12. května 2025 10:07

Dotaz: Zapis znaku na /dev/sound/dsp

22.3.2008 14:51 Karel Maly
Zapis znaku na /dev/sound/dsp
Přečteno: 346×
Odpovědět | Admin
Dobry den

tento prikaz zapsany do konzole vygeneruje kratky zvuk:

echo "abcdefghijkl" > /dev/sound/dsp

Muzete mi prosim poradit jak ekvivalni akci naprogramovat v C? Dekuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.3.2008 15:52 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Otvoríš súbor, zapíšeš string, zavrieš súbor. Kde je problém?
23.3.2008 23:55 Karel Maly
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Dekuji, ale mohl byste by nekdo byt prosim trochu konkretnejsi? (tzn zdrojak:))
Luboš Doležel (Doli) avatar 24.3.2008 00:13 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Nejjednodušší kód bez kontrol ap.
FILE* f = fopen("/dev/sound/dsp", "w");
fputs("abcdefgh", f);
fclose(f);
24.3.2008 09:43 Karel Maly
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
No prave ze neco podobneho jsem zkousel a nefunguvalo mi to. Vam tento kod funguje?
24.3.2008 10:00 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
A proč by to nefungovalo ?

Schválně jsem to skoušel na F8 64b
[petr@soban ~]$ cat pokus.c
#include <stdio.h>

int main()
{
FILE* f = fopen("/dev/dsp", "w");
fputs("abcdefgh", f);
fclose(f);

    return 0;
}
[petr@soban ~]$ gcc pokus.c
[petr@soban ~]$ ./a.out
[petr@soban ~]$ 
No a v repráčcích to lupne :-)

Jinak co vám nefunguje ? Jakou chybu to vypíše ?
24.3.2008 16:25 Karel Maly
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Funguje diky, zkousil sjem si napsat program ktery by mel generovat delsi zvuk a ten by se navic mel menit, ale vysledek je pouze ten ze repraky kratce lupnout. Co je tam spatne?
#include stdio.h
#include stdlib.h

#define REPEAT 10000000

int main()
{
  FILE* f = fopen("/dev/dsp", "w");
  if (f == NULL)
  {
    printf("Nepovedlo se otevrit soubor.");
    return EXIT_FAILURE;
  }

  for (unsigned int kod = 0; kod < 256; kod++)
    for (int i = 0; i < REPEAT; i++)
      fputc(kod, f);

  fclose(f);

  return EXIT_SUCCESS;
}
Luboš Doležel (Doli) avatar 24.3.2008 16:35 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Musíte generovat nějaká rozumná zvuková PCM data. To, co děláte, jsou v podstatě stále náhodné bajty.
24.3.2008 18:59 Karel Maly
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
A jak vygeneruji nejaka rozumna PCM data? :)
24.3.2008 20:05 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
Zapoj mikrofon a chvíli z něj nahrávej :-) (cat /dev/dsp > /tmp/zvuk")

Pak ty data zase zapiš zpátky.
-- Nezdar není hanbou, hanbou je strach z pokusu.
24.3.2008 20:07 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
No spíš konstantní než náhodné. :-) Tohle žádný zvuk neudělá právě proto, že konstanta. Rozumná data je časový průběh amplitudy signálu (tedy pro tón o frekvenci x Hz to bude sinusovka s frekvencí x Hz). Konkrétní velikost (byte/2 byte/...) a znaménkovost jednoho samplu stejně jako samplovací frekvenci by mělo jít nastavit či zjistit příslušnými IOCTL na soubor zařízení.
24.3.2008 21:35 depka
Rozbalit Rozbalit vše Re: Zapis znaku na /dev/sound/dsp
pokud ti staci chrapteni zapisuj napriklad (char)(rand()%256)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.