Problemas con MCI comandos

07/03/2010 - 12:14 por ByB | Informe spam
Hola,

Estoy tratando de crear un tipo de playlist con ficheros MP3. O sea que
tengo una clase MP3Player, y cuando se termina de tocar une cancion,
necesito recibir un mensaje para ocuparme de mandar al MP3Player el
nombre de la proxima cancion que se debe tocar.

Para esto, estoy utilisando comandos mci, pero hasta ahora no he
logrado hacerlo funcionar bien (vease el codigo abajo).

El problema se situa en la funcion Play() : quisiera que se mande un
mensaje al Form del cual se especifica el handle (f.Handle), pero hasta
ahora, el mensaje mandado por mciSendString(_command, null, 0,
f.Handle) lo recibo justo cuando empieza la cancion, y no cuando se
termina ? Porque sucede asi, y que debo cambiar ?

Gracias por los consejos que me puedan proporcionar ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace MiProyecto
{

public enum PlaySoundFlags :uint
{ SND_SYNC = 0x0000, /* play synchronously (default) */
SND_ASYNC = 0x0001, /* play asynchronously */
SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
SND_MEMORY = 0x0004, /* pszSound points to a memory file */
SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
SND_ALIAS = 0x00010000, /* name is a registry alias */
SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
SND_FILENAME = 0x00020000, /* name is file name */
SND_RESOURCE = 0x00040004 /* name is resource name or atom */
}
public class Player
{
Form f;
string fileName;
private string _command;
private bool isOpen;
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand,
StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
[DllImport("WinMM.dll")]
public static extern bool PlaySound(string name, int hModule,
int flags);
[DllImport("winmm.dll")]
private static extern bool PlaySound2(string pszsound, UIntPtr
hmod, uint fdwSound);

public Player(Form f)
{
this.f = f;

}
public void Close()
{
_command = "close MediaFile";
mciSendString(_command, null, 0, IntPtr.Zero);
isOpen = false;
}

public void Open(string sFileName)
{
this.fileName = sFileName;
_command = "open \"" + sFileName + "\" type mpegvideo alias
MediaFile";
mciSendString(_command, null, 0, IntPtr.Zero);
isOpen = true;
}

public void Play(bool loop)
{
if (isOpen)
{
_command = "play MediaFile";
if (loop)
_command += " REPEAT";
mciSendString(_command, null, 0, f.Handle);
//PlaySound(fileName, f.Handle.ToInt32(),
(int)PlaySoundFlags.SND_ASYNC);


}
}
}
}

Les hommes préfèrent les blondes parce que les blondes savent ce que
les hommes préfèrent.
-
Marilyn Monroe -
 

Leer las respuestas

#1 ByB
07/03/2010 - 12:28 | Informe spam
Ademas no veo como puedo pasar los Flags como SND_ASYNC y otros en la
funcion mciSendString()

Gracias por su ayuda.

Quand j'entends discourir des cons au restaurant, je suis affligé,
mais je me console en songeant qu'ils pourraient être à ma table.
- Frédéric Dard -

Preguntas similares