NAudio and Xamarin Android



我想用Naudio库录制音频,添加一些效果,并用android播放音频。我有一个xamarin安卓应用程序,我想添加这个功能。我看到WaveOut(和WaveIn)只适用于Windows,对吗?,那么,我应该使用android音频播放器来实现IWavePlayer吗?这是另一种使用naudio与xamarin android的方式吗?谢谢

NAudio的很大一部分是Windows音频API的包装器。有些东西可以跨平台使用,但您需要创建IWavePlayer的本地实现,并且只能使用完全托管的编解码器。

这可以被记录和回放:

https://github.com/NateRickard/Plugin.AudioRecorder

页码:

<StackLayout Orientation="Horizontal">
    <Switch x:Name="TimeoutSwitch" IsToggled="True" />
    <Label Text="Timeout after silence?" />
</StackLayout>
<Button x:Name="RecordButton"
        Clicked="Record_Clicked" FontSize="24" HorizontalOptions="FillAndExpand"
        Text="Record" />
<Button x:Name="PlayButton"
        Clicked="Play_Clicked" FontSize="24" HorizontalOptions="FillAndExpand"
        IsEnabled="False" Text="Play" />

CS:

AudioRecorderService recorder;
AudioPlayer player;
public AudioPlayPage()
{
    InitializeComponent();
    recorder = new AudioRecorderService
    {
        StopRecordingAfterTimeout = true,
        TotalAudioTimeout = TimeSpan.FromSeconds(15),
        AudioSilenceTimeout = TimeSpan.FromSeconds(2)
    };
    player = new AudioPlayer();
    player.FinishedPlaying += Player_FinishedPlaying;
}
private void Player_FinishedPlaying(object sender, EventArgs e)
{
    PlayButton.IsEnabled = true;
    RecordButton.IsEnabled = true;
}
private async void Record_Clicked(object sender, EventArgs e)
{
    try
    {
        if (!recorder.IsRecording)
        {
            recorder.StopRecordingOnSilence = TimeoutSwitch.IsToggled;
            RecordButton.IsEnabled = false;
            PlayButton.IsEnabled = false;
            var audioRecordTask = await recorder.StartRecording();
            RecordButton.Text = "Stop Recording";
            RecordButton.IsEnabled = true;
            await audioRecordTask;
            RecordButton.Text = "Record";
            PlayButton.IsEnabled = true;
        }
        else 
        {
            RecordButton.IsEnabled = false;
            await recorder.StopRecording();
            RecordButton.IsEnabled = true;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
private void Play_Clicked(object sender, EventArgs e)
{
    try
    {
        var filePath = recorder.GetAudioFilePath();
        if (filePath != null)
        {
            PlayButton.IsEnabled = false;
            RecordButton.IsEnabled = false;
            player.Play(filePath);
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

相关内容

最新更新