Как играть в mp3 файлы на С#?
Я пытаюсь воспроизвести файл MP3 на С# с помощью этого руководства:
http://www.crowsprogramming.com/archives/58
И я делаю все перечисленное, но я все еще не могу играть музыку в своей программе на С#. Может ли кто-нибудь сказать мне, что я делаю неправильно?
static void Main(string[] args)
{
WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer();
a.URL = "song.mp3";
a.controls.play();
}
Музыкальный файл "Song" находится в папке bin.
Ответы
Ответ 1
Я не использовал COM-объект проигрывателя Windows Media, но здесь ссылку на альтернативный метод. (Я не автор.) Он использует pinvoke для вызова winmm.dll для воспроизведения MP3. Я тестировал его на Windows Server 2008, и он работал нормально.
Здесь образец класса с использованием кода формирует ссылку.
using System.Runtime.InteropServices;
public class MP3Player
{
private string _command;
private bool isOpen;
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback);
public void Close()
{
_command = "close MediaFile";
mciSendString(_command, null, 0, IntPtr.Zero);
isOpen = false;
}
public void Open(string 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, IntPtr.Zero);
}
}
}
Ответ 2
все, что вам нужно сделать, это добавить ссылку на компонент COM-проигрывателя Window Media. Вам нужно добавить ссылку на файл wmp.dll, который вы можете найти в каталоге System32.
Ответ 3
Я не уверен, что это все еще актуально, но когда я его пробовал, он работал только тогда, когда код выполнялся не в основном потоке, т.е. this.InvokeRequired == false
Итак, я бы посоветовал вам попробовать что-то вроде:
ThreadPool.QueueUserWorkItem(
delegate(object param)
{
WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();
player.URL = "song.mp3";
});
player.controls.play()
не требуется, так как плеер настроен на автоматическое воспроизведение.
Я не уверен, почему основной поток не будет воспроизводиться правильно, но я надеюсь, что это поможет.
Ответ 4
вы можете попытаться удалить свой код из "основного" события и поместить его в "form_load" или "button_click" или что-то в этом роде. вызывают то, как он выглядит, он должен работать. также, как предложил Роберт Седер, вы можете попытаться написать весь путь для mp3 файла.
Ответ 5
Есть несколько вещей, которые я хотел бы попробовать:
1) Полностью квалифицируйте путь к этому файлу .mp3, на всякий случай.
2) Попробуйте a.Ctlcontrols.play(); вместо этого.
Кроме того, я почти уверен, что это элемент управления Windows (ActiveX), который вы пытаетесь загрузить. Для загрузки и работы может потребоваться контекст Windows. Я уверен, что есть еще один способ воспроизвести .mp3, потому что я использовал его раньше, но я не смог найти код. Возможно, это была часть DirectX SDK. Надеюсь, что это поможет.
Ответ 6
Простым способом, нужен следующий код:
1.В первой добавьте System.Runtime.InteropServices
namespase.
2.In класс создает:
static class Program
{
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand,
StringBuilder strReturn,
int iReturnLength,
IntPtr hwndCallback);
//some code
}
3. Добавить атрибут в основном методе:
[STAThread]
static void Main(string[] args)
{//some code}
И затем создайте способ игрока, так:
public void player()
{
mciSendString("open \"" + "mp3 file path" + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play MediaFile", null, 0, IntPtr.Zero);
}
Ответ 7
У меня была та же проблема, и я решил установить плеер как Статический, например:
public class MiClass(){
static WMPLib.WindowsMediaPlayer wplayer;
private void PlayMusic()
{
wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "c:\shoryuken.mp3";
wplayer.controls.play();
}
}