【问题标题】:Separate channels in javajava中的独立通道
【发布时间】:2015-02-19 17:09:45
【问题描述】:

这个软件可以录制 PC 的声音(带有 targetdataline),但我无法在 Java 中分离两个通道(立体声)...

例如:我用一根音频线(立体声)将一个 ipod 和一个 iphone 连接到我的 PC,ipod 在右声道,iphone 在左声道。所以我希望能够录制右声道或左声道。在我录制的那一刻,我在同一个音频文件中有两种声音。

我的音频格式

float sampleRate = 8000.0F; // 8000,11025,16000,22050,44100  int
sampleSizeInBits = 16; // 8,16  int channels = 2; // 1,2 boolean
signed = true; // true,false  boolean bigEndian = false; // true,false
return new AudioFormat(sampleRate, sampleSizeInBits, channels,
  signed,bigEndian);

并用“TargetDataLine”写我的文件例如:

targetDataLine.open(audioFormat);  
targetDataLine.start();
AudioSystem.write(new AudioInputStream(targetDataLine), fileType,
  audioFile);

有人有想法吗?

【问题讨论】:

  • 您能发布有关您尝试过的详细信息吗?代码 sn-ps?
  • 我的音频格式float sampleRate = 8000.0F; // 8000,11025,16000,22050,44100 int sampleSizeInBits = 16; // 8,16 int channels = 2; // 1,2 boolean signed = true; // true,false boolean bigEndian = false; // true,false return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
  • 并用“TargetDataLine”写我的文件例如:targetDataLine.open(audioFormat); targetDataLine.start(); AudioSystem.write(new AudioInputStream(targetDataLine), fileType, audioFile);
  • 请更新问题 - cmets 可以删除。我只是想帮助您以一种更有可能得到好的答案的方式来表述这个问题。

标签: java audio wav


【解决方案1】:

您可以在 targetDataLine 上设置 channels=1 并使用它来读取特定通道上的数据。每当您需要特定频道上的音频时,您都可以根据读取信息的位置知道要读取的内容。将音频数据保存在 byte[] 中是最合适的,因为您可以选择从 byte[] 读取的数据。我建议您再次查看 sound.sampled 并决定如何处理它。我的系统麦克风有问题,我会查看这段代码。

【讨论】:

  • 谢谢你的回答,一定要用targetDataLine的read(int read(byte[] b, int off, int len)方法吧?
  • 但我怀疑你能否举个例子?
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2021-11-29
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多