Windows Mobile 6.5 SndPlayAsync - оболочка C #? - PullRequest
0 голосов
/ 27 декабря 2010

Я использую воспроизведение mp3 на Windows Mobile 6.5.Мне нужно использовать функцию API SndPlayAsync, так как я не хочу блокировать вызывающий поток до тех пор, пока файл не будет воспроизведен (SndPlaySync блокируется, пока аудиофайл не воспроизводится).К сожалению, метод SndPlayAsync принимает дескриптор звука вместо пути к звуковому файлу в качестве параметра, поэтому необходимо открыть этот дескриптор до и освободить его после воспроизведения.Проблема в том, что у меня нет никакой информации о завершении воспроизведения в этом API.Кто-нибудь использовал оболочку C # для этого API?Где я могу получить один?Я посмотрел OPENNETCF, но они, похоже, не поддерживают этот API.

С уважением

Ответы [ 3 ]

1 голос
/ 27 декабря 2010

Сначала вам нужно позвонить SndOpen , чтобы получить ручку.Глядя на документы, объявления будут выглядеть примерно так:

[DllImport("coredll", SetLastError=true)]
public static extern int SndOpen(string fileName, out IntPtr handle);

[DllImport("coredll", SetLastError=true)]
public static extern int SndPlayAsync (IntPtr handle, int flags);

[DllImport("coredll", SetLastError=true)]
public static extern int SndClose(IntPtr handle);

Таким образом, вы будете использовать что-то вроде этого для вызова:

IntPtr handle;
var result = SndOpen("myfile.mp3", out handle);
if(result == 0) SndPlayAsync(handle, 0);

...

SndClose(handle);
0 голосов
/ 30 декабря 2010

Если вы используете .NET CF, то нет необходимости создавать оболочку, вы можете просто использовать класс System.Media.SoundPlayer для ее обработки. Есть несколько вариантов, включая PlaySync, который будет воспроизводить звук синхронно.

Например:

string path = "\\Program Files\\SNAP.App.CE\\Content\\5LongLow.wav";
System.Media.SoundPlayer player = new System.Media.SoundPlayer(path);
player.PlaySync();

Вы также можете поместить его в отдельный поток, если не хотите блокировать поток пользовательского интерфейса.

0 голосов
/ 28 декабря 2010

Вы можете использовать SndGetWaitHandle , чтобы получить дескриптор события, о котором будет сообщено после завершения воспроизведения звука. Вы можете использовать API WaitForSingleObject для ожидания или проверки, если событие было установлено.

...