Исходя из моего теста, нет необходимости сохранять. Аудио будет сохранено по умолчанию. Когда вы играете, вы можете сначала получить путь, а затем воспроизвести его.
Получить путь:
var filePath = gravador.GetAudioFilePath();
Воспроизвести:
reprodutor.Play(filePath);
Расположение:
/data/user/0/br.com.julianocustodo.audiodemo/cache/ARS_recording.wav
Если вы хотите сохранить его самостоятельно, вы можете использовать GetAudioFileStream
, чтобы получить поток, а затем сохранить его в своей собственной базе данных или просто получить путь и затем воспроизвести его.
Обновлено:
var stream = gravador.GetAudioFileStream();
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sample.wav");
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
stream.CopyTo(fileStream);
}
reprodutor.Play(fileName);
Внесены некоторые изменения с кодом события Reproduzir_Clicked
. Приведенный мною код сохраняет записанный звук под моим собственным именем sample.wav
. И я играю в нее, чтобы проверить, существует она или нет. Это хорошо работает.
ОБНОВЛЕНО:
Создайте новую страницу Page1
, передайте имя файла из MainPage в Page1. Код все еще основан на Audio-Recorder
на GitHub.
Audio-Recorder
: https://github.com/juucustodio/Audio-Recorder-Xamarin.Forms
MainPage.xaml
<StackLayout Spacing="15">
<StackLayout Orientation="Horizontal">
<Switch x:Name="TimeoutSwitch" IsToggled="True" />
<Label Text="Parar após silêncio?" />
</StackLayout>
<Button x:Name="GravarButton" Text="Gravar" HorizontalOptions="FillAndExpand" Clicked="Gravar_Clicked" />
<Button x:Name="ReproduzirButton" Text="Reproduzir" HorizontalOptions="FillAndExpand" Clicked="Reproduzir_Clicked" IsEnabled="False" />
<Button x:Name="btnGoToPage1" Text="GoToPage1" Clicked="btnGoToPage1_Clicked"></Button>
</StackLayout>
MainPage .xaml.cs
public partial class MainPage : ContentPage
{
AudioRecorderService gravador;
AudioPlayer reprodutor;
public string fileName { get; set; }
public MainPage()
{
InitializeComponent();
fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sample.wav");
gravador = new AudioRecorderService
{
StopRecordingAfterTimeout = true,
TotalAudioTimeout = TimeSpan.FromSeconds(15),
AudioSilenceTimeout = TimeSpan.FromSeconds(2)
};
reprodutor = new AudioPlayer();
reprodutor.FinishedPlaying += Finaliza_Reproducao;
}
async void Gravar_Clicked(object sender, EventArgs e)
{
try
{
if (!gravador.IsRecording)
{
gravador.StopRecordingOnSilence = TimeoutSwitch.IsToggled;
GravarButton.IsEnabled = false;
ReproduzirButton.IsEnabled = false;
//Começa gravação
var audioRecordTask = await gravador.StartRecording();
GravarButton.Text = "Parar Gravação";
GravarButton.IsEnabled = true;
await audioRecordTask;
GravarButton.Text = "Gravar";
ReproduzirButton.IsEnabled = true;
}
else
{
GravarButton.IsEnabled = false;
//parar a gravação...
await gravador.StopRecording();
GravarButton.IsEnabled = true;
}
}
catch (Exception ex)
{
//blow up the app!
await DisplayAlert("Erro", ex.Message, "OK");
}
}
async void Reproduzir_Clicked(object sender, EventArgs e)
{
//try
//{
// var filePath = gravador.GetAudioFilePath();
// if (filePath != null)
// {
// ReproduzirButton.IsEnabled = false;
// GravarButton.IsEnabled = false;
// reprodutor.Play(filePath);
// }
//}
//catch (Exception ex)
//{
// //blow up the app!
// await DisplayAlert("Erro", ex.Message, "OK");
//}
var stream = gravador.GetAudioFileStream();
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
stream.CopyTo(fileStream);
}
reprodutor.Play(fileName);
}
void Finaliza_Reproducao(object sender, EventArgs e)
{
ReproduzirButton.IsEnabled = true;
GravarButton.IsEnabled = true;
}
private void btnGoToPage1_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Page1());
}
Page1.xaml
<StackLayout>
<Label Text="Welcome to Page1!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
<Button x:Name="btnPlay" Text="Play" Clicked="btnPlay_Clicked"></Button>
</StackLayout>
Page1.xaml.cs
public partial class Page1 : ContentPage
{
public Page1()
{
InitializeComponent();
}
AudioPlayer reprodutor;
private void btnPlay_Clicked(object sender, EventArgs e)
{
var fileName = new MainPage().fileName;
reprodutor = new AudioPlayer();
reprodutor.Play(fileName);
}
}
Это хорошо работает на моей стороне, попробуйте.