29package com.jogamp.opengl.demos.av;
31import com.jogamp.common.av.AudioSink;
32import com.jogamp.common.net.Uri;
33import com.jogamp.common.util.InterruptSource;
34import com.jogamp.opengl.util.av.GLMediaPlayer;
35import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener;
36import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException;
37import com.jogamp.opengl.util.av.GLMediaPlayerFactory;
38import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame;
49 static volatile boolean stop =
false;
51 public static void main(
final String[] args)
55 System.out.println(
"No files! \n" +
56 "pass as many media files you want\n" +
57 "to the CrossFadePlayer arguments \n" +
58 "and i will try CrossFade-play them all in parallel!");
66 System.out.println(
"\n***\nAttributesChanges: "+eventMask+
", when "+when);
67 System.out.println(
"State of player: " + mp.
getState().toString() +
"\n");
70 System.out.println(
"Duration: " + mp.
getDuration() +
"ms");
72 System.out.println(
"player.initGL()...");
73 new InterruptSource.Thread() {
81 }
catch (
final Exception e) {
93 System.err.println(
"Player State: Exception");
96 new InterruptSource.Thread() {
99 System.out.println(
"mp.setPlaySpeed(1f) returned: " + mp.
setPlaySpeed(1f));
109 se.printStackTrace();
111 new InterruptSource.Thread() {
114 System.out.println(
"terminating...");
126 for(
final String arg: args ) {
129 System.out.println(
"Created CrossFade player: "+ i +
" " + player[i].getClass().getName());
132 final String filename = arg;
133 if(filename.equals(
"")){
134 System.out.println(
"No file selected: arg " + i +
" = "+ filename);
137 final File file =
new File(filename);
139 System.out.println(
"File do not exist");
141 final Uri uri = Uri.valueOf(file);
142 System.out.println(
"State of player "+ i +
": " + player[i].getState().toString());
143 System.out.println(
"...initializing stream "+ i +
"...");
148 }
catch (
final Exception e1) {
149 e1.printStackTrace();
152 System.out.println(
"Failed to create player "+ i +
"!");
159 final long startTime = com.jogamp.common.os.Platform.currentTimeMillis();
160 final double piPlayers = Math.PI*2.0f/args.length;
162 while(
null == se && stop ==
false ) {
165 }
catch (
final InterruptedException e) { }
168 float maxDuration = 1000.0f ;
171 if( p.getDuration() > maxDuration) {
172 maxDuration = p.getDuration();
178 final float progress = (com.jogamp.common.os.Platform.currentTimeMillis()-startTime)/maxDuration;
183 final AudioSink sink = p.getAudioSink();
185 final float volume = (float) (0.5f+(0.5f*(Math.cos(40.0f*progress+(piPlayers*i)))));
186 final float playbacktime = com.jogamp.common.os.Platform.currentTimeMillis()-startTime;
188 sink.setVolume(volume);
191 se = p.getStreamException();
193 se.printStackTrace();
194 throw new RuntimeException(se);
206 System.out.println(
"...main exit...");
Parallel media player that demonstrate CrossFade of audio volume during playback.
static void main(final String[] args)