Archival snapshot of the Virtual World Entertainment Tesla cockpit software, 1994-1996: MUNGA engine and L4 pod layer source (Borland C++ 5.0), BT/RP game code, and game content (models, audio, maps, gauges, Division renderer data). Includes third-party libraries: Division dVS/DPL graphics, HMI SOS audio, WATTCP networking. Files are preserved byte-for-byte (.gitattributes disables all line-ending conversion). README.md documents the layout, target hardware, and toolchain. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
221 lines
6.3 KiB
C++
221 lines
6.3 KiB
C++
//===========================================================================//
|
|
// File: l4audlvl.cpp //
|
|
// Project: MUNGA Brick: Audio Renderer //
|
|
// Contents: //
|
|
//---------------------------------------------------------------------------//
|
|
// Date Who Modification //
|
|
// -------- --- ---------------------------------------------------------- //
|
|
// 01/30/95 ECH Initial coding. //
|
|
//---------------------------------------------------------------------------//
|
|
// Copyright (C) 1994, Virtual World Entertainment, Inc. //
|
|
// All Rights reserved worldwide //
|
|
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
|
//===========================================================================//
|
|
|
|
#include <mungal4.hpp>
|
|
#pragma hdrstop
|
|
|
|
#if !defined(L4AUDLVL_HPP)
|
|
# include <l4audlvl.hpp>
|
|
#endif
|
|
|
|
#if !defined(OBJSTRM_HPP)
|
|
# include <objstrm.hpp>
|
|
#endif
|
|
|
|
#if !defined(NAMELIST_HPP)
|
|
# include <namelist.hpp>
|
|
#endif
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PatchLevelOfDetail ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
#if DEBUG_LEVEL>0
|
|
TableOf<PatchLevelOfDetail*, unsigned int>
|
|
PatchLevelOfDetail::patchTableSocket(NULL, True);
|
|
#endif
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
PatchLevelOfDetail::PatchLevelOfDetail(PlugStream *stream):
|
|
AudioLevelOfDetail(stream)
|
|
{
|
|
MemoryStream_Read(stream, &bankID);
|
|
MemoryStream_Read(stream, &patchID);
|
|
MemoryStream_Read(stream, &maxMIDIFilterCutoff);
|
|
|
|
Warn(GetVoiceCount() > 4); // HACK - AWE appears to only play 1st 4 voices
|
|
|
|
#ifdef LAB_ONLY
|
|
setupCount = 0;
|
|
#endif
|
|
|
|
//
|
|
// Keep table of created patchs to verify that duplicates
|
|
// are not created, could move this to tool time
|
|
//
|
|
#if DEBUG_LEVEL>0
|
|
unsigned int index_value = (bankID * 1000) + patchID;
|
|
if (patchTableSocket.Find(index_value) != NULL)
|
|
{
|
|
Dump((int)bankID);
|
|
Dump((int)patchID);
|
|
}
|
|
Verify(patchTableSocket.Find(index_value) == NULL);
|
|
patchTableSocket.AddValue(this, index_value);
|
|
#endif
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
void
|
|
PatchLevelOfDetail::BuildFromPage(
|
|
PlugStream *stream,
|
|
NameList *name_list,
|
|
ClassID class_ID,
|
|
ObjectID object_ID
|
|
)
|
|
{
|
|
AudioLevelOfDetail::BuildFromPage(stream, name_list, class_ID, object_ID);
|
|
|
|
//
|
|
// Store fields
|
|
//
|
|
MEM_STRM_WRITE_ENTRY(*stream, name_list, SBKBankID, bank_ID);
|
|
MEM_STRM_WRITE_ENTRY(*stream, name_list, SBKPatchID, patch_ID);
|
|
MEM_STRM_WRITE_ENTRY(*stream, name_list, MIDINRPNValue, max_filter_cutoff);
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
PatchLevelOfDetail::~PatchLevelOfDetail()
|
|
{
|
|
#ifdef LAB_ONLY
|
|
cout << "PatchLevelOfDetail::~PatchLevelOfDetail\t";
|
|
cout << (int)bankID << ":" << (int)patchID << "\t";
|
|
cout << "setupCount=\t" << setupCount << "\n";
|
|
#endif
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
Logical
|
|
PatchLevelOfDetail::TestInstance() const
|
|
{
|
|
AudioLevelOfDetail::TestInstance();
|
|
return True;
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
void
|
|
PatchLevelOfDetail::SetupPatch(AudioChannel *channel)
|
|
{
|
|
Check(this);
|
|
Check(channel);
|
|
|
|
#ifdef LAB_ONLY
|
|
setupCount++;
|
|
#endif
|
|
|
|
//
|
|
// Set the channel to the bank and program, reset patch controls
|
|
//
|
|
channel->SelectBank(bankID);
|
|
channel->SendProgramChange(patchID);
|
|
channel->SendController(MIDI_CONTROL_RESET, MIDI_MAX_CONTROL_VALUE);
|
|
|
|
#if 0
|
|
Tell((int)bankID << ":" << (int)patchID << "\n");
|
|
#endif
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PatchResource ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
PatchResource::PatchResource(PlugStream *stream):
|
|
AudioResource(stream)
|
|
{
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
void
|
|
PatchResource::BuildFromPage(
|
|
PlugStream *stream,
|
|
NameList *name_list,
|
|
ClassID class_ID,
|
|
ObjectID object_ID
|
|
)
|
|
{
|
|
AudioResource::BuildFromPage(stream, name_list, class_ID, object_ID);
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
PatchResource::~PatchResource()
|
|
{
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
Logical
|
|
PatchResource::TestInstance() const
|
|
{
|
|
AudioResource::TestInstance();
|
|
return True;
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
void
|
|
PatchResource::SetupPatch(AudioChannel *channel)
|
|
{
|
|
Check(this);
|
|
Check(channel);
|
|
|
|
PatchLevelOfDetail *patch_level_of_detail =
|
|
Cast_Object(PatchLevelOfDetail*, GetAudioLevelOfDetail());
|
|
|
|
Check(patch_level_of_detail);
|
|
patch_level_of_detail->SetupPatch(channel);
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
//#############################################################################
|
|
//
|
|
MIDINRPNValue
|
|
PatchResource::GetMaxMIDIFilterCutoff()
|
|
{
|
|
Check(this);
|
|
|
|
PatchLevelOfDetail *patch_level_of_detail =
|
|
Cast_Object(PatchLevelOfDetail*, GetAudioLevelOfDetail());
|
|
|
|
Check(patch_level_of_detail);
|
|
return patch_level_of_detail->GetMaxMIDIFilterCutoff();
|
|
}
|
|
|
|
|