タイトルの通りに、ファミコンでよくあった一文字づつ文字表示させて、その時に合わせて音が出るというプログラムを作っています。
Stringをchar型にかえて、一文字づつだす。
表示後すぐに音を出すようにするとそれっぽくはなったのですが
import
1import javax.sound.sampled.AudioSystem; 2import javax.sound.sampled.LineUnavailableException; 3import javax.sound.sampled.SourceDataLine; 4 5/** 6 * 音を出すプログラム 7 * hz 音の高さ 8 * msecs 再生時間 9 */ 10public class Sound { 11 12 public static float SAMPLE_RATE = 8000f; 13 14 public static void tone(int hz, int msecs) 15 throws LineUnavailableException { 16 tone(hz, msecs, 1.0); 17 } 18 19 public static void tone(int hz, int msecs, double vol) 20 throws LineUnavailableException { 21 byte[] buf = new byte[1]; 22 AudioFormat af = new AudioFormat( 23 SAMPLE_RATE, // sampleRate 24 8, // sampleSizeInBits 25 1, // channels 26 true, // signed 27 false); // bigEndian 28 SourceDataLine sdl = AudioSystem.getSourceDataLine(af); 29 sdl.open(af); 30 sdl.start(); 31 for (int i = 0; i < msecs * 8; i++) { 32 double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI; 33 buf[0] = (byte) (Math.sin(angle) * 127.0 * vol); 34 sdl.write(buf, 0, 1); 35 } 36 sdl.drain(); 37 sdl.stop(); 38 sdl.close(); 39 } 40 41 public static int tone() { 42 // TODO 自動生成されたメソッド・スタブ 43 return 0; 44 } 45 46}
/** * あらすじ * サウンドファイルより、ピコピコ音呼び出す * */ public class Arasuji { public static String[] arasuji = { "【ストーリー 紹介 〇ragonball 孫〇空少年編\r\n", "地球の人里離れた山奥に住む尻尾の生えた少年・孫〇空はある日、\r\n", "西の都からやって来た少女ブ〇マと出会う。】\r\n"}; //[0] public void Arasuji0 () { for (int l = 0; l < arasuji.length; l++) { try { // String[] arasujiの文字をchar型に変換,文字を配列に1文字ずつセット char data[] = Arasuji.arasuji[l].toCharArray(); for (int i = 0; i <= data.length - 1; i++) { Thread.sleep(50); System.out.print(data[i]); Sound.tone(5500,1); } Thread.sleep(1000); } catch (Exception e) { System.out.println(e); } } } }
//実行ファイル public class Main{ public static void main(String[] args) throws InterruptedException { Arasuji aaa = new Arasuji(); aaa.Arasuji0(); } }
これを実行すると、Stringの\r\nにも反応して、改行前に2回無駄に音が出てしまいます。
String型をcharに変換するときに文字として数えている為、音が出るのでしょうが、出ないようにするためのなにか解決策はないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/02 01:51 編集
2018/08/02 01:52
2018/08/02 01:55
2018/08/02 02:01
2018/08/02 02:01
2018/08/07 00:39
2018/08/07 01:51
2018/08/07 02:16 編集
2018/08/07 02:34