"System.InvalidCastException" Can't load SoundEffect in monogame

Started by
3 comments, last by Mauricio Marinho 9 years, 11 months ago

Hey guys,

This is my first post here, I've used the search tool but found nothing about this issue. I'm a beginner (total noob) developer, so I must be doing something pretty stupid. If this is a duplicate, i'll delete it. (My english is also not very good, so please, excuse my mistakes)

I'm making a little Pong game, based on a post I've read earlier. I got everything working on a linux build running the SDL2 version of monogame. But now i'm trying to add audio to my game, using the "SoundEffect" class, but I can't load the audio files. I've already tried as Song with .ogg and .mp3, but didn't work. So I booted Windows and converted my audio files to .xnb with XNA Content Compiler. Switched back, set it in the properties to "Content" type and "Copy if newer". Made my variables and tried to load in the following manner:

Just before "Game1()" as with all my variables:


SoundEffect sound_hit;

In "LoadContent()"


sound_hit = Content.Load<SoundEffect> ("audio/ballhit");

And this simply gives me the error: "System.InvalidCastException" Cannot cast from source type to destination type.

[attachment=21096:Captura de tela de 2014-04-29 14:39:19.png]

I believe this is happening because monogame (or c# ?) is not correctly interpreting my audio files as... well, audio files. Or it tries to load my SoundEffect as Song or vice-versa. Also i'm using "Microsoft.Xna.Framework.Media" or "Microsoft.Xna.Framework.Audio" depending on which class I need.

Please, any help would be appreciated. I know this is easy for most people here, but not for me ):

Thanks.

Advertisement


So I booted Windows and converted my audio files to .xnb with XNA Content Compiler

What content processor are you using for your files when you do this? MonoGame Sound or MonoGame SoundEffect?

What content processor are you using for your files when you do this? MonoGame Sound or MonoGame SoundEffect?

Actually, none of those, because I didn't know that was possible in monogame, since i'm learning it linux (which may not be the best way), I believe there is no content processor, at least that what I understand after reading this.

After some more testing yesterday, I've found that it can play .wav files as SoundEffect. Which is really odd, since it didn't play .xnb ( compiled with XNA Content Compiler, the only method I know at the time ). How does .wav files plays in linux while .ogg doesn't? From what I could gather, only .ogg would work. Also, not sure why the .xnb files won't work... Maybe they're just containers and do not actually change the, let's say "codec"? Since I've converted them from .mp3 and .ogg, that would make sense.

So, my doubts now are (for better readability) :

1. Does SoundEffect in Linux only works with .wav files?
2. Are .xnb files only containers, and it becomes a diferent file depending on which format I use ( i.e. mp3, wav, ogg, so on... )?

Thanks for the help, I'll do so more research on "content processing" \o/


2. Are .xnb files only containers, and it becomes a diferent file depending on which format I use ( i.e. mp3, wav, ogg, so on... )?

.xnb files are containers for the raw data that is used to initialize the runtime content classes in XNA/Monogame (SoundEffect, Texture2D, Effect, etc...). Generally, regardless of the source format it will be turned into a single format that XNA/Monogame understands. For instance, where or not a source file is a jpg, bmp or png, it will all be turned into raw texture data in the .xnb.

It's possible SoundEffect is different and retains the original data of the specific file format, I'm not sure. Maybe you should ask this in the monogame forums.

Thanks for your time, I really appreciate the help and information.

I guess monogame forums are more appropriate to ask cross-platform related questions. Thanks for the link.

This topic is closed to new replies.

Advertisement