px330 Ответов: 1

MCI API midi проблема


Я Использую Wpf.
Я разбора файла MIDI и использовать midioutshortmsg, чтобы отправить сообщение в цикле for,
и сон для задержки Дельта времени;
Мое воспроизведение отстает ,но, когда я одновременно открываю другое midi-программное обеспечение
(включите WindowMediaPlayer) ,вся проблема в sloved,моя программа работает нормально.
Когда я закрываю другое открытое программное обеспечение.Проблема в том, чтобы вернуться.

Моя программа застряла здесь.
Я уже пробовал отправить в midistreamout,MidiOutProc или midioutlongmsg и т. д.,Но моя проблема все еще не может решить.

Что я уже пробовал:

Какой-То Код Здесь:

[DllImport("winmm.dll")]
частная внешний статический тип int midiOutOpen(из lphMidiOut инт, инт uDeviceID, dwCallback инт dwInstance инт, инт элемент dwflags);
[DllImport("winmm.dll")]
public extern static int midiOutShortMsg(int lphMidiOut, int dwMsg);

public int midiOut;

частная Play_Click недействительным(объект отправителя, RoutedEventArgs е)
{
midiOutOpen(out midiOut, 0, 0, 0, 0);

InstanceCaller = Новый Поток(new ThreadStart(SendMessage));
InstanceCaller.Начать();
}

private void SendMessage()
{
for (int i = 0; i < melodyList.Граф; i++)
{
var messgae = конвертировать.ToInt32(мелодист[i], 16);
midiOutShortMsg(midiOut, messgae);
Нить.Сон(Новообращенный.ToInt32(список длительности[i]));
}
}

1 Ответов

Рейтинг:
2

Gerry Schmitz

"Воспроизведение" требует баланса между "движком" и плеером. Скорее всего, вам нужно лучше буферизировать, и ваш "сон" не помогает. Тот факт, что он работает "лучше" в условиях конкуренции, говорит о том, что вам нужно больше думать о том, "почему" у вас вообще есть цикл "для и сна". Прочтите документы о "воспроизведении".