2013-07-07 1 views
1

Я много исследовал звуки для устройств Windows Phone 8 и нашел несколько решений, но они не совсем соответствуют моему делу.Воспроизвести фоновый звук и звуковой эффект в Windows Phone 8

Что мне нужно: я пишу приложение (C# + XAML), которое использует файл в качестве фонового звука (должно быть активным во время навигации по всему приложению), а также для воспроизведения звуковых эффектов.

Какие вопросы:

  • Для фонового звука я мог бы использовать BackgroundAudio агент, но он не отвечает моим требованиям, потому что я хочу, чтобы звук будет воспроизводиться только на фоне моего приложения, и остановить, если мое приложение закрывается или неактивно.
  • Для звуковых эффектов - я пробовал MediaElement, но все равно ничего не удалось сделать, пока я просматриваю все приложение. Когда я покину эту страницу, я закрываю медиа. Думаю, я мог бы использовать это для трюка звуковых эффектов. Кроме того, есть SoundEffect, который не является хорошим решением, поскольку он может воспроизводить только файлы .wav ... Я мог бы использовать его только для звуковых эффектов, но не для фонового звука (файлы большого размера).

Итак, как мне перейти к воспроизведению фонового звука (только внутри моего приложения), если я выберу MediaElement/SoundEffect для воспроизведения звукового эффекта в приложении. Мне нужно решение, которое позволило бы мне сразу воспроизвести 2 звука (фоновый и звуковой эффекты) и фоновый звук, который будет воспроизводиться только во время запуска приложения (0) только для решения проблемы звуковых эффектов.

Любые предложения приветствуются.

ответ

1

Проблема, которую вы видите в своем MediaElement, заключается в том, что вы определяете ее как часть страницы приложения и она перестает играть, как только она исчезает из визуального дерева (т. Е. После OnNavigatedFrom).

Если вы определяете MediaElement как «видимый» как часть фрейма приложения, звук будет продолжать воспроизводиться, пока ваше приложение активно (вам нужно будет обрабатывать события дезактивации, естественно).

Если вы это сделаете, то MediaElement должен работать на ваш фоновый звук.

Знайте, что в вашем приложении может быть только один активный MediaElement проигрыватель, но вы можете использовать SoundEffect для ваших звуковых эффектов.

Update:

Чтобы перевести MediaElement в кадре, то вам нужно создать пользовательский класс PhoneApplicationFrame/XAML, добавить MediaElement к этому XAML, и обратитесь к пользовательскому кадра в App.xaml. CS.

// Do not add any additional code to this method 
private void InitializePhoneApplication() 
{ 
    if (phoneApplicationInitialized) 
     return; 

    // Create the frame but don't set it as RootVisual yet; this allows the splash 
    // screen to remain active until the application is ready to render. 
    RootFrame = new MyCustomPhoneApplicationFrame(); 
    RootFrame.Navigated += CompleteInitializePhoneApplication; 

См. this Dzone article for more about Frame/Page in Windows Phone.

+0

Благодарим вас за ответ. Как сделать MediaElement частью фрейма приложения? Объявить его в App.xaml.cs? – VasileF

+0

Спасибо за обновление. Я прочитал эту ссылку и сделал свой собственный PhoneApplicationFrame из PhoneApplicationPage, и я установил его в App.xaml.cs как RootFrame. Чтобы протестировать его, я попробовал трюк с высотой по ссылке, чтобы вырезать дисплей, и это сработало. В XAML я добавил , но звук не запускается ... Что мне не хватает ? Я также попытался в моем MainPage.xaml активировать его вручную с помощью App.RootFrame.BackgroundMedia.Play(); но без успеха .. Страницы в приложении - пейзажи. Что еще мне нужно делать? – VasileF

0

На практике MediaElement имеет некоторые ошибки, такие как требование визуального дерева. Есть способы обойти это, но они не оптимальны. Я бы предложил отказаться от использования MediaElement и вместо этого использовать XAudio2. Он является родным, поэтому использование по умолчанию будет в C++, но вы также можете использовать SharpDX для доступа к этой структуре с C#.

Преимущество XAudio2 в том, что вам не нужно беспокоиться о выпадении звука при навигации, поскольку он не зависит от пользовательского интерфейса. Другим преимуществом является то, что у вас может быть один SourceVoice для обработки фонового звука и других SourceVoices для обработки воспроизведения звуковых эффектов. Все это хорошо вписывается в модель использования, для которой предназначена инфраструктура.