- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 Java 播放 WAV 声音(某种自定义视频格式的音轨),但是,我在使用 Clip 时遇到了麻烦:似乎一次只能听到一个实例。因此,我切换到普通的旧 SourceDataLine 方式。
在这种情况下,我想在视频暂停和取消暂停时暂停和恢复音频。很遗憾。当我在 SDL 上调用 stop() 时,播放线程完全结束并且声音缓冲区被清空:
sdl.open();
sdl.start();
sdl.write(dataBuffer);
sdl.drain();
sdl.stop();
在音频线程在 write() 或 drain() 上阻塞时发出异步 stop() 将实际上松开播放位置。
我如何以阻塞方式暂停 SourceDataLine,和/或我如何知道通过它播放了多少音频以使用 write(databuffer, skip, len) 进行恢复?
最佳答案
预期的方法是在 SourceDataLine 上调用 stop()
来暂停它,并调用 start()
来恢复它。如果在启动时停止向 SourceDataLine 提供音频数据,则会导致缓冲区欠载,这通常被视为错误情况。仅在处于停止状态时才停止提供数据。
drain()
应该在最后调用,以确保播放您写入 SourceDataLine 的所有数据。不要将其称为“暂停”功能!
为了更好地控制,您应该将小缓冲区写入源数据行是正确的。合适的大小相当于 50 毫秒的缓冲区——使用 open(AudioFormat, bufferSize)
方法以字节为单位指定缓冲区大小(例如,8820 字节用于 44100Hz、16 位立体声)。
我还要说使用 Clip 是首选解决方案。在 Clip 上使用 start() 和 stop() ,它不应该吞下太多。大多数 Java Sound 实现在内部为 Clip 使用 SourceDataLine,因此应该没有功能差异。 Java Sound 应确保您可以同时播放多个 Clip。
关于java - 暂停 SourceDataLine 播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1550396/
问题的简化版本:即使我之前已经让它工作了,这个试图用 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 秒的延迟。 因为一个代码片段值一千字(或者它是一张图
我是一名优秀的程序员,十分优秀!