public virtual int GetProgramPitchName(int listId, int programIndex, short midiPitch, StringBuilder name)
        {
            if (ProgramLists.Contains(listId))
            {
                var programList = ProgramLists[listId];

                if (programIndex >= 0 && programIndex < programList.Count)
                {
                    var program = programList[programIndex] as ProgramWithPitchNames;

                    if (program != null)
                    {
                        if (program.PitchNames.ContainsKey(midiPitch))
                        {
                            name.Append(program.PitchNames[midiPitch]);

                            return(TResult.S_OK);
                        }
                    }

                    return(TResult.S_False);
                }
            }

            return(TResult.E_InvalidArg);
        }
        public virtual int GetProgramListInfo(int listIndex, ref ProgramListInfo info)
        {
            if (listIndex >= 0 && listIndex < ProgramLists.Count)
            {
                var programList = ProgramLists.GetAt(listIndex);

                info.Id           = programList.Id;
                info.Name         = programList.Name;
                info.ProgramCount = programList.Count;

                return(TResult.S_OK);
            }

            return(TResult.E_InvalidArg);
        }
        public virtual int HasProgramPitchNames(int listId, int programIndex)
        {
            if (ProgramLists.Contains(listId))
            {
                var programList = ProgramLists[listId];

                if (programIndex >= 0 && programIndex < programList.Count)
                {
                    var program = programList[programIndex];

                    return(program is ProgramWithPitchNames ? TResult.S_OK : TResult.S_False);
                }
            }

            return(TResult.E_InvalidArg);
        }
        public virtual int GetProgramName(int listId, int programIndex, StringBuilder name)
        {
            if (ProgramLists.Contains(listId))
            {
                var programList = ProgramLists[listId];

                if (programIndex >= 0 && programIndex < programList.Count)
                {
                    var program = programList[programIndex];

                    name.Append(program.Name);

                    return(TResult.S_OK);
                }
            }

            return(TResult.E_InvalidArg);
        }
        public virtual int GetProgramInfo(int listId, int programIndex, string attributeId, StringBuilder attributeValue)
        {
            if (ProgramLists.Contains(listId))
            {
                var programList = ProgramLists[listId];

                if (programIndex >= 0 && programIndex < programList.Count)
                {
                    var program = programList[programIndex];

                    if (program.AttributeValues.ContainsKey(attributeId))
                    {
                        attributeValue.Append(program[attributeId]);

                        return(TResult.S_OK);
                    }

                    return(TResult.S_False);
                }
            }

            return(TResult.E_InvalidArg);
        }