1:
37:
38: package ;
39:
40: import ;
41: import ;
42:
43: import ;
44: import ;
45: import ;
46:
47: import gnu.javax.sound.AudioSecurityManager.Permission;
48:
49: public class GstSourceDataLine
50: extends GstDataLine implements SourceDataLine
51: {
52: private GstPipeline pipeline = null;
53: private boolean open = false;
54:
55: public GstSourceDataLine(AudioFormat format)
56: {
57: super(format);
58: }
59:
60: public void open() throws LineUnavailableException
61: {
62: AudioSecurityManager.checkPermissions(Permission.PLAY);
63:
64: if (open)
65: throw new IllegalStateException("Line already opened");
66:
67:
68: pipeline = GstNativeDataLine.createSourcePipeline(getBufferSize());
69:
70: this.open = true;
71: }
72:
73: public void open(AudioFormat fmt) throws LineUnavailableException
74: {
75: AudioSecurityManager.checkPermissions(Permission.PLAY);
76:
77: setFormat(fmt);
78: this.open();
79: }
80:
81: public void open(AudioFormat fmt, int size) throws LineUnavailableException
82: {
83: AudioSecurityManager.checkPermissions(Permission.PLAY);
84:
85: setBufferSize(size);
86: this.open(fmt);
87: }
88:
89: public int write(byte[] buf, int offset, int length)
90: {
91: return this.pipeline.write(buf, offset, length);
92: }
93:
94: public int available()
95: {
96: return this.pipeline.available();
97: }
98:
99: public void drain()
100: {
101: this.pipeline.drain();
102: }
103:
104: public void flush()
105: {
106: this.pipeline.flush();
107: }
108:
109: public int getFramePosition()
110: {
111: System.out.println("getFramePosition -: IMPLEMENT ME!!");
112: return 0;
113: }
114:
115: public long getLongFramePosition()
116: {
117: System.out.println("getLongFramePosition -: IMPLEMENT ME!!");
118: return 0;
119: }
120:
121: public long getMicrosecondPosition()
122: {
123: System.out.println("getMicrosecondPosition -: IMPLEMENT ME!!");
124: return 0;
125: }
126:
127: public boolean isActive()
128: {
129: State state = pipeline.getState();
130: return (state == State.PLAY || state == State.PAUSE);
131: }
132:
133: public void start()
134: {
135: pipeline.setState(State.PLAY);
136: }
137:
138: public void stop()
139: {
140: pipeline.setState(State.PAUSE);
141: }
142:
143: public void close()
144: {
145: pipeline.close();
146: this.open = false;
147: }
148:
149: public boolean isRunning()
150: {
151: return (pipeline.getState() == State.PLAY);
152: }
153: }