- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在java中你可以像这样创建一个SourceDataLine:
AudioFormat af = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100.0, 16, 1, 2, 44100.0, false);
SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
之后您可以打开它并向其写入数据:
byte[] data = new byte[1024];
fillwithsounds(data);
sdl.open()
sdl.start()
sdl.write(data, 0, 1024);
这对于单声道数据来说一切正常。
我想做的是能够写入立体声数据,但我在网上找不到任何有关如何更改字节数组才能写入立体声数据的文档。
在创建 AudioFormat 时,我似乎需要增加 channel 数量 - 使其成为立体声 - 然后我需要将帧速率减半(否则 Java 会抛出 IllegalArgumentException)
我不明白为什么会这样,也不明白我提供给 DataSourceLine 的数据的新格式应该是什么。
也许在音频格式方面比我更有经验的人可以阐明这个问题。提前致谢!
最佳答案
我用于立体声的格式如下:
audioFmt = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
44100, 16, 2, 4, 44100, false);
您可能希望将每帧的字节数加倍,而不是将位编码减半。我不确定 8 位编码听起来是什么样的,但它肯定会比 16 位编码噪音更大!
生成的文件长度是原来的两倍。然后,您可以获取构成 16 位样本的两字节对,并将它们复制到接下来的两个位置,以进行“单声道”播放(两个立体声 channel 相同)。
给定:
frame = F
little end byte = A
big end byte = B
AB = 16-bit little-endian encoding
left channel = L
right channel = R
你原来的单声道:
F1A、F1B、F2A、F2B、F3A、F3B ...
使用上述格式的立体声:
F1AL、F1BL、F1AR、F1BR、F2AL、F2BL、F2AR、F2BR、F3AL、F3BL、F3AR、F3BR ...
我很可能把左右的顺序搞混了。但我希望你能明白!
关于java - 可以写入 SourceDataLine 的数据格式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159072/
问题的简化版本:即使我之前已经让它工作了,这个试图用 javax.sound.sampled.SourceDataLine 制造一些噪音的代码在第一个缓冲区为空后不会调用更新。 编辑:更新了 16 位
我有一个用 Java 编写的应用程序,我需要在其中播放音频。我使用 OpenAL(带有 java-openal 库)来完成该任务,但是我想使用 OpenAL 不直接支持的 WSOLA。我发现了一个不错
我有一个类可以以任何所需的频率和长度播放纯正弦音,并且它按预期工作 - 除了在每个音调的开始和结束时从扬声器发出轻微的爆裂声。这最初是一个音乐理论实验,但我最近一直在用它来演奏一些歌曲,甚至可能尝试将
我想使用 javax.sound.sampled.SourceDataLine 生成纯正弦波。对于一个恒定的频率,它工作得很好,但是当改变频率时总是有一种咔嗒声。我做错了什么,我能做些什么来避免这种情
由于某些原因,我需要使用 SourceDataLine 而不是 Clip 在程序中播放音频。将framePosition(我想跳过)分配给Clip很容易,但是SourceDataLine没有这个方便的
我有一个用java编写的纸牌游戏。我想每当我将鼠标悬停在卡片上时播放声音效果。但与此同时,卡片会“弹出”。 但是,当我尝试通过 run() 方法实现它时,它会变得滞后,也就是说,卡片不会像没有声音时那
我使用简单的 Swing 图形进行声音编程已经有一段时间了,但由于某种原因我的帧速率不稳定。 通常我会在后台线程上执行以下操作: for(;;) { // do some drawing
我有一个包含音频样本的字节数组。我想玩一下,所以我尝试将其写入SourceDataLine: SourceDataLine sample; private byte[] samplebytes; ..
我想用 Java 播放 WAV 声音(某种自定义视频格式的音轨),但是,我在使用 Clip 时遇到了麻烦:似乎一次只能听到一个实例。因此,我切换到普通的旧 SourceDataLine 方式。 在这种
这是具有症状的代码: /* * To change this template, choose Tools | Templates * and open the template in
在java中你可以像这样创建一个SourceDataLine: AudioFormat af = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44
我有一个循环调用 SourceDataLine.write(...) 直到写入(播放)所有音频数据的线程。我希望能够提前停止播放(在循环通常被 EOF 类型的条件终止之前)并且正在(尝试)使用中断。当
我现在正在编写一个基本的合成器,并且遇到了一些奇怪的问题。通过 SourceDataLine 播放代表 16 位单声道音频的字节数组时,我会听到持续的爆裂声。 流行乐以恒定的速度播放,据我所知,音高。
我对 Java 音频有点陌生。我想做的是,当我播放音频时,我想重新绘制我的 JComponent,但是 SourceDataLine 阻止了所有其他代码行,包括其他线程。这是我的 play() 方法
我正在修改播放音频数据的应用程序以将数据写入文件。按照目前的实现方式,字节数组是动态填充的,每次填充时都会将此缓冲区的内容写入 SourceDataLine。我基本上想将该缓冲区写入指定格式的文件。
我正在制作一个小工具,用于用 Java 播放和同步多个音频文件。我正在使用 SourceDataLine 我的代码必须向其提交音频数据以进行播放。问题是,每当我停止这样的播放时,就会听到轻微的“咔哒”
我的设置如下: 我有一个在浏览器中运行的 Java 小程序,用于录制和播放音频。 我的问题是: 当我刷新浏览器时,SourceDataLine 会在刷新后正确重新打开,而 TargetDataLine
我已经编写了一个用于点对点语音聊天的Java程序,但为了使流量尽可能低,我想分析捕获的数据并使低音量部分完全静音。问题是,我不知道如何从字节数组中获取音量以及如何使部件静音。 最佳答案 您必须在数据上
我的游戏通过通常的方法播放声音: sdl.open(); sdl.start(); sdl.write(data, 0, data.length); sdl.drain(); sdl.stop();
我想在 Java 中根据用户的操作生成声音。即使我将 SourceDataLine 中的缓冲区大小设置为可能的最小值(1 帧),我仍然会有大约 1 秒的延迟。 因为一个代码片段值一千字(或者它是一张图
我是一名优秀的程序员,十分优秀!