forked from mikebrady/shairport-sync
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Perl script is removed in favour of C. Stale documentation and initfiles are removed for now also. C interface works, but still needs work (for example, mDNS is missing) - see TODO.
- Loading branch information
Showing
26 changed files
with
1,766 additions
and
3,523 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,6 @@ | ||
SRCS := shairport.c rtsp.c common.c rtp.c player.c alac.c $(wildcard audio_*.c) | ||
|
||
MY_CFLAGS= $(shell pkg-config --cflags ao) | ||
MY_LDFLAGS= $(shell pkg-config --libs ao) | ||
ifeq ($(shell uname),FreeBSD) | ||
MY_LDFLAGS+= -lssl | ||
else | ||
MY_CFLAGS+= $(shell pkg-config --cflags openssl) | ||
MY_LDFLAGS+= $(shell pkg-config --libs openssl) | ||
endif | ||
|
||
CFLAGS:=-O2 -Wall $(MY_CFLAGS) | ||
LDFLAGS:=-lm -lpthread $(MY_LDFLAGS) | ||
|
||
OBJS=socketlib.o shairport.o alac.o hairtunes.o | ||
all: hairtunes shairport | ||
|
||
hairtunes: hairtunes.c alac.o | ||
$(CC) $(CFLAGS) -DHAIRTUNES_STANDALONE hairtunes.c alac.o -o $@ $(LDFLAGS) | ||
|
||
shairport: $(OBJS) | ||
$(CC) $(CFLAGS) $(OBJS) -o $@ $(LDFLAGS) | ||
|
||
clean: | ||
-@rm -rf hairtunes shairport $(OBJS) | ||
|
||
|
||
%.o: %.c | ||
$(CC) $(CFLAGS) -c $< -o $@ | ||
|
||
|
||
prefix=/usr/local | ||
install: hairtunes shairport | ||
install -D -m 0755 hairtunes $(DESTDIR)$(prefix)/bin/hairtunes | ||
install -D -m 0755 shairport.pl $(DESTDIR)$(prefix)/bin/shairport.pl | ||
install -D -m 0755 shairport $(DESTDIR)$(prefix)/bin/shairport | ||
|
||
.PHONY: all clean install | ||
|
||
.SILENT: clean | ||
LIBS := -lcrypto -lm -lao -lpthread | ||
|
||
shairport: $(SRCS) | ||
gcc -ggdb -Wall $(SRCS) $(LIBS) -o shairport |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
- make BUFFER_FRAMES adjustable | ||
- use getopt | ||
- copyright updates | ||
- signal handlers | ||
- pluggable audio drivers | ||
- audio usage | ||
- finish ao | ||
- makefile | ||
- documentation | ||
- PKGBUILD, initscript, systemd, launchd plist | ||
- mDNS | ||
- volume control | ||
- tidy debug printing |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#ifndef _AUDIO_H | ||
#define _AUDIO_H | ||
|
||
typedef struct { | ||
// start of program | ||
int (*init)(int argc, char **argv); | ||
// at end of program | ||
void (*deinit)(void); | ||
|
||
void (*start)(int sample_rate); | ||
// block of samples | ||
void (*play)(short buf[], int samples); | ||
void (*stop)(void); | ||
|
||
// may be NULL, in which case soft volume is applied | ||
void (*volume)(double vol); | ||
} audio_ops; | ||
|
||
extern audio_ops audio_dummy; | ||
extern audio_ops audio_ao; | ||
|
||
#endif //_AUDIO_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include <memory.h> | ||
#include <ao/ao.h> | ||
#include "common.h" | ||
#include "audio.h" | ||
|
||
ao_device *dev = NULL; | ||
|
||
static int init(int argc, char **argv) { | ||
printf("ao: init\n"); | ||
ao_initialize(); | ||
ao_sample_format fmt; | ||
memset(&fmt, 0, sizeof(fmt)); | ||
|
||
fmt.bits = 16; | ||
fmt.rate = 44100; | ||
fmt.channels = 2; | ||
fmt.byte_format = AO_FMT_NATIVE; | ||
|
||
int driver = ao_default_driver_id(); | ||
|
||
dev = ao_open_live(driver, &fmt, NULL); | ||
|
||
return dev ? 0 : 1; | ||
} | ||
|
||
static void deinit(void) { | ||
if (dev) | ||
ao_close(dev); | ||
} | ||
|
||
static void start(int sample_rate) { | ||
printf("ao: start\n"); | ||
if (sample_rate != 44100) | ||
die("unexpceted sample rate!\n"); | ||
} | ||
|
||
static void play(short buf[], int samples) { | ||
ao_play(dev, (char*)buf, samples*4); | ||
} | ||
|
||
static void stop(void) { | ||
} | ||
|
||
audio_ops audio_ao = { | ||
.init = &init, | ||
.deinit = &deinit, | ||
.start = &start, | ||
.stop = &stop, | ||
.play = &play, | ||
.volume = NULL | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include <sys/time.h> | ||
#include "audio.h" | ||
|
||
int Fs; | ||
long long starttime, samples_played; | ||
|
||
static int dummy_init(int argc, char **argv) { | ||
return 0; | ||
} | ||
|
||
static void dummy_deinit(void) { | ||
} | ||
|
||
static void dummy_start(int sample_rate) { | ||
Fs = sample_rate; | ||
starttime = 0; | ||
samples_played = 0; | ||
printf("dummy audio output started at Fs=%d Hz\n", sample_rate); | ||
} | ||
|
||
static void dummy_play(short buf[], int samples) { | ||
struct timeval tv; | ||
|
||
// this is all a bit expensive but it's long-term stable. | ||
gettimeofday(&tv, NULL); | ||
|
||
long long nowtime = tv.tv_usec + 1e6*tv.tv_sec; | ||
|
||
if (!starttime) | ||
starttime = nowtime; | ||
|
||
samples_played += samples; | ||
|
||
long long finishtime = starttime + samples_played * 1e6 / Fs; | ||
|
||
usleep(finishtime - nowtime); | ||
} | ||
|
||
static void dummy_stop(void) { | ||
printf("dummy audio stopped\n"); | ||
} | ||
|
||
audio_ops audio_dummy = { | ||
.init = &dummy_init, | ||
.deinit = &dummy_deinit, | ||
.start = &dummy_start, | ||
.stop = &dummy_stop, | ||
.play = &dummy_play, | ||
.volume = NULL | ||
}; |
Oops, something went wrong.