Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
录制的音频未在xamarin中播放_Xamarin_Xamarin.forms - Fatal编程技术网

录制的音频未在xamarin中播放

录制的音频未在xamarin中播放,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想使用xamarin表单录制音频: 我的xaml中有以下代码: <StackLayout Spacing="15"> <StackLayout Orientation="Horizontal"> <Switch x:Name="TimeoutSwitch" IsToggled="True" /> <Label Text="Stop aft

我想使用xamarin表单录制音频:

我的xaml中有以下代码:


   <StackLayout  Spacing="15">
        <StackLayout Orientation="Horizontal">
            <Switch x:Name="TimeoutSwitch" 
                    IsToggled="True" />
            <Label Text="Stop after silence?"/>
        </StackLayout>

        <Button x:Name="RecordButton" 
                Text="Record" 
                Clicked="Record_Clicked"/>

        <Button x:Name="ReproduceButton" 
                Text="Play"  
                Clicked="Reproduce_Clicked" 
                IsEnabled="False"/>
    </StackLayout>

我一直在学习本教程:

当我运行它时,它没有录制和播放音频,我在这里做错了什么吗?
我是Xamarin的新手,不知道如何使用软件包。

根据我的测试,不需要保存。默认情况下会保存音频。 当你玩它时,你可以先得到路径,然后再玩它

获取路径:

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\u
事件的代码进行了一些更改。我提供的代码用我自己的名字保存录制的音频
sample.wav
。我播放它来检查它是否存在。它工作得很好

更新:

 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);
创建新页面
Page1
,将文件名从主页传递到第1页。代码仍然基于GitHub上的
录音机

录音机

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>
第1.xaml页

 <StackLayout>
        <Label Text="Welcome to Page1!"
            VerticalOptions="CenterAndExpand" 
            HorizontalOptions="CenterAndExpand" />
        <Button x:Name="btnPlay" Text="Play" Clicked="btnPlay_Clicked"></Button>
    </StackLayout>

在我这方面效果很好,试试看。

你在哪个平台上尝试这个?我正在使用Android从GitHub下载源文件。我测试代码。它工作得很好。请检查您的许可。你在运行时允许权限了吗?哇@WendyZang MSFT当我在手机中使用它时,它工作正常,我只使用了模拟器,无法找出问题所在。@WendyZang MSFT我如何将它保存到数据库中,稍后再播放?我想录制音频,然后将其保存到数据库中,稍后再播放。这也是令人困惑的,因为我希望我录制的音频被标记。所有录制的音频文件扩展名都是.wav?是的,这是Plugin.AudioRecorder提供的默认方式。但是我可以重命名录制的音频吗?而不是ARS_recording.wav可能类似于Textbox.text()+.wav?因此,每次我保存音频时,它都会有一个唯一的名称。您可以使用
GetAudioFileStream
中的流捕获,用自己的名称保存录制的音频。
 <StackLayout>
        <Label Text="Welcome to Page1!"
            VerticalOptions="CenterAndExpand" 
            HorizontalOptions="CenterAndExpand" />
        <Button x:Name="btnPlay" Text="Play" Clicked="btnPlay_Clicked"></Button>
    </StackLayout>
 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);
    }
}