2014-07-15 1 views
2

임시 파일에 사운드를 녹음하는 코드입니다. 나는 사운드를 녹음하고 재생들을 때, 모든 것이 순조롭게 진행,하지만 난 재생 버튼을 다시 클릭하면이 오류 얻을 :Windows에서 임시 파일로 사운드 녹음하기 전화 번호 8

enter image description here

가 어떻게이 문제를 해결할 수 있습니까?

코드 :

using System.Collections.Generic; 
using System.IO; 
using System.IO.IsolatedStorage; 
using System.Windows; 
using System.Windows.Controls; 
using Coding4Fun.Toolkit.Audio; 
using Coding4Fun.Toolkit.Audio.Helpers; 

namespace AudioRecorder.UserControls 
{ 
public partial class SoundRecorderPanel : UserControl 
{ 

    private MicrophoneRecorder _recorder = new MicrophoneRecorder(); 
    private List<IsolatedStorageFileStream> _audioList = new List<IsolatedStorageFileStream>(); 
    private int _counter; 
    public SoundRecorderPanel() 
    { 
     InitializeComponent(); 
    } 

    private void ButtonRecord_OnChecked(object sender, RoutedEventArgs e) 
    { 
     _recorder.Start(); 
    } 

    private void ButtonRecord_OnUnchecked(object sender, RoutedEventArgs e) 
    { 
     _recorder.Stop(); 
     SaveTempAudio(_recorder.Buffer); 
    } 

    private void SaveTempAudio(MemoryStream buffer) 
    { 

     if (_counter==2) 
      return; 

     using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      var bytes = buffer.GetWavAsByteArray(_recorder.SampleRate); 
      var tempFileName = "tempwaveFile_"+_counter; 
      IsolatedStorageFileStream audioStream = isoStore.CreateFile(tempFileName); 

      audioStream.Write(bytes,0,bytes.Length); 
      _audioList.Add(audioStream); 

      _counter++; 
     } 
    } 

    private void ButtonPlayBack_OnClick(object sender, RoutedEventArgs e) 
    { 
     var index = int.Parse(((Button) sender).Tag.ToString()); 
     var audioPlayer = new MediaElement {AutoPlay = true}; 

     if (index < _audioList.Count) 
     { 

       audioPlayer.SetSource(_audioList[index]); 
       LayoutRoot.Children.Add(audioPlayer); 
       audioPlayer.Play(); 

     } 
    } 

} 

가}

답변

1

사용중인 블록을 100 % 사용할 수 있습니다. 문제는 개별 이벤트에서 어떻게 스트림에 액세스하려고했는지입니다. 인덱스의 참조를 스트림에 저장하려고 시도하지 말고 다시 엽니 다. https://coding4fun.codeplex.com/SourceControl/latest#source/Coding4Fun.Toolkit.Test.WindowsPhone.Common/Samples/Audio.xaml.cs

:

using (var stream = new IsolatedStorageFileStream(_fileName, FileMode.Open, storageFolder)) 
{ 
    playBack.SetSource(stream); 
    playBack.Play(); 
} 

하는 샘플 코드를 사용하여

0

나는 내 문제를 해결 작동하지 않습니다 {}) (이 이상해하지만 사용하는 것! 그리고 IsolatedStorageFile과 IsolatedStorageFileStream을 수동으로 처리했습니다. 또한 ButtonPlayBack 클릭 이벤트에서 코드를 변경했습니다. 이것은 동일한 문제가있는 누군가를위한 새로운 코드입니다.

 private void SaveTempAudio(MemoryStream buffer) 
    { 

     if (_counter == 2) 
      return; 

     var isoStore = IsolatedStorageFile.GetUserStoreForApplication(); 
     var bytes = buffer.GetWavAsByteArray(_recorder.SampleRate); 
     var tempFileName = "tempwave_" + _counter; 
     var audioStream = isoStore.CreateFile(tempFileName); 

     audioStream.Write(bytes, 0, bytes.Length); 
     _audioList.Add(audioStream); 

     _counter++; 

     isoStore.Dispose(); 
     audioStream.Close(); 
     audioStream.Dispose(); 
    } 

    private void ButtonPlayBack_OnClick(object sender, RoutedEventArgs e) 
    { 
     var index = int.Parse(((Button) sender).Tag.ToString()); 
     var fileName = "tempwave_" + ((Button) sender).Tag; 

     if (index >= _audioList.Count) 
      return; 

     var isoStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
     var fileStream = isoStorage.OpenFile(fileName, FileMode.Open, FileAccess.Read); 

     SoundPlayer.SetSource(fileStream); 
     SoundPlayer.Play(); 

     isoStorage.Dispose(); 
     fileStream.Close(); 
     fileStream.Dispose(); 

    }