使用第2次页面时无法使用麦克风

时间:2014-02-14 16:46:55

标签: c# xna

在我的应用中的一个页面中,我通过麦克风录制。 只要我留在那个页面上,我就可以停下来重新录制。

但是当我离开页面并返回并按下录音时,麦克风将无法捕获任何内容。结果是静音。

这是构造函数

private byte[] _buffer;
private int _passedSecs = 0;

private const string RECORDFILE = "newrecording.wav";

private Microphone _mic = Microphone.Default;
private MemoryStream _stream = new MemoryStream();
private DispatcherTimer _framework;

public MyPage()
{
    InitializeComponent();

    _framework = new DispatcherTimer();
    _framework.Interval = TimeSpan.FromMilliseconds(33);
    _framework.Tick += _framework_Tick;

    _mic.BufferReady += _mic_BufferReady;
}

private void _mic_BufferReady(object sender, EventArgs e)
{
    _mic.GetData(_buffer);
    _stream.Write(_buffer, 0, _buffer.Length);

    var isoStore = IsolatedStorageFile.GetUserStoreForApplication();
    var targetFile = isoStore.CreateFile(RECORDFILE);

    WavHeaderWriter.WriteHeader(targetFile, (int)_stream.Length, 1, _mic.SampleRate);
    var dataBuffer = _stream.GetBuffer();

    targetFile.Write(dataBuffer, 0, (int)_stream.Length);
    targetFile.Flush();
    targetFile.Close();
}

我在这里录制

private async void startRecording()
{
    _framework.Start();

    _mic.BufferDuration = TimeSpan.FromMilliseconds(500);
    _buffer = new byte[_mic.GetSampleSizeInBytes(_mic.BufferDuration)];

    _stream.SetLength(0);
    _mic.Start();
}

在这里我停止

private void stopRecording()
{
    var isoStore = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
    IsolatedStorageFileStream _data = isoStore.OpenFile(RECORDFILE, FileMode.Open);

    SoundEffect sound = SoundEffect.FromStream(_data);
    _data.Close();
    sound.Play();

    _mic.Stop();
    _framework.Stop();
    isoStore.Dispose();
}

1 个答案:

答案 0 :(得分:1)

您应该取消订阅Microphone event PageNavigatedFrom事件(当您从该页面导航时触发的事件)