• ベストアンサー

自作した波形データを Wave 形式で保存する

UKYの回答

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

ByteArrayInputStream 経由で出力する単純な例です。 public static void main(String[] args) throws IOException { byte[] data = new byte[48000 * 2]; for (int i = 0; i < data.length; i++) { data[i] = (byte) (((i & (1 << 6)) == 0) ? -18 : 18); } AudioFormat af = new AudioFormat(48000, 8, 1/*mono*/, true/*signed*/, false/*little-endian*/); InputStream in = new ByteArrayInputStream(data); AudioInputStream ais = new AudioInputStream(in, af, 48000 * 2); AudioFileFormat.Type type = AudioFileFormat.Type.WAVE; File sound = new File("sound.wav"); AudioSystem.write(ais, type, sound); }

noname#15728
質問者

お礼

 回答有難うございます。  早速取り入れて( open() などの取り外しの所でちょっと躓きましたが)やってみましたら wave ファイルが出現してプログラムが終了し、ファイルを WMP に放り込みますと見事に鳴りました。  大変助かりました。感謝します。

関連するQ&A

  • スレッドの自動終了について。

    スレッドの自動終了について。 クリップをファイルから取得し、[1]キーが押されるとクリップが再生され、クリップ再生中の場合は ファイル名を表示したラベルに色を着けるプログラムを作ってみたのですが 1度のみなら正しく作動するのですが、2回目にキーを押そうとすると、クリップだけ再生しラベルの色は黒いままです。 そして、3回目以降はキーをいくら押してもクリップが再生されません。 これを正しく動作させるにはどのようにしたらよいでしょうか。 キーリスナ、スレッド、アクションリスナの内容を記載しますので、ご指導頂けたらと思います。 class ClipWatching extends Thread { public ClipWatching() { } public void run() { while(clip1.isRunning()) { lb1.setForeground(Color.red); } lb1.setForeground(Color.black); thread = false; } } class SampleKeyListener implements KeyListener { public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_1) { try{ if(thread == false) { cw.join(); } clip1.start(); cw.start(); thread = true; } catch(Exception uu) { } } } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){ } } class SampleActionListener implements ActionListener { public void shori() { } public void actionPerformed(ActionEvent e) { try { if(e.getSource() == bt1) { fl1 = new File("001.wav"); lb1.setText(fl1 + ""); ais1 = AudioSystem.getAudioInputStream(fl1); format1 = ais1.getFormat(); info1 = new DataLine.Info(Clip.class, format1); clip1 = (Clip) AudioSystem.getLine(info1); clip1.open(ais1); } } catch(Exception ex) { } }

  • Java で MP3 (JMF + MP3plugin)

    JAVAでMP3Playerを作ろうとしていて格闘中の者です JavazoomでのMP3プラグインではなく JMFのMP3プラグインをつかって作ろうとしているのですが。 Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: co uld not get audio input stream from input file at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java: 786) に悩まされています。 CLASSPATHにjmf.jar,sound.jar,mp3plugin.jarは指定してあり、 JMStudioで再生できるMP3で、 ソースは、 import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.DataLine; import java.io.File; public class Player2 { private static final int BUFFER_SIZE = 176400; // 44100 x 16 x 2 / 8 public static void main(String[] args) throws Exception { byte[] buffer = new byte[BUFFER_SIZE]; AudioInputStream in = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, AudioSystem.getAudioInputStream(new File (args[0]))); AudioFormat audioFormat = in.getFormat(); SourceDataLine line = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(SourceDataLine.class, audioFormat)); line.open(audioFormat); line.start(); while (true) { int n = in.read(buffer, 0, buffer.length); if (n < 0) { break; } line.write(buffer, 0, n); } line.drain(); line.close(); } } です よろしくお願いします。

    • ベストアンサー
    • Java
  • javascriptの配列をPHPで読み込みたいのですが・・・

    javascriptの配列を記述してあるファイル info.js があるとします data = new array(); data[0] = new array("data1","data2","data3"); data[1] = new array("data1","data2","data3"); data[2] = new array("data1","data2","data3"); ・ ・ ・ 上記の文で書かれた配列データを、PHP上で読み込み、新着一覧のような形でhtmlで表示したいのですが、方法が分かりません。 分かる方がいらっしゃいましたら教えて下さい。

    • ベストアンサー
    • PHP
  • ギブアップ!!

    お世話になります。 よっしです。 VBSで以下のことをしたいのですが、うまくいきません! ご存知の方教えてください。 ・2個のテキストファイル(Text1、Text2(改行あり))の文字列を比較し、同じものが無い場合にその文字列を別ファイルにWriteしたい。 Text1の内容例  Line1  Line2  Line3  Line4 Text2の内容例  Line2  Line3 この場合新規ファイルには以下のように記述したいです。  Line1  Line4 配列を使用してちょちょっとできると思ったらなかなか上手くいかず、配列と文字列のFilterをしたら"True"の場合を指定するとエラーが出てしまいます。 一次元の配列のはずなんですが・・・ 何か上手くいく方法があれば教えてください!

  • JSPのcharAt()について

    JSPです。text1.txtをBufferedReaderで読み込んで、一文字ごとにchar型のline[]という配列に入れようとしています。 しかし、l.charAt();の部分でエラー起きてしまいます。 原因は何なのでしょう? 文字列をString型に直接(String l = "aaaaaa";のように)書き込むと動くようです。 String path = getServletContext().getRealPath("/WEB-INF/text1.txt"); BufferedReader br = new BufferedReader(new FileReader(path)); String l = ""; char line[]; while((l = br.readLine()) != null){ line = new char[l.length()]; for(int j=0; j <= l.length(); j++){ line[j] = l.charAt(j); out.print(l.charAt(j)); } } どこがおかしいのか、原因がわかる方教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • バイナリ読み込み時のデータ受け渡しについて

    質問させていただきます。 XMLファイルを圧縮後にバイナリ読み込みし、long*に設定してそれを4バイトのlong配列に格納したいと考えています。 ファイルを読み込む際にはデータ数が解らないので、ループを回したいと思っています。 以下に一部記載します。 これでpBinaryには正常にバイナリデータが入るのでしょうか? わかる方がいれば教えてください。 ****************************************** FILE *pFile = NULL; pFile = fopen("XMLFile.xml", "rb"); int iRet = 0; int iSize = 0; bool bRet = false; long *pBinary = new long; while(bRet != true) { /* 4バイトずつ読み込みpBinaryに設定する */ fread(pBinary, sizeof(4), 1, pFile); if(iRet != 1) { bRet = true; } else { iSize++; } }

  • flash MX での mp3ファイルの途中再生と停止

    mp3 ファイルの頭からの再生は、  bgSndObj = new Sound(this); bgSndObj.LoadSound("a.mp3",true); bgSndObj.Start(); で、停止は、  bgSndObj.Start(); ですが、 途中で停止、そこから再生するにはどうすればいいでしょうか?

  • dirコマンドを実行して、結果を表示するJavaプログラム(プログラム

    dirコマンドを実行して、結果を表示するJavaプログラム(プログラムは一番下に)なのですが このプログラムをfor文でfor(int i=0;i<=13;i++)とこのように やったら、以下のような結果になったのですが //実行結果 ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は xxxx-xxxx です C:\Users\z\zw\zww(1) のディレクトリ 2010/10/19 11:11 <DIR> . 2010/10/19 11:11 <DIR> .. 2010/10/19 11:11 301 .classpath 2010/10/19 11:11 381 .project 2010/10/19 11:11 <DIR> .settings 2010/10/19 11:16 <DIR> bin 2010/10/19 11:16 <DIR> src 2 個のファイル 682 バイト 5 個のディレクトリ 48,884,387,840 バイトの空き領域 //実行結果ここまで これをwhileで while(true){ if(a.getLine()==null){ break; } System.out.println(a.getLine()); } というようにやると以下のような実行結果になって、for文と同じ結果になるのが正 しい結果だと思うのですがなりませんでした。ループを抜けるために、break文をや ったのですが、自分が考えた条件は、getLine()メソッドは読み込む行が無くなった ら、nullを返すので、a.getLineがnullと同じになったらbreakをするという風に自 分ではしたつもりなのですが、条件が違うのかfor文のような結果が出ませんでした。 whileの場合なぜこのような結果になってしまったのかわからなく、 手詰まりになってしまったので、どなたかご教授ください 実行結果 ボリューム シリアル番号は xxxx-xxxx です C:\Users\z\zw\zww(1) のディレクトリ 2010/10/19 11:11 <DIR> . 2010/10/19 11:11 301 .classpath 2010/10/19 11:11 <DIR> .settings 2010/10/19 11:16 <DIR> src 5 個のディレクトリ 48,886,591,488 バイトの空き領域 実行結果ここまで //プログラム import java.io.*; class DirCmd{ BufferedReader br; DirCmd(){//コンストラクタの定義(dirコマンドをここで実行) try{ Process p = Runtime.getRuntime().exec("cmd /c dir"); InputStream is = p.getInputStream(); br = new BufferedReader(new InputStreamReader(is)); }catch(IOException e){} } public String getLine(){//dirコマンドの実行結果の一行を読む String line = null;// 読み込む行が無くなったらnullを返す try{ line = br.readLine(); }catch(IOException e){} return(line); } public static void main(String [] args){ DirCmd a = new DirCmd(); while(true){ if(a.getLine()== null){ break; } System.out.println(a.getLine());     } } }

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 開いたファイルをJListに追加したい

    最近、Swingを勉強し始めたばかりです。 開くボタンを作りファイルチューザでcsvファイルを開き、1行ずつ引っ張り出してきて全データをJListに表示したいのですがうんともすんともいいません。 知恵をお貸しくださいお願いします(T_T) 鈴木一郎,東京都,渋谷110,1960 松井一郎,大阪府,大阪市119,1928 class SwingTest extends JFrame implements ActionListener{ private static JFrame frame; private JFileChooser chooser = new JFileChooser(); private Container pane = getContentPane(); private DefaultListModel myList = new DefaultListModel(); 略 public void actionPerformed(ActionEvent e){ String s = e.getActionCommand(); if(s.equals("Open")==true){ JFileChooser chooser = new JFileChooser(); int returnval = chooser.showOpenDialog(this); li.setPreferredSize(new Dimension(500,300)); if(returnval == JFileChooser.APPROVE_OPTION){ File file = chooser.getSelectedFile(); FileInputStream fis = new FileInputStream( file ); InputStreamReader isr = new InputStreamReader( fis ); BufferedReader br = new BufferedReader( isr ); String line = br.readLine(); String[] token = line.split(","); String str = token[0] + "\t" + token[3]; myList.addElement(str); li.setModel(myList); }

    • ベストアンサー
    • Java