aboutsummaryrefslogtreecommitdiff
path: root/backends/gp32/gp32std_sound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/gp32/gp32std_sound.cpp')
-rw-r--r--backends/gp32/gp32std_sound.cpp188
1 files changed, 0 insertions, 188 deletions
diff --git a/backends/gp32/gp32std_sound.cpp b/backends/gp32/gp32std_sound.cpp
deleted file mode 100644
index 56335f1c4f..0000000000
--- a/backends/gp32/gp32std_sound.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2001-2006 The ScummVM project
- * Copyright (C) 2002 Ph0x - GP32 Backend
- * Copyright (C) 2003/2004 DJWillis - GP32 Backend
- * Copyright (C) 2005 Won Star - GP32 Backend
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "stdafx.h"
-#include "common/scummsys.h"
-
-#include "gp32std.h"
-#include "gp32std_sound.h"
-
-#define GP32_TIMER_AUDIO_IDX 0
-
-// Global variables
-static volatile unsigned int frame = 0;
-static volatile unsigned int *soundPos = 0;
-static volatile int idx_buf;
-static volatile unsigned int shiftVal = 0;
-static void *buffer;
-static GPSOUNDBUF soundBuf;
-
-// This routine gets called by the timer interrupt and
-// polls the current playing position within the buffer.
-
-static void soundTimer() {
- static int locked = false;
-
- if (locked) {
- return;
- }
-
- locked = true;
-
- unsigned int sampleshiftVal = soundBuf.samples << shiftVal;
- unsigned int t = (((unsigned int)(*soundPos) - (unsigned int)buffer) >> shiftVal) >= soundBuf.samples ? 1 : 0;
- if (t != frame) {
- unsigned int offs = ((frame == 1) ? (sampleshiftVal) : 0);
- //memset((uint8 *)buffer + offs, 0, sampleshiftVal);
- soundBuf.callback(soundBuf.userdata, (uint8 *)((unsigned int)buffer + offs), sampleshiftVal);
- frame = t;
- {
- // Play silence
- register uint16 *d = (uint16 *)((uint8 *)buffer + offs); // alignment-safe
- register uint32 max = (uint32)((uint8 *)buffer + offs + sampleshiftVal);
- do {
- *d++ ^= 0x8000; // 1
- *d++ ^= 0x8000; // 2
- *d++ ^= 0x8000; // 3
- *d++ ^= 0x8000; // 4
- *d++ ^= 0x8000; // 5
- *d++ ^= 0x8000; // 6
- *d++ ^= 0x8000; // 7
- *d++ ^= 0x8000; // 8
- *d++ ^= 0x8000; // 9
- *d++ ^= 0x8000; // 10
- *d++ ^= 0x8000; // 11
- *d++ ^= 0x8000; // 12
- *d++ ^= 0x8000; // 13
- *d++ ^= 0x8000; // 14
- *d++ ^= 0x8000; // 15
- *d++ ^= 0x8000; // 16
- *d++ ^= 0x8000; // 17
- *d++ ^= 0x8000; // 18
- *d++ ^= 0x8000; // 19
- *d++ ^= 0x8000; // 20
- *d++ ^= 0x8000; // 21
- *d++ ^= 0x8000; // 22
- *d++ ^= 0x8000; // 23
- *d++ ^= 0x8000; // 24
- *d++ ^= 0x8000; // 25
- *d++ ^= 0x8000; // 26
- *d++ ^= 0x8000; // 27
- *d++ ^= 0x8000; // 28
- *d++ ^= 0x8000; // 29
- *d++ ^= 0x8000; // 30
- *d++ ^= 0x8000; // 31
- *d++ ^= 0x8000; // 32
- } while ((uint32)d < max);
- }
- }
-
- locked = false;
-}
-
-int gp_soundBufStart(GPSOUNDBUF *sb) {
- int bufferSize = 0;
-
- PCM_SR gpFreq = PCM_S11;
- PCM_BIT gpFormat = PCM_16BIT;
-
- frame = 0;
-
- // Copy the structure
- memcpy(&soundBuf, sb, sizeof(GPSOUNDBUF));
-
- // Calculate size of a single sample in bytes
- // and a corresponding shift value
- shiftVal = 0;
-
- switch (soundBuf.format) {
- case 8:
- gpFormat = PCM_8BIT;
- break;
- case 16:
- gpFormat = PCM_16BIT;
- shiftVal++;
- break;
- }
-
- switch (soundBuf.freq) {
- case 11025:
- if (soundBuf.channels == 2) {
- gpFreq = PCM_S11;
- shiftVal++;
- } else
- gpFreq = PCM_M11;
- break;
- case 22050:
- if (soundBuf.channels == 2) {
- gpFreq = PCM_S22;
- shiftVal++;
- } else
- gpFreq = PCM_M22;
- break;
- case 44100:
- if (soundBuf.channels == 2) {
- gpFreq = PCM_S44;
- shiftVal++;
- } else
- gpFreq = PCM_M44;
- break;
- }
-
- soundBuf.samplesize = 1 << shiftVal;
-
- // Allocate memory for the playing buffer
- bufferSize = soundBuf.samplesize * soundBuf.samples * 2;
- buffer = malloc(bufferSize);
-
- // Clear the buffer
- uint16 *tmpBuf = (uint16 *)buffer;
- for (int i = 0; i < bufferSize / 2; i++)
- tmpBuf[i] = 0x8000;
-
- // Frequency of the timer interrupt which polls the playing position
- // FIXME: This frequency should not be multiplied by 4.
- soundBuf.pollfreq = 4 * (2 * soundBuf.freq) / soundBuf.samples;
-
- // Set timer interrupt
- if (GpTimerOptSet(GP32_TIMER_AUDIO_IDX, soundBuf.pollfreq, 0, soundTimer) == GPOS_ERR_ALREADY_USED) {
- GPDEBUG(" Timer is already used... kill timer");
- GpTimerKill(GP32_TIMER_AUDIO_IDX);
- }
- GpTimerSet(GP32_TIMER_AUDIO_IDX);
-
- GpPcmInit(gpFreq, gpFormat);
- GpPcmPlay((unsigned short *)buffer, bufferSize, 1);
- GpPcmLock((unsigned short *)buffer, (int *)&idx_buf, (unsigned int *)&soundPos);
-
- return 0;
-}
-
-void gp_soundBufStop() {
- GpTimerKill(GP32_TIMER_AUDIO_IDX);
- GpPcmStop();
- GpPcmRemove((unsigned short *)buffer);
- free(buffer);
-}