2014-10-23 2 views
2

Мне нужно воспроизвести файл MIDI из приложения Windows Store. (т. е. само приложение должно генерировать звук в программном обеспечении — Я не хочу выводить MIDI на аппаратное устройство.)Воспроизведение MIDI-файла в приложении Windows Store

Я надеялся на некоторый простой API/библиотеку, где я могу просто передать местоположение файла и возможно, звуковой шрифт и вызвать функцию «играть», но я не смог найти такую ​​вещь. например FluidSynth выглядит как it will do just this, но у него нет версии для приложений Windows Store.

Microsoft recently introduced новый Windows Runtime API for MIDI, но это не содержит никакого кода для работы с MIDI-файлами.

открытым исходным кодом библиотека NAudioделает по-видимому, включают в себя код для чтения MIDI-файлы, так что я думаю, что мне нужно реализовать что-то, что открывает файл с NAudio, читает/разбирает MIDI события, а затем воспроизводит их через программное обеспечение Microsoft GS Wavetable Synth через новый API предварительного просмотра MIDI (выполнение моего собственного планирования, чтобы сообщения отправлялись в нужное время).

Update: Microsoft, sample code для перечисления MIDI портов перечислены USB MIDI-устройства в то время как они связаны, но без USB устройств, подключенных не сообщает "No MIDI порты".

N.B. Пример кода перечисляет порты, передавая возвращаемое значение MidiOutPort::GetDeviceSelector в метод DeviceInformation::FindAllAsync. Это должно, насколько я вижу, перечислять все доступные MIDI-устройства.

Однако на том же компьютере установлен синтезатор Microsoft , расположенный в приложениях для настольных компьютеров, например. с помощью метода DirectMusic EnumPort.

Означает ли это, что для приложений Windows Store не существует программного обеспечения по умолчанию? Нужно ли мне также реализовать собственный синтезатор?

Update 2: Я теперь нашел somecomments из членов Microsoft сотрудников, подтверждающих, что WindowsPreview MIDI API не поддерживает синтезатор программного обеспечения по умолчанию.

Будет ли это работать? Это правильный подход? Есть ли более простой метод/API/сторонняя библиотека, которую я пропустил?

Update 3: Похоже, что версия WinRT из NAudio не включает в себя функциональные возможности MIDI, так что кажется, что я буду строить как MIDI-секвенсор и синтезатор с нуля. (Возможно, использование NAudio в реализации синтезатора.)

+1

По-видимому, на самом деле нет секвенсора. –

+1

Вы видели [этот образец] (https://code.msdn.microsoft.ком/windowsapps/MIDI-Windows-выполнения выборки-4fd6dcbc /)? – Alovchin

+0

У этого есть секвенсор. http://www.codeproject.com/Articles/6228/C-MIDI-Toolkit – obiwanjacobi

ответ

1

Это стареющий вопрос, но для полноты я хотел ответить на вопрос о доступных синтезаторах. Microsoft открыла Microsoft General Midi Wave Table Synth для хранения приложений через пакет nuget. Он отлично работает с новыми Midi API в UWP. Вы также можете проверить библиотеку C# Midi Library Лесли Сэнфорда для хорошей отправной точки для базового секвенсора. Он использует библиотеки Win32 MM через P/Invoke, но было бы достаточно просто модифицировать новый Midi Api.

Смежные вопросы