JLayer Mono Mp3 到 PCM 解码

2023-12-04

我目前正在使用 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参数,即1在立体声 44 中,2在 mono-44 和4在单声道 22 中。还没有尝试其他组合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JLayer Mono Mp3 到 PCM 解码 的相关文章

  • asp.net 从 mp3 创建波形图像

    我正在寻找一种方法来创建上传到服务器的 mp3 文件的图形波形 经过一番研究 我相信 mp3 需要首先转换为原始格式 但我不知道如何为该声音文件创建 gif 波形格式 90 的声音文件长度超过 60 分钟 我知道这无法在上传后立即完成 需要
  • htmlspecialchars_decode() 不适用于空格

    我正在尝试使用 htmlspecialchars decode 但它不解码 nbsp 进入空间 这个问题有解决办法吗 My code query mysql query select from nowosci order by id des
  • 用于上采样的 PCM 算法

    我有 8k16 位 pcm 音频 我想将其上采样到 16k16 位 我必须手动执行此操作 有人可以告诉我线性插值的算法吗 我应该在每两个字节之间插入吗 另外 当我上采样时 我必须对 wav 标头进行更改 我应该更改什么 正如其他人提到的 线
  • 如何解码/重新创建 Google Flights 搜索网址?

    问题 On 谷歌航班 http www google com travel flights 搜索信息被编码在 URL 参数中 这样用户就可以轻松地彼此共享航班搜索 URL 格式如下所示 https www google com travel
  • 音频音量标准化时的动态范围压缩[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经问过音量标准化 https stackoverflow com questions 12481524 audio volume
  • 如何解码包含无效字节的字节对象,Python3

    在python2中 我可以整天生成以字符串格式表示的这些十六进制字节 x00 xaa xff gt gt gt 00 decode hex aa decode hex ff decode hex gt gt gt x00 xaa xff 同
  • 使用 ffmpeg api 调用将 3gp (amr) 转换为 mp3

    使用 ffmpeg api 调用将 3gp amr 转换为 mp3 我尝试使用 libavformat ffmpeg 构建自己的函数 将 3gp 音频文件 用 Android 移动设备录制 转换为 mp3 文件 我使用 av read fr
  • 如何从 MP3 ID3 标签中提取专辑封面?

    我可以使用 php 成功从我的 mp3 应用程序中获取 mp3 ID3 标签 我留下了一个巨大的BLOB 我确信这非常简单 但我只需要在正确的方向上得到一些帮助 我想最终得到的是 BLOB 数据已更正 media year implode
  • Java - 调整 WAV 文件的播放速度

    我可能很笨 但我似乎找不到解决我的问题的方法 NOTE 我发现很多人报告了这个问题 似乎它是由于较新的 Java 可能是 1 5 而发生的 也许不再支持 SAMPLE RATE 我无法找到任何解决方案 我正在尝试调整 SAMPLE RATE
  • 如何使用python将下载的音频文件扩展名重命名为mp3

    目前 我正在尝试根据艺术家姓名和歌曲标题将 YouTube 音乐视频下载为音频文件 下载所有视频后 我尝试将所有音频文件从 webm 或 mp4 扩展名重命名为 mp3 但似乎我在将文件名和扩展名更改为 mp3 时遇到了一些错误 我的代码基
  • 如何从 MP3 文件中提取元数据?

    我已经得到了 MP3 文件的文件名 如何从该 MP3 文件中提取元数据 例如艺术家 专辑 专辑图像等 对于 API 级别 10 或更高级别尝试此操作 MediaMetadataRetriever mmr new MediaMetadataR
  • iPhone:AVAudioPlayer 不支持的文件类型

    我的应用程序从我们的服务器下载 mp3 并将其播放给用户 该文件为 64 kbps 如果我理解正确的话 这完全在 iPhone 的可接受范围内 我在几十个网站上查找了如何执行此操作 他们都建议我这样做 NSData data NSData
  • C++:从字符串中删除所有 HTML 格式?

    我有一个字符串 其中可能包含 br 或 span span 标签或其他 HTML 字符 实体 我想要一种强大的方法来剥离所有这些并获取剩余的 UTF 8 字符 理想情况下 这应该是跨平台的 像这样的东西是理想的 http snipplr c
  • 使用 C 创建立体声正弦波

    我正在尝试用 C 创建立体声正弦 WAV 并且可能有不同的 可能是空白的 左声道和右声道 使用此函数为每个通道生成一个音调 int16 t create tone float frequency float amplitude float
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • FFMPEG波形透明,背景纯色

    我正在尝试使用 ffmpeg 生成波形 我希望背景为纯色 实际波形为透明 以下部分实现了我想要的 除了有黑色背景 我希望能够将其更改为任何颜色 但波形是透明的 我怎样才能用 ffmepg 实现这个目标 ffmpeg i input mp3
  • UnicodeDecodeError:“charmap”编解码器无法解码位置 55 中的字节 0x81:字符映射到 <未定义>

    我是 Python 新手 希望有人能向我解释错误消息的含义 具体来说 我在Atom中保存了一些Python和SPSS结合在一起的代码 这是我以前的同事创建的 现在 由于前同事已经不在了 我现在需要运行代码 我所做的是从 SPSS22 运行下
  • 将字节数组编码解码为字符串而不丢失数据

    我尝试将 byte 转换为字符串 如下所示 Map
  • 使用 Python 访问 MP3 音乐数据

    我正在尝试编写一个 Python 脚本 用于使用歌曲的数据作为比较的基础来搜索重复的 mp3 4 文件 我的情况涉及许多文件名相似但 ID3 标签不同的 mp3 4 文件 起初 我尝试循环并使用 md5 来查找重复文件 忽略文件名 当然 当
  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That

随机推荐