Stavrogin
Stavrogin

Reputation: 143

Play .wav audio in Xamarin

I'm trying to play an .wav audio file, for which I followed this answer.

I followed this answer but I get an error message on audio.Load(stream); says System.NullReferenceException: Object reference not set to an instance of an object.

To me it seems that the problem is that, audio.load() couldn't find the audio file, which is in Resource/raw path.

Complete Code

private void Counter(object sender, EventArgs e)
{
    timer_countdown = new Timer();
    timer_countdown.Interval = 1000;
    timer_countdown.Elapsed += OnTimedEventIDCamera;
    timer_countdown.Enabled = true;
    timer_countdown.AutoReset = true;
    timer_countdown.Start();
}

private void OnTimedEventIDCamera(object source, ElapsedEventArgs e)
{
    Seconds++;

    if (Seconds == 3)
    {
        var stream = GetStreamFromFile("beepSound.wav");
        var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
        audio.Load(stream);
        audio.Play();
    }
}

Stream GetStreamFromFile(string filename)
{
    var assembly = typeof(App).GetTypeInfo().Assembly;

    var stream = assembly.GetManifestResourceStream("yourprojectname." + filename);

    return stream;
}

Upvotes: 0

Views: 1268

Answers (1)

Cherry Bu - MSFT
Cherry Bu - MSFT

Reputation: 10356

According to your description and code, you have one audio file in Android platform Resource/raw folder. If you use the code you provide above, you can not get audio file and stream is null.

You can put .wav audio file in Forms shared and setting Build Action to Embedded Resource

 private void Btnwav(object sender, EventArgs e)
    {
        var stream = GetStreamFromFile("xxx.wav");
        var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
        audio.Load(stream);
        audio.Play();
    }
    Stream GetStreamFromFile(string filename)
    {
        var assembly = typeof(App).GetTypeInfo().Assembly;

        var stream = assembly.GetManifestResourceStream("yourprojectname." + filename);

        return stream;
    }

Update:

My project name is playvideo, add minions.mp4

 private void Btnwav(object sender, EventArgs e)
    {
        var stream = GetStreamFromFile("minions.mp4");
        var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
        audio.Load(stream);
        audio.Play();
    }
    Stream GetStreamFromFile(string filename)
    {
        var assembly = typeof(App).GetTypeInfo().Assembly;

        var stream = assembly.GetManifestResourceStream("playvideo." + filename);

        return stream;
    }

enter image description here

Upvotes: 4

Related Questions