gpt4 book ai didi

java - PCM 波形文件 - 立体声到单声道

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:37 36 4
gpt4 key购买 nike

我有一个立体声音频文件。将它转换为单声道只是跳过每隔一个字节(在标题之后)的情况吗?它以 16 位签名的 PCM 格式编码。我有可用的 javax.sound.sampled

这是我试过但不起作用的代码:

WaveFileWriter wfw = new WaveFileWriter();
AudioFormat format = new AudioFormat(Encoding.PCM_SIGNED, 44100, 16, 2, 2, 44100, false);
AudioFormat monoFormat = new AudioFormat(Encoding.PCM_SIGNED, 44100, 16, 1, 2, 44100, false);

byte[] audioData = dataout.toByteArray();
int length = audioData.length;
ByteArrayInputStream bais = new ByteArrayInputStream(audioData);

AudioInputStream stereoStream = new AudioInputStream(bais,format,length);
AudioInputStream monoStream = new AudioInputStream(stereoStream,format,length/2);

wfw.write(monoStream, Type.WAVE, new File(Environment.
getExternalStorageDirectory().getAbsolutePath()+"/stegDroid/un-ogged.wav"));

此代码是在使用 Jorbis 读取 .ogg 文件并将其转换为 PCM 数据后使用的。唯一的问题是结果是立体声,我需要它是单声道的,所以如果有其他解决方案,我很高兴听到它!

最佳答案

I have an audio file which is stereo. Is converting it to mono just a case of skipping every other byte (after the header)?

几乎-您想跳过所有其他样本,而不是字节。在您的情况下,看起来每个样本的大小都是 16 位 = 2 字节。所以你会想取 2 个字节,跳过 2 个字节,取 2 个字节等等。

AudioInputStream monoStream = new AudioInputStream(stereoStream,format,length/2);

wfw.write(monoStream, Type.WAVE, new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/stegDroid/un-ogged.wav"));

这看起来您只是写出了文件的前半部分,而不是写出了所有其他样本。您还必须修复 WAV header ,以指定单个 channel (请参阅您的 monoFormat)。

关于java - PCM 波形文件 - 立体声到单声道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4714542/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com