1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.captcha.modules.jcaptcha.service.sound;
35
36 import fr.paris.lutece.portal.service.util.AppLogService;
37
38 import java.io.ByteArrayOutputStream;
39 import java.io.File;
40 import java.io.IOException;
41
42 import java.util.ArrayList;
43 import java.util.List;
44
45 import javax.sound.sampled.AudioFileFormat;
46 import javax.sound.sampled.AudioFormat;
47 import javax.sound.sampled.AudioInputStream;
48 import javax.sound.sampled.AudioSystem;
49
50
51
52
53 public final class AudioConcat
54 {
55
56
57
58
59 private AudioConcat( )
60 {
61 }
62
63
64
65
66
67
68
69
70 public static ByteArrayOutputStream concat( File... files )
71 {
72 List<AudioInputStream> audioInputStreamList = new ArrayList<AudioInputStream>( );
73 AudioInputStream audioInputStream = null;
74 AudioFormat audioFormat = null;
75
76 for ( File soundFile : files )
77 {
78 try
79 {
80 audioInputStream = AudioSystem.getAudioInputStream( soundFile );
81 }
82 catch( Exception e )
83 {
84 AppLogService.error( e.getMessage( ), e );
85 }
86
87 audioInputStreamList.add( audioInputStream );
88
89 AudioFormat format = audioInputStream.getFormat( );
90
91 if ( audioFormat == null )
92 {
93 audioFormat = format;
94 }
95 }
96
97 return concat( audioInputStreamList, audioFormat );
98 }
99
100
101
102
103
104
105
106
107
108
109 public static ByteArrayOutputStream concat( List<AudioInputStream> audioInputStreamList, AudioFormat audioFormat )
110 {
111 AudioInputStream audioInputStream = new SequenceAudioInputStream( audioFormat, audioInputStreamList );
112 ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
113
114 try
115 {
116 AudioSystem.write( audioInputStream, AudioFileFormat.Type.WAVE, outputStream );
117 outputStream.flush( );
118 outputStream.close( );
119 }
120 catch( IOException e )
121 {
122 AppLogService.error( e.getMessage( ), e );
123 }
124
125 return outputStream;
126 }
127 }