-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmusik_daemon.c
89 lines (75 loc) · 1.9 KB
/
musik_daemon.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "deamon.h"
#include "alsa.h"
#define MUSIKFILE "/home/<USER>/<MORE_PATH>/<File>.wav"
unsigned char *WavePtr;
snd_pcm_t *PlaybackHandle;
static const char SoundCardPortName[] = "plughw:1,0";
unsigned char WaveChannels;
unsigned short WaveRate;
unsigned char WaveBits;
int
main()
{
int res;
int ttl=6000;
int delay=600;
if( (res=daemonize("musik-deamon","/tmp",NULL,NULL,NULL)) != 0 )
{
fprintf(stderr,"error: daemonize failed\n");
exit(EXIT_FAILURE);
}
while( ttl>0 )
{
//daemon code here
//#######################################################################
//No wave data loaded yet
WavePtr = NULL;
if (!waveLoad(MUSIKFILE)) //Load the wave file
{
register int err;
//Open audio card we wish to use for playback
if ((err = snd_pcm_open(&PlaybackHandle, &SoundCardPortName[0], SND_PCM_STREAM_PLAYBACK, 0)) < 0)
{
syslog(LOG_NOTICE,"Can't open audio %s: %s\n", &SoundCardPortName[0], snd_strerror(err));
}
else
{
switch (WaveBits)
{
case 8:
err = SND_PCM_FORMAT_U8;
break;
case 16:
err = SND_PCM_FORMAT_S16;
break;
case 24:
err = SND_PCM_FORMAT_S24;
break;
case 32:
err = SND_PCM_FORMAT_S32;
break;
}
//Set the audio card's hardware parameters (sample rate, bit resolution, etc)
if ((err = snd_pcm_set_params(PlaybackHandle, err, SND_PCM_ACCESS_RW_INTERLEAVED, WaveChannels, WaveRate, 1, 500000)) < 0)
{
syslog(LOG_NOTICE,"Can't set sound parameters: %s\n", snd_strerror(err));
}
else //Play the waveform
{
play_audio();
}
//Close sound card
snd_pcm_close(PlaybackHandle);
}
}
//#######################################################################
syslog(LOG_NOTICE,"daemon ttl %d",ttl);
sleep(delay);
ttl-=delay;
}
syslog(LOG_NOTICE,"daemon ttl expired");
//Free the WAVE data
free_wave_data();
closelog();
return(EXIT_SUCCESS);
}