C++ 如何在不重新编码的情况下剪切MP3?我是不是应该复制一下画面?

C++ 如何在不重新编码的情况下剪切MP3?我是不是应该复制一下画面?,c++,audio,mp3,C++,Audio,Mp3,我需要实现一个功能,可以通过TCP/IP传输大型mp3文件的一部分,允许用户在没有完整文件的情况下收听每个部分(使用libmpg123)。我希望允许用户在不重新编码流的情况下传输尽可能小的部分。我想忘记重新编码,因为我不希望音质随着每次传输而降低。每次我想要剪切mp3时,我都会在示例中使用分割坐标:“从什么示例到什么示例”,所以每次我都应该将其转换为mp3帧的ID。所以我的问题是: 每个mp3帧是否有足够的信息(bps/samplerate/bits/sample/channels),只需将它

我需要实现一个功能,可以通过TCP/IP传输大型mp3文件的一部分,允许用户在没有完整文件的情况下收听每个部分(使用libmpg123)。我希望允许用户在不重新编码流的情况下传输尽可能小的部分。我想忘记重新编码,因为我不希望音质随着每次传输而降低。每次我想要剪切mp3时,我都会在示例中使用分割坐标:“从什么示例到什么示例”,所以每次我都应该将其转换为mp3帧的ID。所以我的问题是:

  • 每个mp3帧是否有足够的信息(bps/samplerate/bits/sample/channels),只需将它们输入mp3解码器,就可以在没有整个mp3文件头的情况下播放它
  • 是否有任何BSD/MIT许可的小型库可以作为mp3拆分器使用样本坐标并支持VBR

每个mp3框架都是独立的,并且可以自行保存。所以你不必担心它。

你可以直接剪切二进制文件! 这个解决方案的唯一问题是。。。标签问题


或者试试这个:

MP3文件没有头。文件中的每个帧的属性都可能不同。好的,帧可以有不同的比特率,但是热变化的采样器,对吗?那么关于采样器的信息在哪里呢?在MP3头中还是在每个帧中?如果解码器遇到1帧22050,第二帧44010,该怎么办?不幸的是,帧并不总是独立的,因为有一个称为位(或字节)库的功能:“在最坏的情况下,可能需要9个输入帧才能解码单个帧。”来源: