Bochs/bochs/iodev/speaker.h
Volker Ruppert c10e8feea6 Added support for driving the speaker line directly with the speaker gate, but
the square wave generator disabled. This feature has been used by old demos and
games to play digitized sound before soundcards with DSP became popular.
2018-05-10 10:50:42 +00:00

76 lines
2.3 KiB
C++

/////////////////////////////////////////////////////////////////////////
// $Id$
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2003 David N. Welton <davidw@dedasys.com>.
// Copyright (C) 2003-2018 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
/*
* This file defines a class to deal with the speaker.
* This class also tries to play beeps on the console
* (linux only) and also forwards beeps to the gui
* so we have the possiblity to signal the beep
*/
#ifndef BX_PC_SPEAKER_H
#define BX_PC_SPEAKER_H
class bx_soundlow_waveout_c;
class bx_speaker_c : public bx_speaker_stub_c {
public:
bx_speaker_c();
virtual ~bx_speaker_c();
virtual void init(void);
virtual void reset(unsigned int);
void beep_on(float frequency);
void beep_off();
void set_line(bx_bool level);
#if BX_SUPPORT_SOUNDLOW
Bit32u beep_generator(Bit16u rate, Bit8u *buffer, Bit32u len);
#if BX_HAVE_REALTIME_USEC
Bit32u dsp_generator(Bit16u rate, Bit8u *buffer, Bit32u len);
#endif
#endif
private:
float beep_frequency; // 0 : beep is off
unsigned output_mode;
#ifdef __linux__
/* Do we have access? If not, just skip everything else. */
signed int consolefd;
const static unsigned int clock_tick_rate = 1193180;
#elif defined(WIN32)
Bit64u usec_start;
#endif
#if BX_SUPPORT_SOUNDLOW
bx_soundlow_waveout_c *waveout;
int beep_callback_id;
bx_bool beep_active;
#if BX_HAVE_REALTIME_USEC
bx_bool dsp_active;
Bit64u dsp_start_usec;
Bit64u dsp_cb_usec;
Bit32u dsp_count;
Bit64u dsp_event_buffer[500];
#endif
#endif
};
#endif