1 package org.daisy.pipeline.audio.impl;
2
3 import java.io.BufferedInputStream;
4 import java.io.InputStream;
5 import java.util.Map;
6 import java.util.Optional;
7
8 import javax.sound.sampled.AudioFileFormat;
9 import javax.sound.sampled.AudioInputStream;
10 import javax.sound.sampled.AudioSystem;
11 import javax.sound.sampled.UnsupportedAudioFileException;
12
13 import org.daisy.pipeline.audio.AudioDecoder;
14 import org.daisy.pipeline.audio.AudioDecoderService;
15 import org.daisy.pipeline.audio.AudioFileTypes;
16
17 import org.osgi.service.component.annotations.Component;
18
19 @Component(
20 name = "system-audio-decoder",
21 immediate = true,
22 service = { AudioDecoderService.class }
23 )
24 public class SystemAudioDecoder implements AudioDecoderService {
25
26 @Override
27 public boolean supportsFileType(AudioFileFormat.Type fileType) {
28 return AudioFileTypes.WAVE.equals(fileType);
29 }
30
31 @Override
32 public Optional<AudioDecoder> newDecoder(Map<String,String> params) {
33 return Optional.of(getInstance());
34 }
35
36 static AudioDecoder instance = null;
37
38 static AudioDecoder getInstance() {
39 if (instance == null)
40 instance = new AudioDecoder() {
41 @Override
42 public AudioInputStream decode(InputStream input) throws UnsupportedAudioFileException, Throwable {
43
44
45
46
47
48
49
50 if (!input.markSupported())
51 input = new BufferedInputStream(input);
52 return AudioSystem.getAudioInputStream(input);
53 }
54 };
55 return instance;
56 }
57 }