Есть ли разница между следующим кодом?
blockquote>Нет, нет функциональной разницы между двумя примерами кода в вашем вопросе.
.click(fn)
- это «метод быстрого доступа» для.on("click", fn)
. Из документация для.on()
:Существуют короткие методы для некоторых событий, таких как
blockquote>.click()
, которые можно использовать для присоединения или обработчиков событий триггера.Обратите внимание, что
.on()
отличается от.click()
тем, что имеет возможность создавать делегированных обработчиков событий , передав параметрselector
, тогда как.click()
этого не делает. Когда.on()
вызывается без параметраselector
, он ведет себя точно так же, как.click()
. Если вы хотите делегировать событие, используйте.on()
.
Я наконец пересмотрел эту тему, и, с помощью справки от 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.
Вызов чего-то, что расположено в 'Системе. Диагностика для проигрывания звука похожа на довольно плохую идею мне. Вот то, для чего предназначена та функция:
//
// 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.
Я не хочу ничего распространять двоичные файлы с моим приложением или зависят от P / Invoke, так как проект должен работать как минимум в Windows и Linux. Меня устраивает связка .Net сборки, пока они лицензия совместима с GPL.
К сожалению, будет невозможно избежать распространения двоичных файлов или избежать P / Invoke. В любом случае библиотеки классов .net используют P / Invoke, управляемый код должен в какой-то момент взаимодействовать с API неуправляемой операционной системы, чтобы что-то делать.
Преобразование файла OGG в PCM должно быть возможным в управляемом коде, но поскольку в .net нет встроенной поддержки звука, у вас действительно есть 3 варианта:
Вызвать внешнюю программу для воспроизведения звука (как предлагалось ранее)
P / Вызов модуля C для воспроизведения звука
] 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,
Вы не можете сделать это, не используя что-то еще для управления игрой.
Использование System.Diagnostic запускает внешнее программное обеспечение, и я сомневаюсь, что вы этого хотите, верно? Вы просто хотите, чтобы звуковой файл X воспроизводился в фоновом режиме, когда Y происходит в вашей программе, верно?
Проголосовали, потому что это выглядит как интересный вопрос. : D
Думаю, вам стоит взглянуть на fmod, который является матерью всех аудио API
, пожалуйста, не стесняйтесь мечтать о http: //www.fmod.org/index.php/download#FMODExProgrammersAPI
Ну, это зависит от патентных законов в данной стране, но, насколько мне известно, нет способа написать декодер mp3 без нарушения патентов. Я думаю, что лучшим кроссплатформенным решением с открытым исходным кодом для вашей проблемы является GStreamer . Он имеет привязки к C #, которые быстро развиваются. Однако использование и сборка GStreamer в Windows - непростая задача. Здесь - хорошая отправная точка. В проекте Banshee используется этот подход, но он пока не может использоваться в Windows (однако есть некоторые почти работающие ночные сборки). FMOD также является хорошей альтернативой. К сожалению, это не открытый исходный код, и я считаю, что его API так или иначе оформлен в стиле C.
Существует чистый декодер vorbis на C# с открытым исходным кодом:
XNA Audio API хорошо работает в приложениях .net/c# и прекрасно подходит для этого приложения. Триггер на основе событий, а также одновременное воспроизведение нескольких звуков. Именно то, что вам нужно. О, и сжатие тоже.