여러 주파수의 톤이 포함 된 사운드를 만들어야합니다. C#에서 이것을 수행 할 수있는 방법이 있습니까?C#에서 복잡한 색조를 생성 할 수 있습니까?
내가 지금까지 본 유일한 톤 생성 방법은 작동하는 console.beep과 관련이 있지만 순수한 톤 (단일 주파수)에만 해당됩니다.
여러 주파수의 톤이 포함 된 사운드를 만들어야합니다. C#에서 이것을 수행 할 수있는 방법이 있습니까?C#에서 복잡한 색조를 생성 할 수 있습니까?
내가 지금까지 본 유일한 톤 생성 방법은 작동하는 console.beep과 관련이 있지만 순수한 톤 (단일 주파수)에만 해당됩니다.
Audiere 라이브러리를 사용하면이 작업을 매우 쉽게 수행 할 수 있습니다. 여기에 "1"버튼에 대한 DTMF 톤을 생성 할 수있는 거의 완전한 C# 프로그램입니다 :
AudioDevice device = new AudioDevice();
OutputStream tone1a = device.CreateTone(697); // part A of DTMF for "1" button
OutputStream tone1b = device.CreateTone(1209); // part B
tone1a.Volume = 0.25f;
tone1b.Volume = 0.25f;
tone1a.Play();
tone1b.Play();
Thread.Sleep(2000);
// when tone1a stops, you can easily tell that the tone was indeed DTMF
tone1a.Stop();
는 C#으로 Audiere을 사용하려면이, 가장 쉬운 방법은 일어나하고 실행 그가 모노에 작품을 주장하는 (Harald Fielker's C# binding를 사용하는 것입니다 및 VS : VS2005의 정식 버전과 C# 및 VC++의 별도 Express 2008 버전을 사용하여 작동하는지 확인할 수 있습니다. Win32 Audiere DLL, lib, and header (모두 동일한 zip에 있음)을 다운로드해야하며 VC++ 및 C#을 사용하여 소스에서 C# 바인딩을 빌드해야합니다.
Audiere를 사용하면 얻을 수있는 장점 중 하나는 통화가 차단되지 않는다는 것입니다. tone1a
이 시작되기 전에 재생을 중지 할 때까지 기다릴 필요가 없습니다. tone1b
은 복잡한 음을 재생할 때 분명히 필요합니다. 얼마나 많은 동시 출력 스트림을 사용할 수 있는지에 대한 상한선을 알지 못하기 때문에 하드웨어/OS가 지원하는 것은 무엇이든 상관 없습니다. 그런데 Audiere는 순수한 생성 된 음색뿐만 아니라 특정 오디오 파일 (MP3, WAV, AIFF, MOD, S3M, XM, IT 자체, Ogg Vorbis, Flac, Speex 외부 라이브러리)도 재생할 수 있습니다.
한 가지 단점은 개별적인 음색을 시작하거나 중지 할 때 약간의 가청음이 발생한다는 것입니다. 이미 연주하고있는 음색에 하나의 음색을 추가하면 눈에 띄지 않습니다. 내가 찾은 가장 쉬운 해결 방법은 각각 톤을 켜거나 끌 때 톤 볼륨을 천천히 올리거나 내리는 것입니다. "딱 맞는 소리"를 내기 위해서는 램프 속도로 놀아야 할 것입니다.
Audiere는 LGPL 라이선스를 받았으며 바인딩에는 라이선스가 첨부되어 있지 않습니다. 시판 제품에서 그의 구속력을 사용하고 싶다면 법적 팀과 상담하거나 Harald를 확보해야합니다. 또는 당신은 당신의 자신의 구속력을 만들고 혼전을 피할 수 있습니다.
Visual C++ Express 2008을 사용하면 bindings/csharp/libaudieresharpglue/vc8.0/libaudieresharpglue.sln.
을 엽니 다. VC++는 자동으로 솔루션을 VS9 솔루션으로 변환합니다.
또 다른 폴더에는 Sourceforge의 Audiere 패키지가 있어야합니다. VC++ 프로젝트 속성에서 구성 속성> C/C++> 일반으로 이동하여 "추가 포함 디렉터리"에 path/to/audiere-1.9.4-win32/include
이 있는지 확인하십시오. 그런 다음 동일한 창에서 Linker> General로 이동하여 "추가 라이브러리 디렉토리"에 /path/to/audiere-1.9.4-win32/lib
이 있는지 확인하십시오. 그런 다음 프로젝트를 빌드 할 수 있어야합니다 (릴리스 모드 인 것이 좋음).이 출력은 vc8.0/Release
폴더에 libaudieresharpglue.dll
입니다.
다음으로 Visual C# Express 2008을 엽니 다. bindings\csharp\test\vc8.0\AudiereCSharpTest.sln
을 열어 솔루션을 변환하십시오. 프로젝트를 잘 빌드해야하지만 실행하면 오류가 발생합니다. 괜찮아; csharp/test/vc8.0/bin/Release
폴더에서 VC++ 솔루션의 libaudieresharpglue.dll과 Sourceforge의 패키지의 audiere.dll을 모두 추가해야합니다.
이제 AudiereCSharpTest를 빌드하고 실행할 수 있어야합니다. 기본적으로 #define stream_test
은 AudiereTest.cs의 맨 위에 주석 처리되지 않으며 하드 드라이브에없는 파일을 참조합니다. 단순히 #define
을 주석 처리하고 noise_test
또는 square_test
의 주석을 제거 할 수 있습니다.
그렇습니다. 세부 사항을 놓친 경우, 잘하면 그들이 자신에 의해 얻을 정도로 작습니다 :)
멋진 라이브러리입니다. NAudio가 나에게 적합하지 않을 경우 자세히 살펴볼 수 있습니다. –
컴파일 할 래퍼의 "libaudieresharpglue.dll"부분을 컴파일하는 데 큰 문제가 있습니다. 내가 바이너리를 잡을 수있는 아이디어는? –
분명히 내가해야 할 일이기 때문에 나는 이것을 받아 들였다. 그러나 당신의 멍청한 증거 설명에도 불구하고, 나는 여전히 "libaudieresharpglue.dll"을 컴파일 할 수 없다 (100 개의 오류에서 멈춤). 링크를하면 입력 파일 '. \ Release \ audiere.obj'를 열 수 없다는 메시지가 나타납니다. 누락 된 초보자가 있습니까? –
예 가능합니다.
Here is a link에 대한 자습서입니다. 그러나 물론이 또한 분명히 Console.Beep 비동기인지 아닌지하지 않습니다 Console.Beep
내가 본 곳에서 이것은 한 번에 하나의 톤 만 생성 할 수도 있습니다. – Joey
당신은 항상 DirectSound를 시도 할 수 있습니다 ...
DirectSound로 복잡한 톤을 생성하는 것과 관련된 링크가 있습니까? –
간단히 말해서 많은 sin() 호출 결과를 웨이브 버퍼에 쓴 다음 해당 버퍼를 다시 재생하도록합니다. – Kylotan
저는 뒷받침 트랙을 재생하면서 피드백을 에뮬레이트하는 프로그램을 만들기 위해 NAudio을보고있었습니다. sine waves at specific frequencies 생성에 관한 블로그 게시물이 있습니다. 귀하가 찾고있는 것을 처리 할 수있는 것으로 여겨집니다.
이것은 지금까지 가장 유망한 것이지만, 나는 하나 이상의 주파수가 함께 작동하지 못하고있다. –
여러 스레드를 사용해 보셨습니까? 설명서에 Windows 혼합 장치 지원에 대한 설명이 나와 있습니다. –
기본적으로 소프트웨어 신디사이저를 구현하거나 타사 라이브러리를 찾아야합니다. 참조 : http://en.wikipedia.org/wiki/Demo_(computer_programming)#Music
귀하의 정보를 위해, 컴퓨터 스피커 (경고음) 사용은 일반적으로 좋은 연습이 아닙니다. 기본 오디오 출력을 사용해야합니다. – decasteljau
나는 실제로 기본 오디오 출력을 사용하는 것을 선호합니다. 결국 그것은 헤드폰을 통과해야합니다. –
중요한 포인트입니다. 삐 소리는 잊어 버려. DirectSound 또는 WaveOut을 사용하려고합니다. 둘 다 관리되지 않는 API이므로 PInvoke를 사용해야하거나 C++/CLI로 전환해야합니다. – CannibalSmith