私はJavaでファイルをダウンロードするのは初めてで、それがばかげた質問である場合は申し訳ありませんが、2日間検索したので、解決策を得ることができませんでした。アプレット内でJPanelを使用していて、progressBarにダウンロードの進行状況を表示したい(ダウンロードは正しい単語ではない可能性があり、初期化されている可能性が高い)
私が欲しいのは、URLからのwavファイルのダウンロードプロセスを表示することです。読み取りプロセスを表示するつもりはありません(ファイルが後で処理されていることをユーザーに通知します)。ais = AudioSystem.getAudioInputStream(url);
ProgressMonitorInputStreamを使用しようとしましたが、プログレスバーをJFrameに追加したいので、これは機能しません。私はswingWorkerを探しましたが、それを使用しても私が望む進歩は得られません。
これが私の読み取り関数です。また、必要に応じてwav形式を変更しています。
public void readFile() {
byte[] data = null;
AudioInputStream ais = null;
try {
URL url = new URL("http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/WAVE/Samples/AFsp/M1F1-Alaw-AFsp.wav");
ais = AudioSystem.getAudioInputStream(url);
AudioFormat format = ais.getFormat();
numberOfChannels = format.getChannels();
AudioFormat TargetFormat = new AudioFormat(format.getSampleRate(), 16, numberOfChannels, true, false);
AudioInputStream desiredFormatStream = AudioSystem.getAudioInputStream(TargetFormat,ais);
data = new byte[4];
int totalSampleCount = ais.available()/(format.getSampleSizeInBits()/8);
audio = new double[totalSampleCount];
for (int i = 0; i < totalSampleCount-1; i=i+2) {
desiredFormatStream.read(data);
if(!TargetFormat.isBigEndian()){
audio[i] = ((short) (((data[1] & 0xFF) << 8) + (data[0] & 0xFF))) / ((double) MAX_16_BIT);
audio[i+1] = ((short) (((data[3] & 0xFF) << 8) + (data[2] & 0xFF))) / ((double) MAX_16_BIT);
}
else {
audio[i] = ((short) (((data[0] & 0xFF) << 8) + (data[1] & 0xFF))) / ((double) MAX_16_BIT);
audio[i+1] = ((short) (((data[2] & 0xFF) << 8) + (data[3] & 0xFF))) / ((double) MAX_16_BIT);
}
}
StdAudio.open(TargetFormat);
} catch (Exception e) {
System.out.println(e.getMessage());
throw new RuntimeException("Could not read " + filename);
}
}
これを達成する方法はありますか?
前もって感謝します。