Как я могу играть сжатые звуковые файлы в C# портативным способом?

Есть ли разница между следующим кодом?

blockquote>

Нет, нет функциональной разницы между двумя примерами кода в вашем вопросе. .click(fn) - это «метод быстрого доступа» для .on("click", fn). Из документация для .on() :

Существуют короткие методы для некоторых событий, таких как .click() , которые можно использовать для присоединения или обработчиков событий триггера.

blockquote>

Обратите внимание, что .on() отличается от .click() тем, что имеет возможность создавать делегированных обработчиков событий , передав параметр selector, тогда как .click() этого не делает. Когда .on() вызывается без параметра selector, он ведет себя точно так же, как .click(). Если вы хотите делегировать событие, используйте .on().

19
задан skolima 2 August 2011 в 10:32
поделиться

8 ответов

Я наконец пересмотрел эту тему, и, с помощью справки от BrokenGlass при записи заголовка WAVE , обновил csvorbis. Я добавил OggDecodeStream, который может быть передан System.Media.SoundPlayer для простого проигрывания любого (совместимого) потока Ogg Vorbis. Использование в качестве примера:

using (var file = new FileStream(oggFilename, FileMode.Open, FileAccess.Read))
{
  var player = new SoundPlayer(new OggDecodeStream(file));
  player.PlaySync();
}

'Совместимый' в этом случае означает, что 'он работал, когда я испытал его'. Декодером полностью управляют, хорошо работает на Microsoft .NET - в данный момент, кажется, существует регрессия в Mono SoundPlayer, который вызывает искажение.

Устаревший:

System.Diagnostics.Process.Start("fullPath.mp3");

я удивлен, но метод Dinah упомянула на самом деле работы. Однако я думал о проигрывании коротких звуков "звона" на различных событиях, происходящих в программе, я не хочу запускать медиаплеер пользователя каждый раз, когда я должен сделать 'ping!' звук.

Что касается ссылки проекта кода - это - к сожалению, только обертка P/Invoke.

7
ответ дан 30 November 2019 в 05:17
поделиться

Вызов чего-то, что расположено в 'Системе. Диагностика для проигрывания звука похожа на довольно плохую идею мне. Вот то, для чего предназначена та функция:

    //
    // Summary:
    //     Starts a process resource by specifying the name of a document or application
    //     file and associates the resource with a new System.Diagnostics.Process component.
    //
    // Parameters:
    //   fileName:
    //     The name of a document or application file to run in the process.
    //
    // Returns:
    //     A new System.Diagnostics.Process component that is associated with the process
    //     resource, or null, if no process resource is started (for example, if an
    //     existing process is reused).
    //
    // Exceptions:
    //   System.ComponentModel.Win32Exception:
    //     There was an error in opening the associated file.
    //
    //   System.ObjectDisposedException:
    //     The process object has already been disposed.
    //
    //   System.IO.FileNotFoundException:
    //     The PATH environment variable has a string containing quotes.
1
ответ дан 30 November 2019 в 05:17
поделиться

Я не хочу ничего распространять двоичные файлы с моим приложением или зависят от P / Invoke, так как проект должен работать как минимум в Windows и Linux. Меня устраивает связка .Net сборки, пока они лицензия совместима с GPL.

К сожалению, будет невозможно избежать распространения двоичных файлов или избежать P / Invoke. В любом случае библиотеки классов .net используют P / Invoke, управляемый код должен в какой-то момент взаимодействовать с API неуправляемой операционной системы, чтобы что-то делать.

Преобразование файла OGG в PCM должно быть возможным в управляемом коде, но поскольку в .net нет встроенной поддержки звука, у вас действительно есть 3 варианта:

  1. Вызвать внешнюю программу для воспроизведения звука (как предлагалось ранее)

  2. P / Вызов модуля C для воспроизведения звука

  3. ] P / Вызов API ОС для воспроизведения звука.

(4.) Если вы запускаете этот код только в Windows, вы, вероятно, могли бы просто использовать DirectShow.

P / Invoke можно использовать на разных платформах. http://www.mono-project.com/Interop_with_Native_Libraries#Library_Names

После получения данных PCM (с помощью библиотеки OGG C или управляемого кода, что-то вроде этого http: //www.robburke .net / mle / mp3sharp / , конечно, есть проблемы с лицензированием MP3), вам понадобится способ воспроизвести его, к сожалению .net не дает прямой оценки вашей звуковой карте или методов для воспроизведения потокового звука. Вы можете преобразовать файлы ogg в PCM при запуске, а затем использовать System.Media.SoundPlayer для воспроизведения сгенерированных файлов wav. Текущий метод, предлагаемый Microsoft, использует P / Invoke для доступа к API воспроизведения звука в ОС http://msdn.microsoft.com/en-us/library/ms229685.aspx

Кросс-платформенный API для воспроизведения звука PCM является OpenAL, и вы должны иметь возможность воспроизводить звук (PCM), используя привязки C # для OpenAL на сайте www.taoframework.com,

2
ответ дан 30 November 2019 в 05:17
поделиться

Вы не можете сделать это, не используя что-то еще для управления игрой.

Использование System.Diagnostic запускает внешнее программное обеспечение, и я сомневаюсь, что вы этого хотите, верно? Вы просто хотите, чтобы звуковой файл X воспроизводился в фоновом режиме, когда Y происходит в вашей программе, верно?

Проголосовали, потому что это выглядит как интересный вопрос. : D

-1
ответ дан 30 November 2019 в 05:17
поделиться

Думаю, вам стоит взглянуть на fmod, который является матерью всех аудио API

, пожалуйста, не стесняйтесь мечтать о http: //www.fmod.org/index.php/download#FMODExProgrammersAPI

1
ответ дан 30 November 2019 в 05:17
поделиться

Ну, это зависит от патентных законов в данной стране, но, насколько мне известно, нет способа написать декодер mp3 без нарушения патентов. Я думаю, что лучшим кроссплатформенным решением с открытым исходным кодом для вашей проблемы является GStreamer . Он имеет привязки к C #, которые быстро развиваются. Однако использование и сборка GStreamer в Windows - непростая задача. Здесь - хорошая отправная точка. В проекте Banshee используется этот подход, но он пока не может использоваться в Windows (однако есть некоторые почти работающие ночные сборки). FMOD также является хорошей альтернативой. К сожалению, это не открытый исходный код, и я считаю, что его API так или иначе оформлен в стиле C.

0
ответ дан 30 November 2019 в 05:17
поделиться

Существует чистый декодер vorbis на C# с открытым исходным кодом:

http://anonsvn.mono-project.com/viewvc/trunk/csvorbis/

0
ответ дан 30 November 2019 в 05:17
поделиться

XNA Audio API хорошо работает в приложениях .net/c# и прекрасно подходит для этого приложения. Триггер на основе событий, а также одновременное воспроизведение нескольких звуков. Именно то, что вам нужно. О, и сжатие тоже.

0
ответ дан 30 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: