LCOV - code coverage report
Current view: top level - src/importexport/midi/internal/midishared - generalmidi.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 100.0 % 3 3
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-Studio-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2025 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : #include "generalmidi.h"
      23              : 
      24              : #include <array>
      25              : #include <string_view>
      26              : 
      27              : using namespace std::literals;
      28              : 
      29              : namespace mu::iex::midi {
      30              : namespace {
      31              : struct Gm1ProgramData {
      32              :     GM1Program program;
      33              :     std::string_view midiName;
      34              : };
      35              : 
      36              : static constexpr std::array GM1_PROGRAM_DATA = {
      37              :     Gm1ProgramData{ GM1Program::AcousticGrandPiano, "Grand Piano"sv },
      38              :     Gm1ProgramData{ GM1Program::BrightAcousticPiano, "Bright Piano"sv },
      39              :     Gm1ProgramData{ GM1Program::ElectricGrandPiano, "E.Grand"sv },
      40              :     Gm1ProgramData{ GM1Program::HonkyTonkPiano, "Honky-tonk"sv },
      41              :     Gm1ProgramData{ GM1Program::ElectricPiano1, "E.Piano"sv },
      42              :     Gm1ProgramData{ GM1Program::ElectricPiano2, "E.Piano 2"sv },
      43              :     Gm1ProgramData{ GM1Program::Harpsichord, "Harpsichord"sv },
      44              :     Gm1ProgramData{ GM1Program::Clavi, "Clav."sv },
      45              :     Gm1ProgramData{ GM1Program::Celesta, "Celesta"sv },
      46              :     Gm1ProgramData{ GM1Program::Glockenspiel, "Glockenspiel"sv },
      47              :     Gm1ProgramData{ GM1Program::MusicBox, "Music Box"sv },
      48              :     Gm1ProgramData{ GM1Program::Vibraphone, "Vibraphone"sv },
      49              :     Gm1ProgramData{ GM1Program::Marimba, "Marimba"sv },
      50              :     Gm1ProgramData{ GM1Program::Xylophone, "Xylophone"sv },
      51              :     Gm1ProgramData{ GM1Program::TubularBells, "Tubular Bells"sv },
      52              :     Gm1ProgramData{ GM1Program::Dulcimer, "Dulcimer"sv },
      53              :     Gm1ProgramData{ GM1Program::DrawbarOrgan, "Drawbar Organ"sv },
      54              :     Gm1ProgramData{ GM1Program::PercussiveOrgan, "Perc. Organ"sv },
      55              :     Gm1ProgramData{ GM1Program::RockOrgan, "Rock Organ"sv },
      56              :     Gm1ProgramData{ GM1Program::ChurchOrgan, "Church Organ"sv },
      57              :     Gm1ProgramData{ GM1Program::ReedOrgan, "Reed Organ"sv },
      58              :     Gm1ProgramData{ GM1Program::Accordion, "Akkordion"sv },
      59              :     Gm1ProgramData{ GM1Program::Harmonica, "Harmonica"sv },
      60              :     Gm1ProgramData{ GM1Program::TangoAccordion, "Bandoneon"sv },
      61              :     Gm1ProgramData{ GM1Program::AcousticGuitarNylon, "Nylon Gtr."sv },
      62              :     Gm1ProgramData{ GM1Program::AcousticGuitarSteel, "Steel Gtr."sv },
      63              :     Gm1ProgramData{ GM1Program::ElectricGuitarJazz, "Jazz Guitar"sv },
      64              :     Gm1ProgramData{ GM1Program::ElectricGuitarClean, "Clean Guitar"sv },
      65              :     Gm1ProgramData{ GM1Program::ElectricGuitarMuted, "Muted Guitar"sv },
      66              :     Gm1ProgramData{ GM1Program::OverdrivenGuitar, "Overdrive Gtr"sv },
      67              :     Gm1ProgramData{ GM1Program::DistortionGuitar, "DistortionGtr"sv },
      68              :     Gm1ProgramData{ GM1Program::GuitarHarmonics, "Gtr.Harmonics"sv },
      69              :     Gm1ProgramData{ GM1Program::AcousticBass, "Acoustic Bass"sv },
      70              :     Gm1ProgramData{ GM1Program::ElectricBassFinger, "Fingered Bass"sv },
      71              :     Gm1ProgramData{ GM1Program::ElectricBassPick, "Picked Bass"sv },
      72              :     Gm1ProgramData{ GM1Program::FretlessBass, "Fretless Bass"sv },
      73              :     Gm1ProgramData{ GM1Program::SlapBass1, "Slap Bass 1"sv },
      74              :     Gm1ProgramData{ GM1Program::SlapBass2, "Slap Bass 2"sv },
      75              :     Gm1ProgramData{ GM1Program::SynthBass1, "Synth Bass 1"sv },
      76              :     Gm1ProgramData{ GM1Program::SynthBass2, "Synth Bass 2"sv },
      77              :     Gm1ProgramData{ GM1Program::Violin, "Violin"sv },
      78              :     Gm1ProgramData{ GM1Program::Viola, "Viola"sv },
      79              :     Gm1ProgramData{ GM1Program::Cello, "Cello"sv },
      80              :     Gm1ProgramData{ GM1Program::Contrabass, "Contrabass"sv },
      81              :     Gm1ProgramData{ GM1Program::TremoloStrings, "Tremolo Str."sv },
      82              :     Gm1ProgramData{ GM1Program::PizzicatoStrings, "PizzicatoStr."sv },
      83              :     Gm1ProgramData{ GM1Program::OrchestralHarp, "Harp"sv },
      84              :     Gm1ProgramData{ GM1Program::Timpani, "Timpani"sv },
      85              :     Gm1ProgramData{ GM1Program::StringEnsemble1, "Strings 1"sv },
      86              :     Gm1ProgramData{ GM1Program::StringEnsemble2, "Strings 2"sv },
      87              :     Gm1ProgramData{ GM1Program::SynthStrings1, "Syn.Strings 1"sv },
      88              :     Gm1ProgramData{ GM1Program::SynthStrings2, "Syn.Strings 2"sv },
      89              :     Gm1ProgramData{ GM1Program::ChoirAahs, "Choir Aahs"sv },
      90              :     Gm1ProgramData{ GM1Program::VoiceOohs, "Voice Oohs"sv },
      91              :     Gm1ProgramData{ GM1Program::SynthVoice, "Synth Voice"sv },
      92              :     Gm1ProgramData{ GM1Program::OrchestraHit, "Orchestra Hit"sv },
      93              :     Gm1ProgramData{ GM1Program::Trumpet, "Trumpet"sv },
      94              :     Gm1ProgramData{ GM1Program::Trombone, "Trombone"sv },
      95              :     Gm1ProgramData{ GM1Program::Tuba, "Tuba"sv },
      96              :     Gm1ProgramData{ GM1Program::MutedTrumpet, "Muted Trumpet"sv },
      97              :     Gm1ProgramData{ GM1Program::FrenchHorn, "French Horn"sv },
      98              :     Gm1ProgramData{ GM1Program::BrassSection, "Brass Section"sv },
      99              :     Gm1ProgramData{ GM1Program::SynthBrass1, "Synth Brass 1"sv },
     100              :     Gm1ProgramData{ GM1Program::SynthBrass2, "Synth Brass 2"sv },
     101              :     Gm1ProgramData{ GM1Program::SopranoSax, "Soprano Sax"sv },
     102              :     Gm1ProgramData{ GM1Program::AltoSax, "Alto Sax"sv },
     103              :     Gm1ProgramData{ GM1Program::TenorSax, "Tenor Sax"sv },
     104              :     Gm1ProgramData{ GM1Program::BaritoneSax, "Baritone Sax"sv },
     105              :     Gm1ProgramData{ GM1Program::Oboe, "Oboe"sv },
     106              :     Gm1ProgramData{ GM1Program::EnglishHorn, "English Horn"sv },
     107              :     Gm1ProgramData{ GM1Program::Bassoon, "Bassoon"sv },
     108              :     Gm1ProgramData{ GM1Program::Clarinet, "Clarinet"sv },
     109              :     Gm1ProgramData{ GM1Program::Piccolo, "Piccolo"sv },
     110              :     Gm1ProgramData{ GM1Program::Flute, "Flute"sv },
     111              :     Gm1ProgramData{ GM1Program::Recorder, "Recorder"sv },
     112              :     Gm1ProgramData{ GM1Program::PanFlute, "Pan Flute"sv },
     113              :     Gm1ProgramData{ GM1Program::BlownBottle, "Blown Bottle"sv },
     114              :     Gm1ProgramData{ GM1Program::Shakuhachi, "Shakuhachi"sv },
     115              :     Gm1ProgramData{ GM1Program::Whistle, "Whistle"sv },
     116              :     Gm1ProgramData{ GM1Program::Ocarina, "Ocarina"sv },
     117              :     Gm1ProgramData{ GM1Program::Lead1Square, "Square Wave"sv },
     118              :     Gm1ProgramData{ GM1Program::Lead2Sawtooth, "Saw Wave"sv },
     119              :     Gm1ProgramData{ GM1Program::Lead3Calliope, "Calliope"sv },
     120              :     Gm1ProgramData{ GM1Program::Lead4Chiff, "Chiffer Lead"sv },
     121              :     Gm1ProgramData{ GM1Program::Lead5Charang, "Charang"sv },
     122              :     Gm1ProgramData{ GM1Program::Lead6Voice, "Solo Vox"sv },
     123              :     Gm1ProgramData{ GM1Program::Lead7Fifths, "Fifth Saw"sv },
     124              :     Gm1ProgramData{ GM1Program::Lead8BassAndLead, "Bass Lead"sv },
     125              :     Gm1ProgramData{ GM1Program::Pad1NewAge, "New Age Pad"sv },
     126              :     Gm1ProgramData{ GM1Program::Pad2Warm, "Warm Pad"sv },
     127              :     Gm1ProgramData{ GM1Program::Pad3Polysynth, "Polysynth Pad"sv },
     128              :     Gm1ProgramData{ GM1Program::Pad4Choir, "Choir Pad"sv },
     129              :     Gm1ProgramData{ GM1Program::Pad5Bowed, "Bowed Pad"sv },
     130              :     Gm1ProgramData{ GM1Program::Pad6Metallic, "Metallic Pad"sv },
     131              :     Gm1ProgramData{ GM1Program::Pad7Halo, "Halo Pad"sv },
     132              :     Gm1ProgramData{ GM1Program::Pad8Sweep, "Sweep Pad"sv },
     133              :     Gm1ProgramData{ GM1Program::FX1Rain, "Rain"sv },
     134              :     Gm1ProgramData{ GM1Program::FX2Soundtrack, "Soundtrack"sv },
     135              :     Gm1ProgramData{ GM1Program::FX3Crystal, "Crystal"sv },
     136              :     Gm1ProgramData{ GM1Program::FX4Atmosphere, "Athmosphere"sv },
     137              :     Gm1ProgramData{ GM1Program::FX5Brightness, "Brightness"sv },
     138              :     Gm1ProgramData{ GM1Program::FX6Goblins, "Goblins"sv },
     139              :     Gm1ProgramData{ GM1Program::FX7Echoes, "Echoes"sv },
     140              :     Gm1ProgramData{ GM1Program::FX8SciFi, "Sci-Fi"sv },
     141              :     Gm1ProgramData{ GM1Program::Sitar, "Sitar"sv },
     142              :     Gm1ProgramData{ GM1Program::Banjo, "Banjo"sv },
     143              :     Gm1ProgramData{ GM1Program::Shamisen, "Shamisen"sv },
     144              :     Gm1ProgramData{ GM1Program::Koto, "Koto"sv },
     145              :     Gm1ProgramData{ GM1Program::Kalimba, "Kalimba"sv },
     146              :     Gm1ProgramData{ GM1Program::BagPipe, "Bagpipe"sv },
     147              :     Gm1ProgramData{ GM1Program::Fiddle, "Fiddle"sv },
     148              :     Gm1ProgramData{ GM1Program::Shanai, "Shanai"sv },
     149              :     Gm1ProgramData{ GM1Program::TinkleBell, "Tinkle Bell"sv },
     150              :     Gm1ProgramData{ GM1Program::Agogo, "Agogo"sv },
     151              :     Gm1ProgramData{ GM1Program::SteelDrums, "Steel Drums"sv },
     152              :     Gm1ProgramData{ GM1Program::Woodblock, "Woodblock"sv },
     153              :     Gm1ProgramData{ GM1Program::TaikoDrum, "Taiko Drum"sv },
     154              :     Gm1ProgramData{ GM1Program::MelodicTom, "Melodic Drum"sv },
     155              :     Gm1ProgramData{ GM1Program::SynthDrum, "Synth Drum"sv },
     156              :     Gm1ProgramData{ GM1Program::ReverseCymbal, "Rev. Cymbal"sv },
     157              :     Gm1ProgramData{ GM1Program::GuitarFretNoise, "GtrFret Noise"sv },
     158              :     Gm1ProgramData{ GM1Program::BreathNoise, "Breath Noise"sv },
     159              :     Gm1ProgramData{ GM1Program::Seashore, "Seashore"sv },
     160              :     Gm1ProgramData{ GM1Program::BirdTweet, "Bird Tweed"sv },
     161              :     Gm1ProgramData{ GM1Program::TelephoneRing, "Telephone"sv },
     162              :     Gm1ProgramData{ GM1Program::Helicopter, "Helicopter"sv },
     163              :     Gm1ProgramData{ GM1Program::Applause, "Applaus"sv },
     164              :     Gm1ProgramData{ GM1Program::Gunshot, "Gunshot"sv },
     165              : };
     166              : static_assert(GM1_PROGRAM_DATA.size() == 128);
     167              : } // namespace
     168              : } // namespace mu::iex::midi
     169              : 
     170          118 : std::string_view mu::iex::midi::getMidiName(const GM1Program program)
     171              : {
     172          118 :     const auto& data = GM1_PROGRAM_DATA[static_cast<std::size_t>(program)];
     173              : 
     174          118 :     return data.midiName;
     175              : }
        

Generated by: LCOV version 2.0-1