Java Sound APIを用いて音楽の速度を上げるプログラムを書いているのですが、
何故か砂荒良のような音、所謂ホワイトノイズが鳴ります。原因が全く分かりません。
一体どうすればいいのでしょうか?プログラムの問題ではなく、パソコンの問題なのでしょうか?
環境はWindows 7 32bit、メモリは4GB、CPUはCore i5 2.2GHzです
ソースコードは以下の通りです。よろしくお願いします。
Java
1import java.io.ByteArrayInputStream; 2import java.io.ByteArrayOutputStream; 3import java.io.File; 4import java.util.Date; 5 6import javax.sound.sampled.AudioFormat; 7import javax.sound.sampled.AudioInputStream; 8import javax.sound.sampled.AudioSystem; 9import javax.sound.sampled.Clip; 10 11public class SoundTest { 12 public static void main(String[] args) throws Exception { 13 14 //この変数で音の速度を変更する 15 //この設定では1.2倍速になる。 16 double playBackSpeed = 1.2; 17 18 System.out.println("Playback Rate: " + playBackSpeed); 19 20 File url = new File("battle1.wav"); 21 22 AudioInputStream ais = AudioSystem.getAudioInputStream(url); 23 AudioFormat af = ais.getFormat(); 24 25 int frameSize = af.getFrameSize(); 26 27 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 28 29 byte[] b = new byte[2^16]; 30 31 int read = 1; 32 33 while( read > -1 ) { 34 read = ais.read(b); 35 if (read > 0) { 36 baos.write(b, 0, read); 37 } 38 } 39 40 byte[] b1 = baos.toByteArray(); 41 byte[] b2 = new byte[(int)((float)(b1.length/playBackSpeed))]; 42 for (int ii=0; ii<b2.length/frameSize; ii++) { 43 for (int jj=0; jj<frameSize; jj++) { 44 b2[(ii*frameSize)+jj] = b1[(int)(ii*frameSize*playBackSpeed)+jj]; 45 } 46 } 47 48 ByteArrayInputStream bais = new ByteArrayInputStream(b2); 49 AudioInputStream aisAccelerated = 50 new AudioInputStream(bais, af, b2.length); 51 Clip clip = AudioSystem.getClip(); 52 clip.open(aisAccelerated); 53 clip.loop((int)(2*playBackSpeed)); 54 clip.start(); 55 } 56}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/17 00:26