//===========================================================================// // 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 #pragma hdrstop #if !defined(L4AUDLVL_HPP) # include #endif #if !defined(OBJSTRM_HPP) # include #endif #if !defined(NAMELIST_HPP) # include #endif //~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PatchLevelOfDetail ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #if DEBUG_LEVEL>0 TableOf 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(); }