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 package org.openimaj.workinprogress.audio;
31
32 import java.io.File;
33 import java.io.FileWriter;
34 import java.io.IOException;
35 import java.io.PrintWriter;
36 import java.nio.ByteBuffer;
37
38 import org.openimaj.audio.AudioFormat;
39 import org.openimaj.audio.AudioStream;
40 import org.openimaj.audio.SampleChunk;
41 import org.openimaj.audio.conversion.MultichannelToMonoProcessor;
42 import org.openimaj.audio.conversion.SampleRateConverter;
43 import org.openimaj.audio.processor.FixedSizeSampleAudioProcessor;
44 import org.openimaj.util.array.ArrayUtils;
45 import org.openimaj.video.xuggle.XuggleAudio;
46
47 public class AudioPlay {
48 public static void main(String[] args) throws IOException {
49 final AudioStream audio = new XuggleAudio(new File(
50 "/Users/jon/Music/iTunes/iTunes Music/Rufus Wainwright/Shrek - Soundtrack/10 Hallelujah.mp3"));
51
52 final int frameSize = 300;
53 final int frameStep = 300;
54
55 final AudioFormat targetFormat = new AudioFormat(16, 11.025, 1);
56 final AudioStream audioConv = new SampleRateConverter(new MultichannelToMonoProcessor(audio),
57 SampleRateConverter.SampleRateConversionAlgorithm.LINEAR_INTERPOLATION, targetFormat);
58 final FixedSizeSampleAudioProcessor framer = new
59 FixedSizeSampleAudioProcessor(audioConv, frameSize, frameSize -
60 frameStep);
61
62 final PrintWriter pw = new PrintWriter(new FileWriter(new
63 File("samples.txt")));
64 for (final SampleChunk sc : framer) {
65 final ByteBuffer sb = sc.getSamplesAsByteBuffer();
66
67 final short[] vector = new short[frameSize];
68 for (int i = 0; i < Math.min(frameSize, sb.limit() / (Short.SIZE /
69 Byte.SIZE)); i++)
70 {
71 final short v = sb.getShort();
72 vector[i] = v;
73 }
74 pw.println(ArrayUtils.toString(vector, "%6d"));
75 }
76 pw.close();
77 }
78 }