- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 javalayer 1.1 进行 mp3 解码。
所以我想从我的 44100 Hz、16 位、Mp3 接收原始 PCM 数据。它与立体声 mp3 完美配合,但我对单声道 mp3 有奇怪的问题。
这里是一些代码。
InputStream data = c.getResources().openRawResource(resId);
Bitstream bitstream = new Bitstream(data);
Decoder decoder = new Decoder();
while(thereIsData) {
Head frameHeader = bitstream.readFrame();
SampleBuffer buffer = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
short[] pcmBuffer = buffer.getBuffer();
// Do some stuff with pcm (For example creating a wav file )
bitstream.closeFrame();
}
buffer.getChannelCount() == 1,buffer.getFrequency() == 41000
所以……问题是。如果我创建一个 44100 Hz、单声道、16 位 WaveFile 并将其放入 Audacity 中以查看波形。声音周期为0,如:(200ms Sound)...(200ms NoSound)...(200ms Sound)...(200ms NoSound)
这也适用于写入 .wav 之前的 pcm 数据...(Yeahi syso 所有的东西)
所以有人可能会想,肯定有零帧之类的。在那里...所以我切断了所有只有 0 值的帧。这会导致 wav 文件中的零中断稍短。对我来说,必须有部分零帧。所以我从 pcm 数据中删除了所有的零值……虽然看起来很奇怪,但它起作用了。文件听起来不错。
但这不是解决方案。我仍然不知道为什么会有这些错误的零值。我的 mp3 也需要静音。
我会很感激每一个解释提示。谢谢
最佳答案
我让它工作了,转换为 byte[],使用这段代码:
ByteArrayOutputStream outStream = new ByteArrayOutputStream(1024);
int divider = 1;
if (SAMPLE_RATE < 44100) divider *= 2;
if (CHANNELS == 1) divider *= 2;
[...]
short[] pcmBuffer = buffer.getBuffer();
for (int i=0; i<pcm.length/divider; i++) {
outStream.write(pcm[i] & 0xff);
outStream.write((pcm[i] >> 8 ) & 0xff);
}
关键是 divider
参数,在 stereo-44 中是 1
,在 mono-44 中是 2
和 4
在 mono-22 中。还没有尝试其他组合。
关于mp3 - JLayer Mono Mp3 到 PCM 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959599/
如何在jlayer中停止MP3? (stop() 不再使用) 我的代码如下: //main class mp3_main private AdvancedPlayer player;
我刚刚开始使用 Jlayer 库来播放 MP3。它工作得很好,我可以播放这首歌。我唯一的问题是实现暂停和恢复方法。由于我对多线程的了解有限,我认为让播放 MP3 的线程等待,声音会停止,为了恢复歌曲,
我对 jLayer 有疑问。我有一个带有开始播放歌曲代码的按钮: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt
我注意到很多主题都是关于使用 JLayer 暂停/恢复 MP3 的,所以为了帮助大家,我专门为此设计了一个完整的类(class)!请参阅下面的答案。 注意:这是供我个人使用的,因此它可能不像某些人希望
我和一个 friend 正在将 MP3 播放器编程作为学校项目。我们即将完成,现在陷入了尝试编写一个函数来改变播放器音量的阶段。我们正在使用: 音频设备 高级玩家 我知道其他人已经问过同样的问题,但我
我一直在测试一个可以在 PC 和 Android 平台上运行的 Java 库,前段时间有人告诉我使用 JLayer。今天我正在愉快地编码,然后出现了这个异常: java.lang.ExceptionI
由于某种原因,每个图像仅显示 1/5(或更少)。由于它是分层 Pane ,因此至少应完全显示 1 个。布局为空,因为这是一个学习程序为什么会发生这种情况? 代码如下:类测试1 import javax
我想在图像上放置一个网格。我使用了一个使用 paintComponent 方法保存图像的 JLabel,我使用这个方法是因为在我的项目和 JLayer GridLayer; JLabel im
我的音乐播放器项目中的 JLayer 有一个非常具体的问题。我想包括一些东西来调整音量,但似乎不太容易实现。 这是因为 JLayer 本身不支持它。我从我的项目中排除了 Player 类并更改了一些方
您好,我想降低音量播放声音。我用了jl1.0.1让它发挥作用。我正在搜索如何控制音量,这就是我使用的代码 public static void playSound(String name){
我需要知道我应该使用什么来控制我使用 jLayer 创建的 MP3 播放器的音量?我可以使用哪些 API 或方法来控制 mp3 文件的音量? 最佳答案 public class VolumeSli
我正在尝试用 JLayer 包装一个 JButton 以向其添加一些效果/功能。当我用工具栏中的包装器替换按钮时,它会出于某种原因绘制按钮边框。工具栏已将翻转设置为 true。 为什么会发生这种情况,
我在 Clojure 中编写了几百行应用程序,这些应用程序使用 JLayer Java 库作为我在后台运行 mp3 的音频。这工作正常,但只要我在后台运行任何其他音乐、YouTube 等(我正在运行
我有一个线程来播放音频,但是当我关闭表单时,我想停止播放器播放音频文件,我的线程运行方法是: public static Player playplayer; public static FileIn
我正在使用 jLayer 1.0 来播放一个简单的 mp3 文件。除了前 3 秒左右,它工作正常(在轨道开头添加 5 秒的静音解决了这个问题)。这是我正在使用的代码: try { final
正在关注 Oracle's Myopia guide ,我有一个简单的 JPanel,它作为 JLayer 添加到 JFrame。很简单,这模糊了 JPanel 的组件。但是,我正在尝试在此 JPan
我正在使用 JLayer 解码 MP3,并将其存储为 PCM 数据。但是,无论我使用什么 MP3 文件,我总是会收到索引为 443 的 ArrayIndexOutOfBoudnsException。我
我正在尝试将图像背景设置在 3 个 JButton 后面。截至目前,它正在绘制背景,然后将按钮放在没有背景的下方(拉伸(stretch)窗口以查看)。我将如何使用 JLayeredPane 将背景图像
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我想在用户输入无效时绘制一个图标。我找到了 Oracle 的示例并根据我的目的对其进行了修改。图标的绘制工作正常,但是当我更改值以更正图标时,图标不会完全不可见:在 JPanel 上绘制的部分仍然显示
我是一名优秀的程序员,十分优秀!