Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 김장훈
- SWT
- 차트쇼쇼쇼
- 자바
- HSDPA
- 한국의 기획자들
- ETF
- 유희열의라디오천국
- itmusic
- 김장훈의who
- 공정위
- 모던음악만만세
- 위피
- CDMA
- 페이스북
- 그녀가말했다
- brew
- Wibro
- Java
- 퀄컴
- 민동현의토요명화
- 러시아
- 이지형
- 사요
- 민동현
- EV-DO Rev. B
- VoIP
- "명탐정 코난"
- USIM
- 라디오
Archives
- Today
- Total
01-15 17:40
zyint's blog
JMAC 간단한 재생 예제 본문
/*
* 21.04.2004 Original verion. davagin@udm.ru.
*-----------------------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/
package davaguine.jmac.test;
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Author: Dmitry Vaguine
* Date: 12.03.2004
* Time: 13:35:13
*/
public class JavaSoundSimpleAudioPlayer {
/**
* Plays audio from given file names.
*/
public static void main(String[] args) {
// Check for given sound file names.
if (args.length < 1) {
System.out.println("Play usage:");
System.out.println("\tjava Play <sound file names>*");
System.exit(0);
}
// Process arguments.
for (int i = 0; i < args.length; i++)
playAudioFile(args[i]);
// Must exit explicitly since audio creates non-daemon threads.
System.exit(0);
} // main
/**
* Play audio from the given file name.
*/
public static void playAudioFile(String fileName) {
try {
AudioInputStream audioInputStream = null;
AudioFileFormat audioFileFormat = null;
try {
URL url = new URL(fileName);
audioFileFormat = AudioSystem.getAudioFileFormat(url);
audioInputStream = AudioSystem.getAudioInputStream(url);
} catch (MalformedURLException e) {
File soundFile = new File(fileName);
audioFileFormat = AudioSystem.getAudioFileFormat(soundFile);
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
}
// Create a stream from the given file.
// Throws IOException or UnsupportedAudioFileException
playAudioStream(audioInputStream);
} catch (Exception e) {
System.out.println("Problem with file " + fileName + ":");
e.printStackTrace();
}
} // playAudioFile
/**
* Plays audio from the given audio input stream.
*/
public static void playAudioStream(AudioInputStream audioInputStream) {
// Audio format provides information like sample rate, size, channels.
AudioFormat audioFormat = audioInputStream.getFormat();
// Convert compressed audio data to uncompressed PCM format.
if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
AudioFormat newFormat = new AudioFormat(audioFormat.getSampleRate(),
audioFormat.getSampleSizeInBits(),
audioFormat.getChannels(),
true,
false);
System.out.println("Converting audio format to " + newFormat);
AudioInputStream newStream = AudioSystem.getAudioInputStream(newFormat, audioInputStream);
audioFormat = newFormat;
audioInputStream = newStream;
}
// Open a data line to play our type of sampled audio.
// Use SourceDataLine for play and TargetDataLine for record.
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Play.playAudioStream does not handle this type of audio on this system.");
return;
}
try {
// Create a SourceDataLine for play back (throws LineUnavailableException).
SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine(info);
System.out.println("SourceDataLine class=" + dataLine.getClass());
// The line acquires system resources (throws LineAvailableException).
dataLine.open(audioFormat);
// Adjust the volume on the output line.
if (dataLine.isControlSupported(FloatControl.Type.MASTER_GAIN)) {
FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
volume.setValue((volume.getMaximum() - volume.getMinimum()) * 0.8f + volume.getMinimum());
}
// Allows the line to move data in and out to a port.
dataLine.start();
// Create a buffer for moving data from the audio stream to the line.
int bufferSize = (int) audioFormat.getSampleRate() * audioFormat.getFrameSize();
byte[] buffer = new byte[bufferSize];
// Move the data until done or there is an error.
try {
int bytesRead = 0;
while (bytesRead >= 0) {
bytesRead = audioInputStream.read(buffer, 0, buffer.length);
if (bytesRead >= 0) {
//System.out.println("Play.playAudioStream bytes read=" + bytesRead +
// ", frame size=" + audioFormat.getFrameSize() + ", frames read=" + bytesRead / audioFormat.getFrameSize());
// Odd sized sounds throw an exception if we don't write the same amount.
int framesWritten = dataLine.write(buffer, 0, bytesRead);
}
} // while
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Play.playAudioStream draining line.");
// Continues data line I/O until its buffer is drained.
dataLine.drain();
System.out.println("Play.playAudioStream closing line.");
// Closes the data line, freeing any resources such as the audio device.
dataLine.close();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
} // playAudioStream
}
* 21.04.2004 Original verion. davagin@udm.ru.
*-----------------------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/
package davaguine.jmac.test;
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Author: Dmitry Vaguine
* Date: 12.03.2004
* Time: 13:35:13
*/
public class JavaSoundSimpleAudioPlayer {
/**
* Plays audio from given file names.
*/
public static void main(String[] args) {
// Check for given sound file names.
if (args.length < 1) {
System.out.println("Play usage:");
System.out.println("\tjava Play <sound file names>*");
System.exit(0);
}
// Process arguments.
for (int i = 0; i < args.length; i++)
playAudioFile(args[i]);
// Must exit explicitly since audio creates non-daemon threads.
System.exit(0);
} // main
/**
* Play audio from the given file name.
*/
public static void playAudioFile(String fileName) {
try {
AudioInputStream audioInputStream = null;
AudioFileFormat audioFileFormat = null;
try {
URL url = new URL(fileName);
audioFileFormat = AudioSystem.getAudioFileFormat(url);
audioInputStream = AudioSystem.getAudioInputStream(url);
} catch (MalformedURLException e) {
File soundFile = new File(fileName);
audioFileFormat = AudioSystem.getAudioFileFormat(soundFile);
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
}
// Create a stream from the given file.
// Throws IOException or UnsupportedAudioFileException
playAudioStream(audioInputStream);
} catch (Exception e) {
System.out.println("Problem with file " + fileName + ":");
e.printStackTrace();
}
} // playAudioFile
/**
* Plays audio from the given audio input stream.
*/
public static void playAudioStream(AudioInputStream audioInputStream) {
// Audio format provides information like sample rate, size, channels.
AudioFormat audioFormat = audioInputStream.getFormat();
// Convert compressed audio data to uncompressed PCM format.
if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
AudioFormat newFormat = new AudioFormat(audioFormat.getSampleRate(),
audioFormat.getSampleSizeInBits(),
audioFormat.getChannels(),
true,
false);
System.out.println("Converting audio format to " + newFormat);
AudioInputStream newStream = AudioSystem.getAudioInputStream(newFormat, audioInputStream);
audioFormat = newFormat;
audioInputStream = newStream;
}
// Open a data line to play our type of sampled audio.
// Use SourceDataLine for play and TargetDataLine for record.
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Play.playAudioStream does not handle this type of audio on this system.");
return;
}
try {
// Create a SourceDataLine for play back (throws LineUnavailableException).
SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine(info);
System.out.println("SourceDataLine class=" + dataLine.getClass());
// The line acquires system resources (throws LineAvailableException).
dataLine.open(audioFormat);
// Adjust the volume on the output line.
if (dataLine.isControlSupported(FloatControl.Type.MASTER_GAIN)) {
FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
volume.setValue((volume.getMaximum() - volume.getMinimum()) * 0.8f + volume.getMinimum());
}
// Allows the line to move data in and out to a port.
dataLine.start();
// Create a buffer for moving data from the audio stream to the line.
int bufferSize = (int) audioFormat.getSampleRate() * audioFormat.getFrameSize();
byte[] buffer = new byte[bufferSize];
// Move the data until done or there is an error.
try {
int bytesRead = 0;
while (bytesRead >= 0) {
bytesRead = audioInputStream.read(buffer, 0, buffer.length);
if (bytesRead >= 0) {
//System.out.println("Play.playAudioStream bytes read=" + bytesRead +
// ", frame size=" + audioFormat.getFrameSize() + ", frames read=" + bytesRead / audioFormat.getFrameSize());
// Odd sized sounds throw an exception if we don't write the same amount.
int framesWritten = dataLine.write(buffer, 0, bytesRead);
}
} // while
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Play.playAudioStream draining line.");
// Continues data line I/O until its buffer is drained.
dataLine.drain();
System.out.println("Play.playAudioStream closing line.");
// Closes the data line, freeing any resources such as the audio device.
dataLine.close();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
} // playAudioStream
}
이 글은 스프링노트에서 작성되었습니다.
Comments