I'm trying to implement a 'click' sound when the user interacts with buttons in the main screen of my application. I have no experience with audio in Android, however several sources suggest that to simply play a clip, I need only do the following -
Put the audio file in /res/raw
I did this, I had to create a /raw folder within /res/ - the file is named menuclick.wav (so seems to meet the guidelines for a-z0-0_ filenames)
Create a MediaPlayer object
MediaPlayer mediaplayer;
mediaplayer.create(getApplicationContext(), R.raw.menuclick);
Prepare the player for playback (*within a try - catch block)
mediaplayer.prepare();
Play the file
mediaplayer.start();
A sound plays, however it is not the sound file I specified, it is an unpleasant hissing / static sound.
I tested the application again, only changing the sound file. It played some of the sound but there was still a lot of white noise. This doesn't occur when opening the sound files normally in other applications.
I seem to be following the same steps as several textbooks / examples. Any idea where the problem may lie?
Related
I want to play multiple audio files simultaneously in sync. I , file on the SD-Card, or a file in a specific folder). I want to be able to put a delay on the files and adjust the play rate.
I have looked MediaPlayer, MediaPlayer seems like the right path, but they are not synchronous multiple audio into single audio.
I have two media files located locally - mp4 video and m4a audio, which have to be played in sync. I use MediaPlayer objects for this purpose, all start/pause methods are called simultaneously.
Sometimes I see the difference between audio and video right after players start, sometimes after tapping on pause/resume.
I added logs, and see that after pausing media players, their position differs (e.g. MediaPlayer with audio file: 1820ms, MediaPlayer with video file: 1760ms).
One more interesting thing is that seekTo operation with audio file works good, while with video it's really unpredictable.
Please suggest what is the reason of such a behavior and which solutions are available in order to fix that?
I think that this effect with the video timing depends on how the " key frames", which contain a full frame of information have been encoded. It's only possible to locate to one of these keyframes.
Video editing software gets over this by rolling the deltas from intervening i-frames to the exact seek position.
I'm trying to play a couple of short audio files (ca. 2sec) in an Android App with the Media Player. They do play, but for some of them I get a click sound at the end (which differs from file to file).
There are no click-sounds when I play it on the PC, also I tried to convert it from .mp3 in .ogg and modified the soundfiles themselves, nothing helps, I think the problem is probably the Media PLayer.
For short audio files, like sound effects, I would use a SoundPool
Also see this question and answer here: The correct way to play short sounds Android?
I want to stream an audio mp3 file and then play it through android media player plus I also want to cache this file, so that mediaplayer don't have to stream for recently played tracks.
I have tried using prepareAsync method but it doesn't give me access to buffer content, so I have decided to stream the audio file myself and then pass it to the media player for playing. I have achieved this by following this article here but this approach has a problem i.e. while transferring the file to media player it goes into error mode which causes my player to behave inconsistently.
When media player enters its error mode it doesn't come out of it automatically so I am forced to create a new media player and then re-provide it the downloaded file, this workaround causes the user to experience an undesired pause in the song playing.
So, does any one have improved an version of code given in above link? or do they know a better solution to this problem or is there is actually a library for streaming an audio file in android?
Thanks
The link you provided looks like a less than ideal solution (not to mention outdated). What you probably want is a local proxy server that gives you access to byte data before the MediaPlayer gets it. See my answer here for a little more explanation.
I have a list of music files that should be played with my Android application. Actually user selects a list of files to be played for a specified time, and then clicks on 'start button'. Please tell me how I can implement it so that the following requirements are met:
The program should work, even if power button is pressed or the display is turned off.
Music files should be played one by one.
In order that the music continue after your application activities exit, you need to implement the playing itself as a Service (specifically, a started service). For playing the music, take a look at MediaPlayer. There is a discussion of using a MediaPlayer in a Service in the Media Player guide topic.
To play audio files, you can use Android's MediaPlayer class.
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(audioFilePath);
mp.prepare();
mp.start();
This code snippet will load and play a single audio file. Take a look at the documentation for MediaPlayer to figure out how you might be able to leverage it for what you're trying to accomplish specifically.