当前位置: 首页 > 知识库问答 >
问题:

通过 SourceDataLine.write 播放声音 - 如何使用具有双精度值的 byte[]-Buffer

萧亦
2023-03-14

我对如何使用Java的< code > SourceDataLine . write()方法中的< code>byte[]-buffer有点困惑:在我的程序中,我试图生成音频数据,我通过source dataline回放这些数据。但是,我生成的是< code > double -值,并且一个样本使用4个字节(my < code > audio format :< code > new audio format(8000 f,32,1,true,true))。

将一个双精度转换为四个字节s(/“播放”双精度值)的最佳方法是什么?

[PS:32 bis的样本大小适合正常音频播放吗?]

共有1个答案

潘驰
2023-03-14

链接的答案对此进行了非常详细的介绍,但我会回答您的直接问题。首先,我假设您的双精度值在 -1.0 到 1.0 的范围内。这通常是设置。要转到 32 位有符号整数,您需要进行缩放,使 1.0 变为0x7fffffff -1.0 变为0x80000001这可以通过简单的乘法来完成。

int sampleInt = sampleDouble * 0x7fffffff;

接下来,您需要将整数分割成字节:

byte[0] = (byte)((sampleInt >> 24) & 0xff);
byte[1] = (byte)((sampleInt >> 16) & 0xff);
byte[2] = (byte)((sampleInt >> 8)  & 0xff);
byte[3] = (byte)((sampleInt >> 0)  & 0xff);

根据输出的尾数,您可能需要交换顺序。

 类似资料:
  • 问题内容: 我想用Swift播放声音。 我的代码在Swift 1.0中可用,但现在在Swift 2或更高版本中不再起作用。 问题答案: 最可取的是,您可能想使用 AVFoundation。它提供了使用视听媒体的所有必要条件。 更新: 某些评论中建议与 Swift 2 , Swift 3 和 Swift 4 兼容。 斯威夫特2.3 迅捷3 Swift 4(与iOS 13兼容) 确保更改乐曲的名称以及

  • 问题内容: Octave似乎假设某个特定的声音播放实用程序将在系统上可用,但似乎没有提供指定备用声音的功能。在以下错误中,Octave正在寻找,这不是在所有系统上都可用的实用程序。 八度:38>声音(beamformed_20) sh:ofsndplay:找不到命令 是否可以使用Octave配置设置或代码片段来指定适合系统的实用程序? 问题答案: 在我的一台Linux机器上,我创建了以下ofsnd

  • 问题内容: 我希望能够在程序中播放声音文件。我应该去哪里看? 问题答案: 我写了下面的代码,效果很好。但我认为它仅适用于格式。

  • 我刚刚开始使用JavaFX。我知道它的基本原理。我尝试使用media和mediaplayer类播放一个声音,叫做“sound.mp3”。我正在eclipse中编程,我在src文件夹中有声音文件,与“(默认包)”相同的文件夹。下面是我的代码: 请告诉我我做错了什么。 下面是来自控制台的错误消息:

  • 我希望能够在我的程序中播放声音文件。我应该去哪里?

  • 问题内容: 我正在编写一个简单的Java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string。然后,我需要对double进行简单的计算,并将结果发送到具有特定精度的输出(4)。它工作正常,但是当输入为0时出现问题,则不能正常工作。 例如,对于这些输入,输出将是: 1公斤 输出:2.2046 3.1公斤 输出:6.8343 但是当输入为0时,输出应为0.0000,但