2011-10-26 4 views
0

マイクから録音して、.wavファイルとしてディスクに保存しています。JavaサウンドApi:ディスクに録画を保存した後でWavファイルが再生されない

Media Playerでwavファイルを再生できません。これは正常ですか?

AudioFormat format = new AudioFormat(
       AudioFormat.Encoding.PCM_SIGNED, 
       44100.0F, 16, 2, 4, 44100.0F, false); 
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); // format is an AudioFormat object 

    // Obtain and open the line. 
    try { 
     targetLine = (TargetDataLine) AudioSystem.getLine(info); 
     targetLine.open(format); 
     targetLine.start(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     int numBytesRead; 
     byte[] data = new byte[targetLine.getBufferSize()/5]; 

     targetLine.start(); 

     while (recording) { 
      numBytesRead = targetLine.read(data, 0, data.length); 
      out.write(data, 0, numBytesRead); 
      System.out.println(Arrays.toString(data)); 
     }  


     File fileOut = new File("C:\\audio\\audio6.wav"); 
     AudioInputStream ais = new AudioInputStream(targetLine); 

     if (AudioSystem. isFileTypeSupported(AudioFileFormat.Type.WAVE,ais)) { 
      AudioSystem.write(ais, AudioFileFormat.Type.WAVE, fileOut); 
      System.out.println("writen"); 
     } 
     targetLine.stop(); 

     ais.close(); 
+0

それが動作するはずです。ファイル内にデータがありますか、それともちょうど迷惑メールですか? –

+0

ByteArrayOutputStreamのコンテンツを使用していません - なぜですか? –

+0

@ジョン私は別の書き込みを試みていた:// \t \t OutputStream outputStream = new FileOutputStream(fileOut); // \t \t // \t \t \t \t out.writeTo(OutputStreamの); // \t \t \t \t outputStream.close(); // \t \t \t \t out.close(); – Blitzkr1eg

答えて

0

正しく動作している場合、メディアプレーヤーでファイルを再生できるはずです。

無料のオーディオエディタAudacity(http://audacity.sourceforge.net/)のコピーを入手し、そのデータを見ることをお勧めします。 まず、ファイルにデータがあるかどうかチェックし、エンディアン、ビット深度、およびサンプルレートが正しいことを確認してください(スイッチオーバーして、ノイズが発生していないかどうか確認してください)。

これでうまくいかない場合は、マイクではなくファイルからいくつかのサンプルを読み取って、もう一方の端に来るときに同じであることを確認してください。

あなたはそれがすでにこれはジョンで指摘したようにあなたが(ByteArrayOutputStreamに記録されたデータをロードし、それを使って何をやったことがないされているJavaのオーディオ http://www.jsresources.org/

0

のための素晴らしいリソースです発見していない場合スケート)。

"recording"ブール値がfalseの場合、次にTargetDataLineをAudioInputStreamに添付しますか?しかし、録音が偽であれば、TDLからのデータはないと仮定します。データはread()メソッドを介してTDLから取得され、whileループ内にあります。

TDLからデータを収集するために使用したByteArrayOutputStreamから作成できるByteArrayInputStreamを使用してAISを作成することは可能だと思います。

記録ブールがfalseになった後、このように、あなたのAISこうして作ってみる:

ByteArrayInputStream bais = new ByteArrayInputStream(out.toByteArray()); 
AudioInputStream ais = new AudioInputStream(bais, format, baos.size());