블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2804)
Unity3D (860)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

오디오 재생을 위해
.net framework에 기본으로 포함되어 있는
System.Media.SoundPlayer를 사용중 몇가지 문제점을 발견하여
대체할 수 있는 놈들을 아래와 같이 조사해 보았습니다.
최종적으로는 오픈소스인 NAudio 를 선택하였구요..
써보니.. 좋네요.. ^^

1. DirectX

   - http://www.alvas.net/alvas.audio.aspx 
   - Microsoft.DirectX.AudioVideoPlayback.dll 을 참조추가
   - .net 1.x기준으로 만들어진듯함. 2.0~3.5에서는 초기 로딩시 Loader Lock Exception 발생
   - Loader Lock 예외처리 : http://hanury.net/wp/archives/549  
   - .net 4.0에서는 실행안됨

2. System.Media.SoundPlayer

   - 동시에 여러개의 사운드를 재생할 수 없음
   - A가 재생중, B를 멈추면 A도 멈춤
   - 사용이 쉬움
   - Stream 사용이 가능하여 음원을 Resource에 넣어서 배포 가능
   - .wav 파일만 지원함
   

3. Alvas.Net

   - 상용
   - http://www.alvas.net/alvas.audio.aspx 
   - 기능 : Records audio, Plays audio, Set up mixer controls, Edits audio, Converts audio


4. NAudio

   - 무료, 오픈소스
   - http://naudio.codeplex.com/ 
   - Play back audio, Decompress audio, Record audio, Mix and manipulate audio streams 등..
   - Stream 사용가능, wav 및 mp3 사용가능


반응형
Posted by blueasa
, |
간단하게 결론..

Dll 파일을 찾을 수 없어서 나는 에러..

프로그램이 Dll 파일을 찾을 수 있는 곳에 넣어줘야 된다.


추가 : 디버깅 시,
         해당 프로젝트가 찾을 수 있게 넣어줘도 에러가 나서 난리쳤다.
         삽질 결과 해당 프로젝트가 아니라,
         해당 솔루션의 기본 실행 프로젝트가 참조 할 수 있게 해줘야 된다.


반응형
Posted by blueasa
, |
32bit로 만들어진 프로그램(lib, dll 등)이 64bit O/S C# 등에서 쓸려고 할 때,

플랫폼 대상이 'Any CPU'라면 64bit O/S라서 64bit로 돌릴려고 하는 지 제목과 같은 에러가 난다.

32bit로 만들어진 프로그램과 맞게 플랫폼 대상을 'x86(32bit)'으로 해주면 에러가 나지 않는다.


반응형
Posted by blueasa
, |

Library File :




DEVIL.NET has been included in the main DEVIL distribution

Go to the DevIL image library website for the entire package. Here after you can find the older releases and, when a new one will get released, the newer ones.

WHAT IS DEVIL.NET ?

I’ve written a small wrap around the DevIL image library .

As for the .NET viewer, this is a “2 hour project” – that is a project I’ve written in 2 hours before going to sleep.. so no warranty is included! ;)

NOTE : This project is intentionally minimalist. If you want a more complete wrapper over DevIL, have a look at the Tao.Framework.

It allows any .NET program (VB.NET, C#, etc) to open and save files in all formats supported by the DevIL library. Also it opens them as System.Drawing.Bitmap objects, so that it works optimally with existing code.

As now it supports loading in bmp cut dcx dds ico gif jpg lbm lif mdl pcd pcx pic png pnmpsd psp raw sgi tga tif wal act pal and Doom graphics

And saving in : bmp dds jpg pcx png pnm raw sgi tga tif pal

Using it is simple.

As an example you can load/save a picture in a picturebox using (C# and VB.NET):


// C#
System.Drawing.Bitmap bmp = DevIL.DevIL.LoadBitmap(filename);
pictureBox1.Image = bmp;

‘ VB.NET
Dim bmp as System.Drawing.Bitmap
bmp = DevIL.DevIL.LoadBitmap(filename)
pictureBox1.Image = bmp

And you can save the picturebox image using :


// C#
System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)pictureBox1.Image;
DevIL.DevIL.SaveBitmap(filename, bmp);

‘ VB.NET
Dim bmp as System.Drawing.Bitmap
bmp = pictureBox1.Image
DevIL.DevIL.SaveBitmap(filename)
LICENSE & VERSION
C++.NET (Managed C++) Source is included and released under a choice of BSD or LGPL license. You can contact me for additional licensing options if you need them. Binaries are provided in the package, compatible with every version of .NET Framework (from 1.0 to 3.0).
SAMPLES
You can download samples for DevIL.NET library. The sample program is a small utility which acts as a viewer and a converter of image files, written in both C# and VB.NET.

RELEASE NOTES
I’ve done many tries and it seems the stride in .NET framework for 32bit images is always 4*width. While this can be expected, effectively the stride could have any value. As now the code relies heavily on a predictable stride to optimize memory copies.. please report me any bug (marcoPLEASEDELTHIS@mastropaolo.com), especially if you think a different stride is in place.

UPDATES

  • March 4th, 2007 : Release Version 1.3
  • July 12th, 2005 : Fixed a minor bug in initialization, uploaded samples
  • August 23th, 2005 : Release Version 1.1
  • December 8th, 2004 : Release Version 1.0

VERSION 1.1 CHANGES

  • Fixed a bad bug when loading non true color images (above all GIFs)
  • Implemented a new LoadBitmapAndScale which allows for the bitmap to be scaled directly in DevIL.NET
  • Started to implement some error handling…
  • note: From version 1.1, DevIL.NET may require ILU.dll to be installed in addition to DevIL.DLL. Since having an additional DLL is always a burden, ILU.dll is loaded dinamically and it’s not required unless the scale/resize feature is used ;)

VERSION 1.2 CHANGES

  • Support for VS2005, .NET Framework 2.0 on x86 platforms
  • NOTE : When using Devil.NET 1.2 on VS2005, remind to set your projects to use the x86 CPU. Otherwise the program may fail to run on x64 platforms.

VERSION 1.3 CHANGES

  • Fixed the infamous vertical flip bug
  • The v-flip can be done both in ILU code or .NET framework (depending on whether ILU.DLL has been loaded or not; you can load ILU.DLL either by loading an image with scale options or through the LoadILU method).
  • A DevIL.NET2.DLL exists. This is a framework 2.0/3.0 only version which is just a bit smaller than the “every” framework version.

Download Library Version 1.3
Download Library Version 1.2
Download Library Version 1.1
Download Library Version 1.0
Download VC++ sources and project
Download C# and VB.NET Samples
View the source online

반응형
Posted by blueasa
, |

WPF 강좌 링크

Programming/WPF / 2012. 3. 7. 01:44
배워 보세~

링크 :   http://dotnetmvp.tistory.com/22
반응형
Posted by blueasa
, |

최근 만들고 있는 프로그램에 사용할 음성재생 라이브러리를 이것저것 살펴보다가..

WMPLib, MBroMP3, DirectX.AudioVideoPlayback 이렇게 3가지를 놓고 상당한 고민을 했습니다.

이것저것 살펴본결과, 직접 구현하면서 사용하기에는 DirectX.AudioVideoPlayback이 수월해보여 이녀석으로 결정했습니다.

기념으로 DirectX.AudioVideoPlayback을 사용해서 간단하게 음성파일 재생을 구현해 보도록하겠습니다.

 

Microsoft.DirectX.AudioVideoPlayback을 사용하면 생각보다 간편하게 기능을 구현할 수 있습니다만..

.NET 1.1에서 구현된 녀석들을 .NET 2.0에서 사용하면 등장하는 문제인 LoaderLock 버그가 여기에도 존재합니다.

차근차근 구현하고.. 이 LoaderLock이 등장하지 않도록 하는 것까지 오늘은 알아보도록 하겠습니다.

 

우선 가장 먼저 해야할 일은 이 녀석을 사용하기 위한 준비과정이 되겠죠?

아래 그림처럼 참조추가의 .NET탭에서 Microsoft.DirectX.AudioVideoPlayback 항목을 선택해줍니다.


 

 

그러면 솔루션 탐색기에서 추가된 참조를 확인할 수 있습니다.

이녀석을 더블클릭해서 개체 브라우저로 잠시 우리가 사용할 녀석을 확인해보도록하지요.

 


이처럼 설명도 모두 나와있으니, 참고하시면 되겠습니다.

기본적으로 필요한 메소드와 프로퍼티는 모두 제공하고 있으므로 생각보다 쉬울 것 같습니다.

 

간단하게 폼이 로드되면 재생되는 코드를 만들어 볼까요?


그림과 같이 사용하시면 해당 경로의 음악파일을 자동으로 재생합니다. 두 번째 인자를 false로 주면 자동 재생은 안되죠.

이 외에 필요시에는 Play()나 Open()메소드를 이용하시면 되겠습니다.

 

이렇게 했지만.. 아마도 막상 시작을하면 LoaderLock예외가 발생하면서 프로그램이 중단될 것입니다.

아래와 같이 하면.. 완전히 해결하는 것은 아니지만, 프로그램이 죽지않게 할 수 있습니다.

(제가 알고 있는 완벽하게 해결하는 방법은 .Net Framework 1.1을 설치하는 것입니다.)

 

디버그 -> 예외 -> Managed Debugging Assistant -> LoaderLock의 Throw속성을 체크해제합니다.


 

 

LoaderLock예외를 이렇게 처리하고나면 이녀석을 컨트롤과 연결시켜서 사용자의 요구에 따라서 동작하는

재생프로그램을 만들고 싶으실지도 모르겠습니다.

재생시간이나 볼륨을 TrackBar와 연동시키고 싶다면.. TrackBar를 생성하고 TrackBar의 ValueChanged이벤트가

발생했을 때, 해당 Value를 받아와서 수행시키게하고... 재생, 중지등에 대한 적절한 이미지를 만들어 주고, 이 녀석들에 대한 Click이벤트를 Stop(), Pause()등의 메소드들과 연결하시면 되겠습니다.

 

 

문제는 재생중에 재생시간에 대한 TrackBar를 움직여야 한다는 점인데요. 이 부분은 쓰레드로 해결을 하는 수밖에 없겠지요.

Invoke를 사용해서 한다면 특별한 문제점은 없을거라고 생각합니다만..

처음에 언급했던 너무 완벽한 버그인 LoaderLock때문에 문제점이 발생하지 않을지는 저도 해보아야 알것 같습니다.

이 부분은 해보고 빠른 시일내에 이 글을 수정하는 식으로 업데이트하도록 하겠습니다.

 -> 확인결과 이상없이 잘 수행됩니다.

 

 

 

이로써 간단하게 음악파일을 재생할 수 있는 기능을 살펴보았습니다.


 
[출처] 〃C# DirectX.AudioVideoPlayback를 이용한 음성파일 재생.|작성자 Chuls

반응형
Posted by blueasa
, |

C#에서 DirectX를 활용하여 Wave파일을 재생하기 위해서는

새로운 참조를 추가해야 한다...

 

 

 

참조 추가 창에서 .NET 텝을 선택한 후 다음의 두 가지 구성요소를 선택한다.

 

      - Microsoft.DirectX

      - Microsoft.DirectX.DirectSound

 

 

 

참조 추가가 완료되면 솔루션 탐색기의 참조 리스트에 나타나게 된다.

 

 

 

그런 다음 소스 코드에 필요사항을 기입한다.

 

// 해당 참조 포함하기

using Microsoft.DirectX;

using Microsoft.DirectX.DirectSound;

 

// Device 생성자와 Buffer 선언 : Form1 클래스

private Device dsDevice = null;
private SecondaryBuffer buffer = null;

 

// Device 선언 및 설정 : InitializeComponent() 하위
dsDevice = new Device();
dsDevice.SetCooperativeLevel(this, CooperativeLevel.Normal);

 

// 실제 재생 부분

buffer = new SecondaryBuffer("sample.wav", dsDevice);
if(dsDevice != null) buffer.Play(0, BufferPlayFlags.Default);

 

 

DirectX를 활용하여 Wave파일을 재생하면

Winmm.dll API를 사용할 때와 달리 중복하여

Wave파일을 재생할 수 있다.


출처 : http://blog.naver.com/hero_juni/90034144815
반응형
Posted by blueasa
, |
public class dgv : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
return this.ProcessRightKey(keyData);
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
return this.ProcessRightKey(e.KeyData);
}
return base.ProcessDataGridViewKey(e);
}
}



반응형
Posted by blueasa
, |

namespace PropertyGridP

{

    public partial class Form5 : Form

    {

        public Form5()

        {

            InitializeComponent();

        }

 

        private void Form5_Load(object sender, EventArgs e)

        {

            foreach (Control c in this.propertyGrid1.Controls)

            {

                c.MouseClick += new MouseEventHandler(c_MouseClick);

            }

        }

 

        void c_MouseClick(object sender, MouseEventArgs e)

        {

            Control c = (Control)sender;

            MessageBox.Show(c.GetType().FullName);

        }

    }

}


출처 : 
http://social.msdn.microsoft.com/Forums/pl-PL/winforms/thread/ec88bdab-77a0-4dc1-9885-b2407c965166 

반응형
Posted by blueasa
, |

Introduction

This property grid control has been developed in Visual Studio C# 2008. This user control is similar to the standard Microsoft .NET 2.0 PropertyGrid control with several additional features:

  • Gets/sets any property item at runtime (e.g. change property’s help text)
  • New property items (Date and TimeDateTimeFileDirectoryProgressBar, ...)
  • Multi-language support
  • Image Preview
  • Date calendar
  • Numeric interval automatic validation
  • Customizable Boolean type (yes/no, true/false, ..)
  • Customizable engineering unit for numeric values
  • Use .NET standard dialog box, text title, new buttons (show text, apply), ...

This control is fully customizable at runtime. Property items can be added and changed at any time.

Background

The main problem of the Microsoft .NET 2.0 standard Property Grid Control is that it is not easy to control at run-time. Using this control is possible, for example, to change the language at runtime or to change a property that normally is read-only using the standard control.

Using the Code

To run the example project:

  1. Extract all files from ZIP into a folder
  2. Run Visual Studio C #2008 and select the command "File" > "Open project"
  3. Select the file "\Test\Test_mbrPropertyGrid\Test_mbrPropertyGrid.sln"
  4. Select the command "Build" > "Rebuild solution"
  5. Press the [F5] keyboard button to run the program

To build your new test project:

  1. Run Visual Studio C #2008 and create a new project (standard Windows form application)
  2. Add a reference to the .NET DLL "mbrPropertyGrid.dll"
  3. Right-click in toolbox windows and select the command "Choose Items..."
  4. Select the browse button and select the .NET DLL "mbrPropertyGrid.dll"
  5. Drag and drop the new PropertyGrid icon from the toolbox to your project form to add the control to your project
  6. Set the control properties to customize it
  7. Write code to add/manage property items

To logically group the various item objects, at first, add a category item:

mbrPropertyGrid.PropertyItemCategory catItem;
catItem = new mbrPropertyGrid.PropertyItemCategory("Main Category");
PropertyGrid1.CategoryAdd("CatMain", catItem);

To add property items to a category use the .ItemAdd method like the following example :

mbrPropertyGrid.PropertyItemInt32 intItem;
intItem = new mbrPropertyGrid.PropertyItemInt32("Line02 - Age (Int32)", 0);
intItem.SetValidationRange(0, 120, 1);
intItem.SetHelpCaptionText("Age", "Tell me your age (valid range : 0..120)");
PropertyGrid1.ItemAdd("CatMain", "MyAge", intItem);

mbrPropertyGrid.PropertyItemString strItem;
strItem = new mbrPropertyGrid.PropertyItemString
	("Line01 - Name (String)", "Jak", "Jak Smith");
strItem.HelpCaption = "Name";
strItem.HelpText = "Tell me your name...";
PropertyGrid1.ItemAdd("CatMain", "YourName", strItem);

To disable a property item, set the item property .Enabled to false like in the following example:

strItem = new mbrPropertyGrid.PropertyItemString
	("Line03 - Job (String)", "A software developer");
strItem.HelpText = "Tell me about your job";
strItem.Enabled = false;
PropertyGrid1.ItemAdd("CatMain", "K03", strItem);

When you have completed the addition of item objects to force the complete control repaint, run the.RefreshControl(true) method like in the following code:

// Full control repaint
PropertyGrid1.RefreshControl(true);

A quick screen shot control preview. Please note that the standard dialog box will be shown in the same language of the operating system.

mbrPropertygrid_Preview_02.png

mbrPropertygrid_Preview_03.png

mbrPropertygrid_Preview_04.png

mbrPropertygrid_Preview_05.png

mbrPropertygrid_Preview_06.png

mbrPropertygrid_Preview_07.png

mbrPropertygrid_Preview_08.png

mbrPropertygrid_Preview_09.png

mbrPropertygrid_Preview_10.png

mbrPropertygrid_Preview_11.png

mbrPropertygrid_Preview_12.png

mbrPropertygrid_Preview_12.png

mbrPropertygrid_Preview_13.png

Points of Interest

To change the language at runtime, simply change the following properties of the property items: Text,HelpCaptionHelpText (and Description for a Directory Item).

History

  • Version 1.0.0.0 - 28/08/2008: This is the first version. Some points have to be accommodated. For example, there is a known bug on a video refresh of the .Text property. I suggest, at the moment, to disable the Textproperty view by setting .TextVisible = false;

About Me

My name is Massimiliano Brugnerotto and I'm an Italian C# software developer. I believe that open source software is a useful resource and with this article, I will give my contribution to this site that on many occasions gave me interesting development solutions.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


출처 :  http://www.codeproject.com/Articles/28933/A-C-2008-Advanced-Customizable-PropertyGrid-Contro
반응형

'Programming > C#' 카테고리의 다른 글

datagridview에 엔터키치면 오른쪽 셀 이동  (1) 2012.02.22
PropertyGrid catching mouse events  (1) 2012.02.01
Add NumericUpDown in PropertyGrid  (0) 2012.01.20
Nullable 형식 사용  (0) 2012.01.19
MeasureString(문자열 길이 체크)  (0) 2012.01.17
Posted by blueasa
, |