我想用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;
}
}