質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2824閲覧

JAVA 文字に合わせて音を出す

ueyama

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/08/02 01:34

タイトルの通りに、ファミコンでよくあった一文字づつ文字表示させて、その時に合わせて音が出るというプログラムを作っています。
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に変換するときに文字として数えている為、音が出るのでしょうが、出ないようにするためのなにか解決策はないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「1行ずつ出力して行の最後に改行をしたい」ということでしたら\r\nは文章に含むのではなく、
外のforの最後に固定で出力しては?

サンプルコード例示

java

1public class Arasuji { 2 ///////////\r\nは文章から抜く 3  public static String[] arasuji = { "【ストーリー 紹介 〇ragonball 孫〇空少年編", 4 "地球の人里離れた山奥に住む尻尾の生えた少年・孫〇空はある日、", 5 "西の都からやって来た少女ブ〇マと出会う。】"}; 6 7 public void Arasuji0 () { 8 for (int l = 0; l < arasuji.length; l++) { 9 try { 10 // String[] arasujiの文字をchar型に変換,文字を配列に1文字ずつセット 11 12 char data[] = Arasuji.arasuji[l].toCharArray(); 13 14 for (int i = 0; i <= data.length - 1; i++) { 15 Thread.sleep(50); 16 System.out.print(data[i]); 17 18 Sound.tone(5500,1); 19 } 20 21 ///////////\r\n出力 22 System.out.print("\r\n"); 23 Thread.sleep(1000); 24 } catch (Exception e) { 25 System.out.println(e); 26 } 27 } 28 } 29}

投稿2018/08/02 01:42

編集2018/08/02 01:55
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ueyama

2018/08/02 01:51 編集

すでにchar[]の配列にいれているため、どこのfor文の最後にいれたらいいのか分かりません。 変換後でも、char配列を回す、for文の中に入れても改行に問題はないのでしょうか
m.ts10806

2018/08/02 01:52

コメントだいぶ変わってますね・・・。 簡単にサンプルコード書くので少々お待ちを。
m.ts10806

2018/08/02 01:55

「外の」なので1つ目です。arasuji.lengthで回しているところです。try-catchあったのでtryの中に入れました。
tossy001

2018/08/02 02:01

やはりそうでしたか
ueyama

2018/08/02 02:01

ありがとうございます、思った動きになりました。
tossy001

2018/08/07 00:39

解決したようで、何よりです。
m.ts10806

2018/08/07 01:51

解決したようで何よりです
tossy001

2018/08/07 02:16 編集

削除♡
m.ts10806

2018/08/07 02:34

例文なので気にしなくて良いかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問