diff options
author | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-11 15:42:37 +0000 |
---|---|---|
committer | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-11 15:42:37 +0000 |
commit | 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e (patch) | |
tree | 4c304cd4151020bd5494d279ee68a105ae3a5a3a /songdbj/de/jarnbjo/util/audio | |
parent | dfa8ecbe609ca8ea194d08560a44fb9a92e94b4b (diff) | |
download | rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.gz rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.zip |
Songdb java version, source. only 1.5 compatible
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'songdbj/de/jarnbjo/util/audio')
-rw-r--r-- | songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java b/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java new file mode 100644 index 0000000000..4916102d4b --- /dev/null +++ b/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java | |||
@@ -0,0 +1,62 @@ | |||
1 | package de.jarnbjo.util.audio; | ||
2 | |||
3 | import java.io.*; | ||
4 | import javax.sound.sampled.*; | ||
5 | |||
6 | public class FadeableAudioInputStream extends AudioInputStream { | ||
7 | |||
8 | private AudioInputStream stream; | ||
9 | private boolean fading=false; | ||
10 | private double phi=0.0; | ||
11 | |||
12 | public FadeableAudioInputStream(AudioInputStream stream) throws IOException { | ||
13 | super(stream, stream.getFormat(), -1L); | ||
14 | } | ||
15 | |||
16 | public void fadeOut() { | ||
17 | fading=true; | ||
18 | phi=0.0; | ||
19 | } | ||
20 | |||
21 | public int read(byte[] b) throws IOException { | ||
22 | return read(b, 0, b.length); | ||
23 | } | ||
24 | |||
25 | public int read(byte[] b, int offset, int length) throws IOException { | ||
26 | int read=super.read(b, offset, length); | ||
27 | |||
28 | //System.out.println("read "+read); | ||
29 | |||
30 | if(fading) { | ||
31 | int j=0, l=0, r=0; | ||
32 | double gain=0.0; | ||
33 | |||
34 | for(int i=offset; i<offset+read; i+=4) { | ||
35 | j=i; | ||
36 | l=((int)b[j++])&0xff; | ||
37 | l|=((int)b[j++])<<8; | ||
38 | r=((int)b[j++])&0xff; | ||
39 | r|=((int)b[j])<<8; | ||
40 | |||
41 | if(phi<Math.PI/2) { | ||
42 | phi+=0.000015; | ||
43 | } | ||
44 | |||
45 | gain=Math.cos(phi); | ||
46 | //System.out.println("gain "+gain); | ||
47 | |||
48 | l=(int)(l*gain); | ||
49 | r=(int)(r*gain); | ||
50 | |||
51 | j=i; | ||
52 | b[j++]=(byte)(l&0xff); | ||
53 | b[j++]=(byte)((l>>8)&0xff); | ||
54 | b[j++]=(byte)(r&0xff); | ||
55 | b[j++]=(byte)((r>>8)&0xff); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | return read; | ||
60 | } | ||
61 | |||
62 | } \ No newline at end of file | ||