Java Sound APIを使用して2つのデータバッファを1つのオーディオファイルに別々のチャネルとして出力しようとしています。モノチャンネルオーディオを出力する方法を見つけましたが、それは私が探しているものではありません。私はどのオーディオフォーマット(WAV、MP3など)を使うべきかも知らない。私の2つのデータバッファは、-127から+127の範囲のバイト配列です。マルチチャネルオーディオファイルを保存
1
A
答えて
0
おそらく、投稿するコードがあります。
oracleのドキュメントを読んだか。または、thisのようなものを探しますか?
ファイル形式を使用する場合、私はMP3形式はWAVよりもはるかに少ないメモリを使用すると考えました。すべての形式はWAVに基づいていますが、ただ圧縮されているからです。
1
ここに、WAV
ファイルの作成方法を示すサンプルコードがあります。 MP3
は、実際にはJavaでサポートされていませんが、ライブラリがあります。
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
public class StereoOutput {
public static void main(final String[] args) throws IOException {
// left samples - typically more than 4!!
final byte[] left = new byte[] {1, 2, 3, 4};
// right samples
final byte[] right = new byte[] {1, 2, 3, 4};
final ByteArrayInputStream interleavedStream = createInterleavedStream(left, right);
// audio format of the stream we created
final AudioFormat audioFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
44100f, // sample rate - you didn't specify, 44.1k is typical
8, // how many bits per sample, i.e. per value in your byte array
2, // you want two channels (stereo)
2, // number of bytes per frame (frame == a sample for each channel)
44100f, // frame rate
true); // byte order
final int numberOfFrames = left.length; // one frame contains both a left and a right sample
// wrap stream into AudioInputStream (data + format)
final AudioInputStream audioStream = new AudioInputStream(interleavedStream, audioFormat, numberOfFrames);
// write to WAV file
AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, new File("out.wave"));
}
/**
* Typically in PCM audio, left and right samples are interleaved.
* I.e.: LR LR LR LR.
* One LR is also called a "frame".
*
* @param left array with left samples
* @param right array with right samples
* @return stream that contains all samples in LR LR interleaved order
*/
private static ByteArrayInputStream createInterleavedStream(final byte[] left, final byte[] right) {
final byte[] interleaved = new byte[left.length + right.length];
for (int i=0; i<left.length; i++) {
interleaved[2*i] = left[i];
interleaved[2*i+1] = right[i];
}
return new ByteArrayInputStream(interleaved);
}
}
私はJava Sound Trailを通してあなたの方法を作業をお勧めしますし、またAudioFormatのようなクラスのJava APIのドキュメントをチェックしてください。 PCMに精通していない場合は、それについても読んでください。デジタルサンプルオーディオを理解することは不可欠です。
関連する問題
- 1. UDFを保存/保存する
- 2. 保存した情報を保存
- 3. PHPクラスオブジェクトを保存/保存する
- 4. JSONObjectを保存
- 5. GameMaker:highscoreを保存
- 6. セレンテストスクリーンショットを保存
- 7. PowerPointの保存と保存as
- 8. PhpStormコードの保存時の保存
- 9. Flash:スクリーンショットの保存/ビューポートイメージの保存
- 10. 保存
- 11. 保存
- 12. 保存
- 13. SQLiteデータベースを保存
- 14. pySpark:MLモデルを保存
- 15. デザインパターン:プライベートメンバーを保存
- 16. Tweepyオブジェクトを保存
- 17. 図面を保存
- 18. iframeを保存してコンテンツを保存する
- 19. ブランチを保存し、隠しを保存しますか?
- 20. Rails。子を保存する前に親を保存する
- 21. 配列にen $ _POSTを保存する値を保存する
- 22. R forループでプロットを保存する(ヒストグラムを保存する)
- 23. asp.netフォームをhtmlファイルに保存し、制御内容を保存
- 24. PowershellでXMLを保存してフォーマットを保存する
- 25. Excel interop:保存ダイアログを表示せずにブックを保存
- 26. HBaseにJSONを保存し、Idでクエリを保存
- 27. データを保存しないカスタムポストメタを保存します
- 28. SKPaymentトランザクションを保存または保存する方法は?
- 29. javascriptで保存した画像をPHPで保存
- 30. PHPはリモートサーバにファイルを保存/保存しますか?
明確にするために、Javaアプリケーション経由でサウンドを再生しているか、サウンドファイルを書き出し/書き出していますか?別々のチャンネルを言うときは、バッファー1のデータをステレオの左に、バッファー2をステレオの右に入れたいですか?それとも別の話をしているのですか? –