gpt4 book ai didi

java - 使用 TarsosDSP 将立体声转换为单声道不起作用

转载 作者:行者123 更新时间:2023-11-30 06:09:12 28 4
gpt4 key购买 nike

我想在声音数据上使用 TarsosDSP 的一些功能。传入的数据是立体声,但 Tarsos 只支持单声道,所以我尝试将其转换为单声道,如下所示,但结果听起来仍然像立体声数据解释为单声道,即通过 MultichannelToMono 进行转换不会'尽管乍一看它的实现看起来不错,但似乎没有任何效果。

@Test
public void testPlayStereoFile() throws IOException, UnsupportedAudioFileException, LineUnavailableException {
AudioDispatcher dispatcher = AudioDispatcherFactory.fromFile(FILE,4096,0);
dispatcher.addAudioProcessor(new MultichannelToMono(dispatcher.getFormat().getChannels(), false));
dispatcher.addAudioProcessor(new AudioPlayer(dispatcher.getFormat()));
dispatcher.run();
}

我在这里做错了什么吗?为什么 MultichannelToMono 处理器不将数据传输到单声道?

最佳答案

我发现有效的唯一方法是在将数据发送到 TarsosDSP 之前使用 Java 音频系统执行此转换,它似乎无法正确转换帧大小

我在 https://www.experts-exchange.com/questions/26925195/java-stereo-to-mono-conversion-unsupported-conversion-error.html 找到了以下代码片段在使用 TarsosDSP 应用更高级的音频转换之前,我用它来转换为单声道。

public static AudioInputStream convertToMono(AudioInputStream sourceStream) {
AudioFormat sourceFormat = sourceStream.getFormat();

// is already mono?
if(sourceFormat.getChannels() == 1) {
return sourceStream;
}

AudioFormat targetFormat = new AudioFormat(
sourceFormat.getEncoding(),
sourceFormat.getSampleRate(),
sourceFormat.getSampleSizeInBits(),
1,
// this is the important bit, the framesize needs to change as well,
// for framesize 4, this calculation leads to new framesize 2
(sourceFormat.getSampleSizeInBits() + 7) / 8,
sourceFormat.getFrameRate(),
sourceFormat.isBigEndian());
return AudioSystem.getAudioInputStream(targetFormat, sourceStream);
}

关于java - 使用 TarsosDSP 将立体声转换为单声道不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631179/

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