2016-04-14 5 views
2

Я записал звук с помощью микрофона устройства, но я не знаю, как его сохранить. Это с помощью элемента MediaCapture, и если да, то как это сделать?Сохранить записанный звук в файле проекта в UWP

+0

Что вы пробовали? Вы искали в Google? Что ты нашел? Что не работает? – Wjdavis5

+1

Возможный дубликат [Сохранить MediaElement для файла проекта в UWP] (http://stackoverflow.com/questions/36619966/save-mediaelement-to-project-file-in-uwp) –

+0

Я искал его, но я не знаю, Я ничего не пытался, так как ничего не нашел. –

ответ

0

Вот основная идея, как конвертировать в mp3 и сохранять в файле с помощью Datawriter.

Я написал этот код на лету, поэтому его не тестировали.

MediaEncodingProfile _Profile = Windows.Media.MediaProperties.MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); 
    MediaTranscoder _Transcoder = new Windows.Media.Transcoding.MediaTranscoder(); 
    CancellationTokenSource _cts = new CancellationTokenSource(); 

    private void ConvertSteamToMp3() 
    { 
     IRandomAccessStream audio = buffer.CloneStream(); //your recoreded InMemoryRandomAccessStream 

     var folder = KnownFolders.MusicLibrary.CreateFolderAsync("MyCapturedAudio", CreationCollisionOption.OpenIfExists); 
     outputFile = await folder.CreateFileAsync("record.mp3", CreationCollisionOption.GenerateUniqueName); 

     using (IRandomAccessStream fileStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite)) 
     { 

      var preparedTranscodeResult = await _Transcoder.PrepareStreamTranscodeAsync(audio, fileStream, _Profile); 
      if (preparedTranscodeResult.CanTranscode) 
      { 
       var progress = new Progress<double>(TranscodeProgress); 
       await preparedTranscodeResult.TranscodeAsync().AsTask(_cts.Token, progress); 
      } 

      using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0)) 
      { 
       using (DataWriter dataWriter = new DataWriter(outputStream)) 
       { 
        //TODO: Replace "Bytes" with the type you want to write. 
        dataWriter.WriteBytes(bytes); 
        await dataWriter.StoreAsync(); 
        dataWriter.DetachStream(); 
       } 

       await outputStream.FlushAsync(); 
      } 
     } 
    } 

Или просто сохранить поток в файле

public async SaveToFile() 
{ 

    IRandomAccessStream audio = buffer.CloneStream(); //your recoreded InMemoryRandomAccessStream 
    var folder = KnownFolders.MusicLibrary.CreateFolderAsync("MyCapturedAudio", CreationCollisionOption.OpenIfExists); 
    outputFile = await folder.CreateFileAsync("record.mp3", CreationCollisionOption.GenerateUniqueName); 

     using (IRandomAccessStream fileStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite)) 
     { 
      await RandomAccessStream.CopyAndCloseAsync(audio.GetInputStreamAt(0), fileStream.GetOutputStreamAt(0)); 
      await audio.FlushAsync(); 
      audio.Dispose(); 
     } 
    }); 
} 
+0

Я хочу сохранить его среди файлов проекта, в частности, в/Assests/Sounds. Где я могу это изменить? –

+0

Вы можете использовать папку StorageFolder = ApplicationData.Current.LocalFolder; 'Я не думаю, что ее можно сохранить в активах только для чтения. – Stamos

+0

Мне удалось сохранить его в Debug/AppX/Assets. Спасибо! –

Смежные вопросы