예전에 dll을 통해 mp3를 재생하는 방법( http://topnanis.tistory.com/136)을 올렸었는데 주석을 원하시는 분들이 계셔서 다시 한번 포스팅합니다. 

우선 이 방법은 mp3뿐만 아니라 유사한 방법으로 mpg, wav와 같은 비디오 재생도 가능한듯 보이구요.
( http://blog.naver.com/dinho3/120027507526 )


이해하기 좋으시라고 바로 쓸수 있는 예제로 편집해 보았습니다. 아래 코드는 재생을 위한 최소한의 코드입니다.


using System;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Playing_MP3_songs
{
    public partial class Form1 : Form
    {

//c코드로 작성된 dll을 부르기 위함. C#에서 지원하는게 아니므로 네이티브코드에서 작성된 코드를 활용한다는 거네요 
        [DllImport("winmm.dll")]
//dll 속에 있는 이 메소드를 사용하겠다. 물론 dll속의 파일을 편집하거나 디버깅을 할수는 없답니다. (.h)에 제공해주시는 것만 쓰는거죠
        private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);


        public Form1()
        {
//            form1내에 버튼등의 UI라 주석처리해봤구요 
//            InitializeComponent();

//파일명은 경로를 찍어주시면 됩니다. debug나 release 폴더 내에 있는 파일을 바로 쓰실때에는 " .\\abc.mp3"
            mciSendString("open \"" + "c:\\0.mp3" + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
            mciSendString("play MediaFile", null, 0, IntPtr.Zero);

        }
    }
}
  

끝. 재생이 되는 코드는  임폴트1줄, 전역2줄, 지역에 경로1줄, 실행1줄 총 네줄 입니다.

콘솔창(form에 띄우지 않고) 실행은 되지 않습니다. dll이라 에러문은 뜨지 않습니다. 


파일을 리스트에 넣어 곡을 일시정지시키거나 다음곡, 전곡 등의 확장된 기능을 가진 라이브러리를 첨부합니다. 필요하신 분들 사용하세요~


 
 
신고
Posted by 준환이형님

댓글을 달아 주세요

  1. 지나가는행인1 2012.02.15 02:22 신고 Address Modify/Delete Reply

    안녕하세요^^ 오늘 몇번이나 찾아오는질 모르겠네요 ㅠ_ㅠ
    덕분에 mp3실행방법 잘 보고 가네요~

    근데 한가지 궁금한게 있는데요 ㅠ_ㅠ
    이렇게 하면 mp3 실행이 잘되는데
    resource에만 추가를 하면 mp3가 손상이됬다나.. 뭐라나 하는데

    혹시 mp3를 절대경로가 아니라 resource에
    추가해서 exe파일로만 실행되게끔 하는 방법 아시나요...? ㅠ_ㅠ

  2. bluelimn 2013.11.19 10:46 신고 Address Modify/Delete Reply

    좋은 자료 감사합니다.
    올려주신 자료가 공부하는데 많은 도움이 되네요.


Playing MP3 songs using mciSendString function

참고출처 : http://forum.codecall.net/csharp-tutorials/20420-tutorial-playing-mp3-files-c.html


갈수록 빠져드는 C#의 매력! ㅋ

C#은 사용이 기본적으로 어렵지 않을 뿐 아니라 라이브러리가 강력하다는 장점이 있습니다. 그리고 상황에 따라서는 순수 WinAPI dll을 가져올 수도 있죠.

오늘의 예제는 ArekBulski님(러시아분?)이 오픈소스 사이트(http://forum.codecall.net)에 올리신 예제입니다.


 
임포트하구요

using System.Runtime.InteropServices;


다음 폼과 같이 만듦니다. 텍스트창 하나, 버튼 3

Browse(불러오기)버튼을 아래코드로 채워줍니다.
 

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    FilenameTextbox.Text = openFileDialog1.FileName;

    button3.Enabled = true; //So you dont play no file. lol
}



그런다음 메인 폼 클래스에 DLL을 읽어오기 위한 P/Invoke 정의를 붙이고



[DllImport("winmm.dll")] private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);


버튼 3은 재생

private void button3_Click(object sender, EventArgs e) { mciSendString("open \"" + FilenameTextbox.Text + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); mciSendString("play MediaFile", null, 0, IntPtr.Zero); button3.Enabled = false; button2.Enabled = true; }



버튼 2는 중지 코드를 입력 해 줍니다.
private void button2_Click(object sender, EventArgs e) { mciSendString("close MediaFile", null, 0, IntPtr.Zero); button2.Enabled = false; button3.Enabled = true; }




mp3 재생이 이렇게 쉽다니 ... ㅇㅅㅇ



신고
Posted by 준환이형님

댓글을 달아 주세요

  1. h0ney 2011.07.28 02:17 신고 Address Modify/Delete Reply

    ㅋㅋㅋ C# 에 빠졌군~

  2. juje 2011.07.30 09:48 신고 Address Modify/Delete Reply

    아놔....자료 찾으로 왔는데 니 얼굴이 보이네.. 멋진 새끼..

  3. Denial 2011.08.01 12:59 신고 Address Modify/Delete Reply

    WPF에서 MediaPlayer나 SoundPlayer를 쓰면 더 쉽게 재생할 수 있어용 ㅋㅋ

  4. 이승현 2011.08.07 17:19 신고 Address Modify/Delete Reply

    닷넷으로 mp3 재생좀 할려고 여기 저기 찾았는데..

    잘 배웠습니다. 감사합니다.^^

  5. 2011.11.29 23:47 Address Modify/Delete Reply

    비밀댓글입니다

  6. 2012.01.03 20:21 Address Modify/Delete Reply

    비밀댓글입니다

  7. Vocanic 2012.06.16 10:33 신고 Address Modify/Delete Reply

    저기 c#초보자라서 그런데
    openFileDialog1 컨텍스트 할수 없다고 뜨면 어떻게 하나요?

  8. 김민준 2014.07.14 20:45 신고 Address Modify/Delete Reply

    중간중간 변수선언이있는데 제대로 어느 부분에 있는지 자세하게 설명해주시면 감사하겠씁니다.

  9. 지나가는행인 2017.03.28 00:50 신고 Address Modify/Delete Reply

    빠진게 있어서 씁니다.

    openFileDialog을 폼에 넣어 주셔야 합니다. 툴박스 Dialog 탭에 있습니다.

    그리고 텍스트 박스의 기본 이름이 textbox1 로 돼있을텐데 저 위에거 그대로 코딩하시면 에러가 납니다. FilenameTextbox로 바꾸시던지 코드에서 textbox1 로 바꾸던지 해야 됩니다.