aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/adlmidi.h8
-rw-r--r--src/adlmidi.cpp34
-rw-r--r--src/chips/dosbox_opl3.cpp4
-rw-r--r--src/chips/dosbox_opl3.h4
-rw-r--r--src/chips/nuked_opl3.cpp14
-rw-r--r--src/chips/nuked_opl3.h4
-rw-r--r--src/chips/nuked_opl3_v174.cpp14
-rw-r--r--src/chips/nuked_opl3_v174.h4
-rw-r--r--src/chips/opl_chip_base.h4
9 files changed, 50 insertions, 40 deletions
diff --git a/include/adlmidi.h b/include/adlmidi.h
index 8ba8939..3e5d444 100644
--- a/include/adlmidi.h
+++ b/include/adlmidi.h
@@ -251,16 +251,16 @@ extern struct Adl_MarkerEntry adl_metaMarker(struct ADL_MIDIPlayer *device, size
/*Take a sample buffer and iterate MIDI timers */
-extern int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, short out[]);
+extern int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, short *out);
/*Take a sample buffer and iterate MIDI timers */
-extern int adl_playFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 left[], ADL_UInt8 right[], const struct ADLMIDI_AudioFormat *format);
+extern int adl_playFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 *left, ADL_UInt8 *right, const struct ADLMIDI_AudioFormat *format);
/*Generate audio output from chip emulators without iteration of MIDI timers.*/
-extern int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount, short out[]);
+extern int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount, short *out);
/*Generate audio output from chip emulators without iteration of MIDI timers.*/
-extern int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 left[], ADL_UInt8 right[], const struct ADLMIDI_AudioFormat *format);
+extern int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 *left, ADL_UInt8 *right, const struct ADLMIDI_AudioFormat *format);
/**
* @brief Periodic tick handler.
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index 39bb5b6..ade4f33 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -40,8 +40,8 @@ static ADL_Version adl_version = {
static const ADLMIDI_AudioFormat adl_DefaultAudioFormat =
{
ADLMIDI_SampleType_S16,
- sizeof(short),
- 2 * sizeof(short),
+ sizeof(int16_t),
+ 2 * sizeof(int16_t),
};
/*---------------------------EXPORTS---------------------------*/
@@ -620,8 +620,8 @@ static void CopySamplesRaw(ADL_UInt8 *dstLeft, ADL_UInt8 *dstRight, const int32_
size_t frameCount, unsigned sampleOffset)
{
for(size_t i = 0; i < frameCount; ++i) {
- *(Dst *)(dstLeft + i * sampleOffset) = src[2 * i];
- *(Dst *)(dstRight + i * sampleOffset) = src[2 * i + 1];
+ *(Dst *)(dstLeft + (i * sampleOffset)) = src[2 * i];
+ *(Dst *)(dstRight + (i * sampleOffset)) = src[(2 * i) + 1];
}
}
@@ -631,8 +631,8 @@ static void CopySamplesTransformed(ADL_UInt8 *dstLeft, ADL_UInt8 *dstRight, cons
Ret(&transform)(int32_t))
{
for(size_t i = 0; i < frameCount; ++i) {
- *(Dst *)(dstLeft + i * sampleOffset) = transform(src[2 * i]);
- *(Dst *)(dstRight + i * sampleOffset) = transform(src[2 * i + 1]);
+ *(Dst *)(dstLeft + (i * sampleOffset)) = transform(src[2 * i]);
+ *(Dst *)(dstRight + (i * sampleOffset)) = transform(src[(2 * i) + 1]);
}
}
@@ -655,6 +655,9 @@ static int SendStereoAudio(int samples_requested,
const unsigned containerSize = format->containerSize;
const unsigned sampleOffset = format->sampleOffset;
+ left += outputOffset * containerSize;
+ right += outputOffset * containerSize;
+
switch(sampleType) {
case ADLMIDI_SampleType_S8:
switch(containerSize) {
@@ -707,14 +710,15 @@ ADLMIDI_EXPORT int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, shor
}
ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount,
- ADL_UInt8 out_left[], ADL_UInt8 out_right[],
+ ADL_UInt8 *out_left, ADL_UInt8 *out_right,
const ADLMIDI_AudioFormat *format)
{
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
#ifdef ADLMIDI_HW_OPL
(void)device;
(void)sampleCount;
- (void)out;
+ (void)out_left;
+ (void)out_right;
(void)format;
return 0;
#else
@@ -774,14 +778,15 @@ ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount,
unsigned int chips = player->opl.NumCards;
if(chips == 1)
{
- player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo);
+ player->opl.cardsOP2[0]->generate32(out_buf, (size_t)in_generatedStereo);
}
else if(n_periodCountStereo > 0)
{
/* Generate data from every chip and mix result */
for(size_t card = 0; card < chips; ++card)
- player->opl.cardsOP2[card]->generateAndMix(out_buf, (size_t)in_generatedStereo);
+ player->opl.cardsOP2[card]->generateAndMix32(out_buf, (size_t)in_generatedStereo);
}
+
/* Process it */
if(SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out_left, out_right, format) == -1)
return 0;
@@ -815,13 +820,14 @@ ADLMIDI_EXPORT int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount,
}
ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount,
- ADL_UInt8 out_left[], ADL_UInt8 out_right[],
+ ADL_UInt8 *out_left, ADL_UInt8 *out_right,
const ADLMIDI_AudioFormat *format)
{
#ifdef ADLMIDI_HW_OPL
(void)device;
(void)sampleCount;
- (void)out;
+ (void)out_left;
+ (void)out_right;
(void)format;
return 0;
#else
@@ -863,12 +869,12 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC
std::memset(out_buf, 0, static_cast<size_t>(in_generatedPhys) * sizeof(out_buf[0]));
unsigned int chips = player->opl.NumCards;
if(chips == 1)
- player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo);
+ player->opl.cardsOP2[0]->generate32(out_buf, (size_t)in_generatedStereo);
else if(n_periodCountStereo > 0)
{
/* Generate data from every chip and mix result */
for(unsigned card = 0; card < chips; ++card)
- player->opl.cardsOP2[card]->generateAndMix(out_buf, (size_t)in_generatedStereo);
+ player->opl.cardsOP2[card]->generateAndMix32(out_buf, (size_t)in_generatedStereo);
}
/* Process it */
if(SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out_left, out_right, format) == -1)
diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp
index 57b1412..24c1c44 100644
--- a/src/chips/dosbox_opl3.cpp
+++ b/src/chips/dosbox_opl3.cpp
@@ -78,7 +78,7 @@ int DosBoxOPL3::generateAndMix(int16_t *output, size_t frames)
return (int)frames;
}
-int DosBoxOPL3::generate(int32_t *output, size_t frames)
+int DosBoxOPL3::generate32(int32_t *output, size_t frames)
{
DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
ssize_t left = (ssize_t)frames;
@@ -92,7 +92,7 @@ int DosBoxOPL3::generate(int32_t *output, size_t frames)
return (int)frames;
}
-int DosBoxOPL3::generateAndMix(int32_t *output, size_t frames)
+int DosBoxOPL3::generateAndMix32(int32_t *output, size_t frames)
{
DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
ssize_t left = (ssize_t)frames;
diff --git a/src/chips/dosbox_opl3.h b/src/chips/dosbox_opl3.h
index 05682ae..422e2d1 100644
--- a/src/chips/dosbox_opl3.h
+++ b/src/chips/dosbox_opl3.h
@@ -17,8 +17,8 @@ public:
virtual void writeReg(uint16_t addr, uint8_t data) override;
virtual int generate(int16_t *output, size_t frames) override;
virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate(int32_t *output, size_t frames) override;
- virtual int generateAndMix(int32_t *output, size_t frames) override;
+ virtual int generate32(int32_t *output, size_t frames) override;
+ virtual int generateAndMix32(int32_t *output, size_t frames) override;
virtual const char *emulatorName() override;
};
diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp
index 16cc73b..70fc525 100644
--- a/src/chips/nuked_opl3.cpp
+++ b/src/chips/nuked_opl3.cpp
@@ -61,26 +61,28 @@ int NukedOPL3::generateAndMix(int16_t *output, size_t frames)
return (int)frames;
}
-int NukedOPL3::generate(int32_t *output, size_t frames)
+int NukedOPL3::generate32(int32_t *output, size_t frames)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
for(size_t i = 0; i < frames; ++i) {
int16_t frame[2];
OPL3_GenerateResampled(chip_r, frame);
- output[2 * i] = frame[0];
- output[2 * i + 1] = frame[1];
+ output[0] = (int32_t)frame[0];
+ output[1] = (int32_t)frame[1];
+ output += 2;
}
return (int)frames;
}
-int NukedOPL3::generateAndMix(int32_t *output, size_t frames)
+int NukedOPL3::generateAndMix32(int32_t *output, size_t frames)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
for(size_t i = 0; i < frames; ++i) {
int16_t frame[2];
OPL3_GenerateResampled(chip_r, frame);
- output[2 * i] += frame[0];
- output[2 * i + 1] += frame[1];
+ output[0] += (int32_t)frame[0];
+ output[1] += (int32_t)frame[1];
+ output += 2;
}
return (int)frames;
}
diff --git a/src/chips/nuked_opl3.h b/src/chips/nuked_opl3.h
index 144fb23..ceb1dfd 100644
--- a/src/chips/nuked_opl3.h
+++ b/src/chips/nuked_opl3.h
@@ -17,8 +17,8 @@ public:
virtual void writeReg(uint16_t addr, uint8_t data) override;
virtual int generate(int16_t *output, size_t frames) override;
virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate(int32_t *output, size_t frames) override;
- virtual int generateAndMix(int32_t *output, size_t frames) override;
+ virtual int generate32(int32_t *output, size_t frames) override;
+ virtual int generateAndMix32(int32_t *output, size_t frames) override;
virtual const char *emulatorName() override;
};
diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp
index 59f7953..0dcf925 100644
--- a/src/chips/nuked_opl3_v174.cpp
+++ b/src/chips/nuked_opl3_v174.cpp
@@ -61,26 +61,28 @@ int NukedOPL3v174::generateAndMix(int16_t *output, size_t frames)
return (int)frames;
}
-int NukedOPL3v174::generate(int32_t *output, size_t frames)
+int NukedOPL3v174::generate32(int32_t *output, size_t frames)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
for(size_t i = 0; i < frames; ++i) {
int16_t frame[2];
OPL3v17_GenerateResampled(chip_r, frame);
- output[2 * i] = frame[0];
- output[2 * i + 1] = frame[1];
+ output[0] = (int32_t)frame[0];
+ output[1] = (int32_t)frame[1];
+ output += 2;
}
return (int)frames;
}
-int NukedOPL3v174::generateAndMix(int32_t *output, size_t frames)
+int NukedOPL3v174::generateAndMix32(int32_t *output, size_t frames)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
for(size_t i = 0; i < frames; ++i) {
int16_t frame[2];
OPL3v17_GenerateResampled(chip_r, frame);
- output[2 * i] += frame[0];
- output[2 * i + 1] += frame[1];
+ output[0] += (int32_t)frame[0];
+ output[1] += (int32_t)frame[1];
+ output += 2;
}
return (int)frames;
}
diff --git a/src/chips/nuked_opl3_v174.h b/src/chips/nuked_opl3_v174.h
index b9a0466..acbdcca 100644
--- a/src/chips/nuked_opl3_v174.h
+++ b/src/chips/nuked_opl3_v174.h
@@ -17,8 +17,8 @@ public:
virtual void writeReg(uint16_t addr, uint8_t data) override;
virtual int generate(int16_t *output, size_t frames) override;
virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate(int32_t *output, size_t frames) override;
- virtual int generateAndMix(int32_t *output, size_t frames) override;
+ virtual int generate32(int32_t *output, size_t frames) override;
+ virtual int generateAndMix32(int32_t *output, size_t frames) override;
virtual const char *emulatorName() override;
};
diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h
index 1aaddf8..70f9375 100644
--- a/src/chips/opl_chip_base.h
+++ b/src/chips/opl_chip_base.h
@@ -19,8 +19,8 @@ public:
virtual void writeReg(uint16_t addr, uint8_t data) = 0;
virtual int generate(int16_t *output, size_t frames) = 0;
virtual int generateAndMix(int16_t *output, size_t frames) = 0;
- virtual int generate(int32_t *output, size_t frames) = 0;
- virtual int generateAndMix(int32_t *output, size_t frames) = 0;
+ virtual int generate32(int32_t *output, size_t frames) = 0;
+ virtual int generateAndMix32(int32_t *output, size_t frames) = 0;
virtual const char* emulatorName() = 0;
};