Воспроизведение звуков с помощью Symbol Developer Kit в c # - PullRequest
2 голосов
/ 04 марта 2010

Мы разрабатываем мобильное приложение, предназначенное для устройств, выпускаемых Symbol. На этих устройствах Windows Mobile является системой.

Наше приложение воспроизводит звуки (на самом деле простые звуковые сигналы): мы используем комплект разработчика, предоставленный Symbol, для доступа к звуковой карте устройства и воспроизведения звуков.

вот код, который мы используем:

Symbol.Audio.Device MyDevice = (Symbol.Audio.Device)Symbol.StandardForms.SelectDevice.Select(
      Symbol.Audio.Controller.Title,
      Symbol.Audio.Device.AvailableDevices);

Symbol.Audio.Controller sound_card = new Symbol.Audio.StandardAudio(MyDevice);

int Duration = 15;
int Frequency = 3000;
sound_card.PlayAudio(Duration, Frequency);

с длительностью в миллисекундах и частотой в герцах.

Почти всегда звук воспроизводится правильно (я имею в виду, что звуки воспроизводятся с правильной продолжительностью).

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

Мы бы хотели избежать такого, потому что это очень мешает пользователям.

Я понятия не имею, почему существует такое поведение: в приложении ничего не меняется между коротким звуком и длинным звуком. Данные приложения такие же, никакая другая задача и никакая фоновая задача не выполняются приложением.

Этот звуковой сигнал воспроизводится, когда пользователю отображается определенный экран (я имею в виду, что объект формы создан, и во время его инициализации воспроизводится звуковой сигнал). Поэтому я думаю, что, возможно, звук воспроизводится, когда процессор сильно используется. А поскольку процессор занят, воспроизведение звука в нужное время не дает успеха.

Вы уже встречались с этой проблемой раньше? (Возможно, это специфично для набора Symbol Developper, и некоторые из вас, возможно, уже использовали id).

Знаете ли вы, как избежать таких длинных гудков?

РЕДАКТИРОВАТЬ: Я реализовал решение ctacke: я играю звуковой сигнал в отдельном потоке с высоким приоритетом. Кроме того, я увеличил продолжительность звука (я поставил 30 миллисекунд вместо 15: возможно, чем больше продолжительность, тем лучше система сможет воспроизводить звук в течение правильного промежутка времени).

Я пока не знаю, решает ли эта реализация эту проблему или нет: из-за неопределенности ошибки, потребуется некоторое время, чтобы убедиться, что проблема решена.

Спасибо за ваши ответы, мне это очень помогло.

Ответы [ 2 ]

0 голосов
/ 04 марта 2010

Убедитесь, что вы используете последнюю версию SDK.Как вы, возможно, уже знаете, Symbol теперь является частью Motorola, а их Symbol Developer Kit теперь переименован в Enterprise Mobility Developer Kit.Последняя версия EMDK v2.3 была выпущена в январе.

Возможно, проблема, с которой вы столкнулись, уже была устранена, если она была ошибкой в ​​их SDK (примечания к выпуску всех SDK есть на их веб-сайте поддержки ).

0 голосов
/ 04 марта 2010

Я предполагаю, что вы получаете GC во время воспроизведения звука, и это приводит к хаосу при включении / выключении (хотя, не зная точно, как Symbol реализовал вызов, трудно сказать).

В качестве первого удара я бы подбросил звук, воспроизводимый в отдельный поток, и провернул его приоритетность, используя P / Invoke к CeSetThreadPriority (а не только управляемое свойство Thread.Priority). Это исключает возможность потери кванта драйвером или чем-то еще, хотя длительность паузы говорит о том, что это не квант, а скорее проблема приложения.

Если окажется, что это связано с GC (RPM, вероятно, поможет вам определить это), тогда я создам собственную библиотеку, которая выполняет аудио, и P / Invoke. GC не может связываться с потоками nati8ve, поэтому вы сохраните свой детерминизм.

...