ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/SID_SDL.h
Revision: 1.1
Committed: 2010-04-22T15:07:43Z (12 years, 9 months ago) by cebix
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
sound output via SDL

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * SID_SDL.h - 6581 emulation, SDL specific stuff
3     *
4     * Frodo Copyright (C) Christian Bauer
5     *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19     */
20    
21     #include <SDL/SDL_audio.h>
22    
23    
24     /*
25     * Initialization
26     */
27    
28     void DigitalRenderer::init_sound(void)
29     {
30     SDL_AudioSpec spec;
31     spec.freq = SAMPLE_FREQ;
32     spec.format = AUDIO_S16SYS;
33     spec.channels = 1;
34     spec.samples = 512;
35     spec.callback = buffer_proc;
36     spec.userdata = this;
37    
38     if (SDL_OpenAudio(&spec, NULL) < 0) {
39     fprintf(stderr, "WARNING: Cannot open audio: %s\n", SDL_GetError());
40     return;
41     }
42    
43     SDL_PauseAudio(0);
44     ready = true;
45     }
46    
47    
48     /*
49     * Destructor
50     */
51    
52     DigitalRenderer::~DigitalRenderer()
53     {
54     SDL_CloseAudio();
55     }
56    
57    
58     /*
59     * Sample volume (for sampled voice)
60     */
61    
62     void DigitalRenderer::EmulateLine(void)
63     {
64     sample_buf[sample_in_ptr] = volume;
65     sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE;
66     }
67    
68    
69     /*
70     * Pause sound output
71     */
72    
73     void DigitalRenderer::Pause(void)
74     {
75     SDL_PauseAudio(1);
76     }
77    
78    
79     /*
80     * Resume sound output
81     */
82    
83     void DigitalRenderer::Resume(void)
84     {
85     SDL_PauseAudio(0);
86     }
87    
88    
89     /*
90     * Callback function
91     */
92    
93     void DigitalRenderer::buffer_proc(void *cookie, uint8 *buffer, int size)
94     {
95     DigitalRenderer * renderer = (DigitalRenderer *) cookie;
96     renderer->calc_buffer((int16 *) buffer, size);
97     }