정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8용 마이크에 액세스하는 방법

2014-06-18

이 항목에서는 Microsoft.Xna.Framework.Audio.Microphone 클래스를 사용하여 Windows Phone 앱에서 Windows Phone 마이크의 오디오 입력을 가져오는 방법을 보여 줍니다.

참고참고:

multiple devices 7x27a 프로세서를 사용하면 FM 라디오와 마이크에 동시에 액세스할 수 없습니다.

팁팁:

Windows Phone 앱에서 마이크에 액세스하고 녹음된 오디오를 재생하는 방법에 대한 자세한 내용을 보려면 마이크 샘플을 다운로드하세요.

Windows Phone 마이크에서 입력을 캡처하려면 XNA Framework의 Microphone 클래스를 사용합니다.

Windows Phone 앱에 마이크 지원을 추가하려면

  1. 파일 | 새 프로젝트 메뉴 명령을 선택하여 새 프로젝트를 만듭니다.

  2. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장한 다음 Windows Phone 템플릿을 선택합니다.

  3. Windows Phone 앱  템플릿을 선택합니다. 프로젝트 이름을 원하는 대로 입력합니다.

  4. 솔루션 탐색기에서 참조를 마우스 오른쪽 버튼으로 클릭하고 참조 추가...를 선택합니다.

  5. .NET 구성 요소 목록에서 Microsoft.Xna.Framework를 선택하고 확인 버튼을 클릭합니다.

  6. Windows Phone 어셈블리에 참조를 추가하는 것에 대해 경고하는 대화 상자가 표시되면 버튼을 클릭합니다.

  7. MainPage.xaml.cs 파일의 맨 위에 다음 using 문을 추가합니다.

    using System.IO;
    using System.Windows.Threading;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    
  8. MainPage.xaml.cs에서 변수를 MainPage 클래스의 전역 멤버로 선언합니다.

    public partial class MainPage : PhoneApplicationPage
    {
        Microphone microphone = Microphone.Default;
        byte[] buffer;
        MemoryStream stream = new MemoryStream();
        SoundEffect sound;     
    // ...
    
  9. Windows Phone 앱에서 XNA Game Studio를 사용하고 있으므로 일반적으로 XNA Game Studio가 구현하는 게임 루프를 시뮬레이션해야 합니다. 다음 코드를 InitializeComponent에 대한 호출 뒤에 있는 MainPage 클래스의 생성자에 추가하여 XNA Game Studio 게임 루프를 시뮬레이션합니다.

    // Timer to simulate the XNA Game Studio game loop (Microphone is from XNA Game Studio)
    DispatcherTimer dt = new DispatcherTimer();
    dt.Interval = TimeSpan.FromMilliseconds(50);
    dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
    dt.Start();
    
  10. MainPage 클래스의 생성자에 새 Microphone.BufferReady 이벤트 처리기를 추가합니다.

    microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
    

    변수 선언과 완료된 생성자는 다음과 같아야 합니다.

    public partial class MainPage : PhoneApplicationPage
    {
        Microphone microphone = Microphone.Default;
        byte[] buffer;
        MemoryStream stream = new MemoryStream();
        SoundEffect sound;
        // Constructor
        public MainPage()
        {    InitializeComponent();
             // Timer to simulate the XNA Game Studio game loop (Microphone is from XNA Game Studio)
             DispatcherTimer dt = new DispatcherTimer();
             dt.Interval = TimeSpan.FromMilliseconds(33);
             dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
             dt.Start();
             microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
        }
         ...
    
  11. BufferReady 이벤트 처리기를 구현합니다. 이 처리기는 마이크의 데이터를 버퍼에 복사하고 해당 버퍼를 스트림에 씁니다.

    void microphone_BufferReady(object sender, EventArgs e)
    {
        microphone.GetData(buffer);
        stream.Write(buffer, 0, buffer.Length);
    }
    
  12. 사용자가 마이크에서 오디오 캡처를 시작하는 방법을 추가합니다. 녹음 버튼 Click 이벤트에 대해 이 이벤트 처리기는 1초 분량의 오디오를 저장할 수 있는 크기의 버퍼를 할당하고 Microphone.Start를 호출하여 해당 데이터 수집을 시작합니다.

    private void recordButton_Click(object sender, RoutedEventArgs e)
    {
        microphone.BufferDuration = TimeSpan.FromMilliseconds(1000);
        buffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)];
        microphone.Start();
    }
    
  13. 사용자가 마이크에서 오디오 캡처를 중지하는 방법을 추가합니다. 중지 버튼 Click 이벤트에 대해 이 이벤트 처리기는 마이크가 현재 입력을 수집하고 있는지를 확인합니다. 마이크가 입력을 수집하고 있는 경우 코드는 Microphone.Stop을 호출하여 녹음을 종료합니다.

    private void stopButton_Click(object sender, RoutedEventArgs e)
    {
        if (microphone.State == MicrophoneState.Started)
        {
            microphone.Stop();
        }
    }
    
  14. 사용자가 캡처된 오디오를 재생하는 방법을 추가합니다. 재생 버튼 Click 이벤트에 대해 이 이벤트 처리기는 오디오 데이터가 저장된 스트림을 사용하여 새 SoundEffect 개체를 할당합니다. 그런 다음 SoundEffect.Play 메서드를 호출합니다.

    private void playButton_Click(object sender, RoutedEventArgs e)
    {
        sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono);
        sound.Play();
    }
    

이러한 단계는 XNA Framework의 Microphone 클래스를 사용하여 Windows Phone 앱에서 마이크의 오디오 데이터를 수집하는 데 필요한 기본 단계입니다. SoundEffect가 재생을 중지할 때를 모니터링하는 방법을 비롯한 보다 자세한 예제는 마이크 샘플을 참조하세요.

표시: