MediaElement автоматически повторяет клипы и иногда не может их воспроизвести - PullRequest
1 голос
/ 20 марта 2011

У меня есть приложение, которое воспроизводит несколько коротких аудиоклипов.Чтобы воспроизвести их, я просто установил в качестве источника новый путь клипа, который представляет собой WMA, который я закодировал с помощью Expression Encoder с использованием настроек WP7.Не стоит даже делиться кодом - есть обработчик событий.В нем я установил свойство ME.Source для нового Uri.Это установлено на AutoPlay, вот и все!Здесь:

    private void PlaySound(ItemViewModel sound) {
        Model.CurrentSound = sound;
        CurrentSound.Source = new Uri(sound.Path, UriKind.Relative);
    }

    private void Sounds_SelectionChanged(object sender, SelectionChangedEventArgs e) {
        var list = ((ListBox) sender);
        var item = (ItemViewModel) list.SelectedItem;
        SelectItem(item);
    }

Также я должен отметить, что звуки - это все ресурсы (тип сборки = Ресурс).Мне нужно, чтобы они были, потому что приложение должно обнаруживать их динамически.Все пути выглядят так: "sounds / foo / bar / sound.wma".Иногда в пути есть пробел, это URL, закодированный в% 20 (так менеджер ресурсов возвращает путь, я этого не делал).

Проблема в том, что многие люди, но не всеГоворят, что звук автоматически повторяется.Звуки очень короткие, всего несколько секунд, поэтому это очень раздражает.Я не понимаю, как это происходит, MediaElement даже не имеет функции автоповтора.

Возможно, связано, но некоторые также жаловались, что время от времени звук не воспроизводится.Они должны щелкнуть это снова.Все, что я могу думать, - это то, что что-то не так с тем, как кодируются звуки, но они являются WMA, и, как я уже сказал, я кодировал их, используя настройки воспроизведения в WP7 в кодировщике выражений.Как могло случиться, что это работает обычно, но не в других случаях, если бы это было так, в любом случае?

Я в растерянности, и мое приложение получает плохие отзывы из-за этого поведения.Помогите!

Ответы [ 3 ]

2 голосов
/ 20 марта 2011

"есть и обработчик событий", но вы не говорите о чем?Это может быть то событие, которое запускается снова и снова или вообще не срабатывает в некоторых случаях.Потенциально в вашем коде есть логические ошибки, когда вы не смогли отсоединить существующий обработчик, а затем добавили другой.По мере использования вы в конечном итоге обрабатываете одно событие несколькими обработчиками.

Редактировать

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

0 голосов
/ 05 августа 2011

Оказалось, что проблема с повторением требует сделать это:

MediaPlayer.IsRepeating = false;

Я думаю, что то, что произошло, было бы в том случае, если бы пользователь находился в другом приложении, которое устанавливает это значение в true, и после открытия моего приложения это значение все равно оставалось верным! Это должно быть ошибка, это совершенно неожиданно. Если вы посмотрите на другие приложения для воспроизведения звука, такие как приложения на звуковой панели, то в обзорах есть пользователи, жалующиеся на то же самое ... "Хотелось бы, чтобы они не повторяли звуки ..."

0 голосов
/ 20 марта 2011

Звучит так, как будто вы пытаетесь воспроизвести звуковые эффекты - в этом случае вам лучше использовать механизм XNA SoundEffect

например. http://www.japf.fr/2010/08/sound-effect-in-wp7-sl-application/

SoundEffect работает только для файлов WAV (PCM) - но я использовал его в нескольких приложениях и сценариях, включая файлы встроенного содержимого и загруженные файлы (например, перевод и Ironruby сценарии ) ,

Класс XNA хорошо работает в SL и позволяет воспроизводить несколько звуковых эффектов одновременно.

...