Skocz do zawartości

Prosty Player Na Alsie (c++)


alpin19

Rekomendowane odpowiedzi

Witam

 

Na podstawie alsowego tutoriala napisałem prostego player'a:

#include <stdio.h>
    #include <stdlib.h>
    #include <alsa/asoundlib.h>
          
    main (int argc, char *argv[])
    {
        int i;
        int err;
        short buf[128];
        snd_pcm_t *playback_handle;
        snd_pcm_hw_params_t *hw_params;
    
        if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
            fprintf (stderr, "cannot open audio device %s (%s)\n", 
                 argv[1],
                 snd_strerror (err));
            exit (1);
        }
           
        if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
            fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
                 
        if ((err = snd_pcm_hw_params_any (playback_handle, hw_params)) < 0) {
            fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        if ((err = snd_pcm_hw_params_set_access (playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
            fprintf (stderr, "cannot set access type (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        if ((err = snd_pcm_hw_params_set_format (playback_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {
            fprintf (stderr, "cannot set sample format (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        if ((err = snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, 44100, 0)) < 0) {
            fprintf (stderr, "cannot set sample rate (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        if ((err = snd_pcm_hw_params_set_channels (playback_handle, hw_params, 2)) < 0) {
            fprintf (stderr, "cannot set channel count (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        if ((err = snd_pcm_hw_params (playback_handle, hw_params)) < 0) {
            fprintf (stderr, "cannot set parameters (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        snd_pcm_hw_params_free (hw_params);
    
        if ((err = snd_pcm_prepare (playback_handle)) < 0) {
            fprintf (stderr, "cannot prepare audio interface for use (%s)\n",
                 snd_strerror (err));
            exit (1);
        }
    
        for (i = 0; i < 10; ++i) {
            if ((err = snd_pcm_writei (playback_handle, buf, 128)) != 128) {
                fprintf (stderr, "write to audio interface failed (%s)\n",
                     snd_strerror (err));
                exit (1);
            }
        }
    
        snd_pcm_close (playback_handle);
        exit (0);
    }

 

Kiedy próbuję go kompilować dostaję taki wynik:

 

[root@zanegi mpeeg]# g++ player.cpp -o player
player.cpp:69:2: warning: no newline at end of file
player.cpp: In function ‘int main(int, char**)’:
player.cpp:13: error: expected initializer before ‘if’
player.cpp:19: error: ‘hw_params’ was not declared in this scope
player.cpp:24: error: ‘hw_params’ was not declared in this scope
player.cpp:29: error: ‘hw_params’ was not declared in this scope
player.cpp:32: error: expected `;' before ‘exit’
player.cpp:34: error: ‘hw_params’ was not declared in this scope
player.cpp:39: error: ‘hw_params’ was not declared in this scope
player.cpp:44: error: ‘hw_params’ was not declared in this scope
player.cpp:50: error: ‘hw_params’ was not declared in this scope
player.cpp:66: error: expected `;' before numeric constant
player.cpp:66: warning: statement is a reference, not call, to function ‘exit’

 

:(

 

Odnośnik do komentarza
Udostępnij na innych stronach

Gość amdfanatyk

w linii 44 zamień 44100 na (unsigned int*)44100.

 

co to by mialo byc? z tego co wiem nie ma zmiennych o nazwach liczbowych, zatem dlaczego 44100 chcesz rzutowac na wskazanie na uint? chyba, ze 44100 to adres jest.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość amdfanatyk

ludzie wezcie sobie jakis program najpierw napiszcie bo takie pierdoly jak tu wypisujecie to sie plakac chce i rece opadaja, jakies podstawy c/c++ by sie przydaly, wiedziec co to wskazanie, referencja;

 

unsigned int var = 1234;
unsigned int * pVar = &var;

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...