~ubuntu-branches/ubuntu/quantal/vice/quantal

« back to all changes in this revision

Viewing changes to src/resid-fp/voice.h

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2009-03-31 00:37:15 UTC
  • mfrom: (1.1.7 upstream) (9.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20090331003715-i5yisvcfv7mgz3eh
Tags: 2.1.dfsg-1
* New major upstream release (closes: #495937).
* Add desktop files (closes: #501181).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//  ---------------------------------------------------------------------------
 
2
//  This file is part of reSID, a MOS6581 SID emulator engine.
 
3
//  Copyright (C) 2004  Dag Lem <resid@nimrod.no>
 
4
//
 
5
//  This program is free software; you can redistribute it and/or modify
 
6
//  it under the terms of the GNU General Public License as published by
 
7
//  the Free Software Foundation; either version 2 of the License, or
 
8
//  (at your option) any later version.
 
9
//
 
10
//  This program is distributed in the hope that it will be useful,
 
11
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
//  GNU General Public License for more details.
 
14
//
 
15
//  You should have received a copy of the GNU General Public License
 
16
//  along with this program; if not, write to the Free Software
 
17
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
//  ---------------------------------------------------------------------------
 
19
 
 
20
#ifndef __VOICE_H__
 
21
#define __VOICE_H__
 
22
 
 
23
#include "siddefs-fp.h"
 
24
#include "wave.h"
 
25
#include "envelope.h"
 
26
 
 
27
class VoiceFP
 
28
{
 
29
public:
 
30
  VoiceFP();
 
31
 
 
32
  void set_chip_model(chip_model model);
 
33
  void set_sync_source(VoiceFP*);
 
34
  void reset();
 
35
 
 
36
  void writeCONTROL_REG(reg8);
 
37
 
 
38
  // Amplitude modulated waveform output.
 
39
  // Range [-2048*255, 2047*255].
 
40
  RESID_INLINE float output();
 
41
 
 
42
  void set_nonlinearity(float nl);
 
43
protected:
 
44
  void calculate_dac_tables();
 
45
 
 
46
  WaveformGeneratorFP wave;
 
47
  EnvelopeGeneratorFP envelope;
 
48
 
 
49
  // Multiplying D/A DC offset.
 
50
  float voice_DC, wave_zero, nonlinearity;
 
51
 
 
52
  float env_dac[256];
 
53
  float voice_dac[4096];
 
54
friend class SIDFP;
 
55
};
 
56
 
 
57
// ----------------------------------------------------------------------------
 
58
// Amplitude modulated waveform output.
 
59
// Ideal range [-2048*255, 2047*255].
 
60
// ----------------------------------------------------------------------------
 
61
 
 
62
RESID_INLINE
 
63
float VoiceFP::output()
 
64
{
 
65
    unsigned int w = wave.output();
 
66
    unsigned int e = envelope.output();
 
67
    float _w = voice_dac[w];
 
68
    float _e = env_dac[e];
 
69
 
 
70
    return _w * _e + voice_DC;
 
71
}
 
72
 
 
73
#endif // not __VOICE_H__