summaryrefslogtreecommitdiffstats
path: root/uisimulator/x11/sound.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2005-07-14 21:46:07 +0000
committerDaniel Stenberg <daniel@haxx.se>2005-07-14 21:46:07 +0000
commitfebb52fc037959ba8ce55091efa5bdc90475da6b (patch)
tree561e2862623fbd531d25fa5a0aa7958b6dfbffdb /uisimulator/x11/sound.c
parent771ed79f73734cca78a1af22d2b426c19cb5c15a (diff)
downloadrockbox-febb52fc037959ba8ce55091efa5bdc90475da6b.tar.gz
rockbox-febb52fc037959ba8ce55091efa5bdc90475da6b.tar.bz2
rockbox-febb52fc037959ba8ce55091efa5bdc90475da6b.zip
First take at PCM playback in the X11 sim on Linux.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7147 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/x11/sound.c')
-rw-r--r--uisimulator/x11/sound.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/uisimulator/x11/sound.c b/uisimulator/x11/sound.c
new file mode 100644
index 0000000000..761ad01a72
--- /dev/null
+++ b/uisimulator/x11/sound.c
@@ -0,0 +1,95 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2005 by Daniel Stenberg <daniel@haxx.se>
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "autoconf.h"
+
+#ifdef ROCKBOX_HAS_SIMSOUND /* play sound in sim enabled */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/soundcard.h>
+
+#include "sound.h"
+
+int sim_sound_init(void)
+{
+ int fd;
+ int pcmbits;
+ int rc;
+ int channels;
+ int rate;
+
+ fd = open("/dev/dsp", O_WRONLY);
+ if(-1 == fd)
+ return 1;
+
+ pcmbits = 16;
+ rc = ioctl(fd, SOUND_PCM_WRITE_BITS, &pcmbits);
+ rc = ioctl(fd, SOUND_PCM_READ_BITS, &pcmbits);
+
+ channels = 2; /* Number of channels, 1=mono */
+ rc = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &channels);
+ rc = ioctl(fd, SOUND_PCM_READ_CHANNELS, &channels);
+
+ rate = 44100; /* Yeah. sampling rate */
+ rc = ioctl(fd, SOUND_PCM_WRITE_RATE, &rate);
+ rc = ioctl(fd, SOUND_PCM_READ_RATE, &rate);
+
+ return fd;
+}
+
+void sim_sound_play(int soundfd, char *buffer, long len)
+{
+ write(soundfd, buffer, len);
+}
+
+void sound_playback_thread(void)
+{
+ int soundfd = sim_sound_init();
+ unsigned char *buf;
+ long size;
+
+ while(-1 == soundfd)
+ sleep(100000); /* wait forever, can't play sound! */
+
+ do {
+
+ while(!sound_get_pcm)
+ /* TODO: fix a fine thread-synch mechanism here */
+ usleep(10000);
+
+ do {
+ sound_get_pcm(&buf, &size);
+ if(!size) {
+ sound_get_pcm = NULL;
+ break;
+ }
+ sim_sound_play(soundfd, buf, size);
+ usleep(10000);
+ } while(size);
+
+ } while(1);
+
+}
+
+#endif /* ROCKBOX_HAS_SIMSOUND */