kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
53 wiersze
1.2 KiB
C++
53 wiersze
1.2 KiB
C++
// Simple AMIGA Paula Audio channel mixer -- Copyright (C) Michael Schwendt
|
|
//
|
|
// 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.
|
|
|
|
#include "LamePaula.h"
|
|
|
|
LamePaulaVoice::LamePaulaVoice() {
|
|
looping = true;
|
|
off();
|
|
}
|
|
|
|
|
|
LamePaulaVoice::~LamePaulaVoice() {
|
|
off();
|
|
}
|
|
|
|
|
|
void LamePaulaVoice::off() {
|
|
isOn = false;
|
|
paula.period = 0;
|
|
paula.volume = 0;
|
|
}
|
|
|
|
|
|
void LamePaulaVoice::on() {
|
|
takeNextBuf();
|
|
isOn = true;
|
|
}
|
|
|
|
|
|
void LamePaulaVoice::takeNextBuf() {
|
|
if (!isOn) {
|
|
// If channel is off, take sample START parameters.
|
|
start = paula.start;
|
|
length = paula.length;
|
|
length <<= 1;
|
|
if (length == 0) { // Paula would play $FFFF words (!)
|
|
length = 1;
|
|
}
|
|
end = start+length;
|
|
}
|
|
repeatStart = paula.start;
|
|
repeatLength = paula.length;
|
|
repeatLength <<= 1;
|
|
if (repeatLength == 0) { // Paula would play $FFFF words (!)
|
|
repeatLength = 1;
|
|
}
|
|
repeatEnd = repeatStart+repeatLength;
|
|
}
|