首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中流到Icecast2时的交叉淡入淡入淡出

在Java中流到Icecast2时的交叉淡入淡入淡出
EN

Stack Overflow用户
提问于 2021-02-19 01:03:39
回答 1查看 91关注 0票数 0

几个月前,我用Java语言编写了一个自己的流源客户端,用于将播放列表流式传输到您的Icecast2服务器。逻辑很简单:您有多个“频道”,每个频道都有一个播放列表(在本例中是一个充满mp3文件的文件夹)。在频道启动后,它通过挑选第一首歌曲开始流式传输,并通过http将其流式传输到icecast2服务器。如你所想,一首歌结束后,下一首歌就被选中了。

下面是我目前用来向icecast发送音频的代码:

https://gist.github.com/z3ttee/e40f89b80af16715efa427ace43ed0b4

我想要实现的是实现两首歌曲之间的交叉淡入淡出。因此,当一首歌结束时,它应该同时淡出和淡入下一首歌。

当涉及到在java中处理音频时,我还是个新手。我所知道的是,我必须修改音频发送到icecast的方式。但问题是:我不知道如何开始,也不知道从哪里开始。

如果你有任何想法从哪里开始或者如何开始,请随时分享你的经验。

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2021-02-20 01:11:57

我认为对于交叉淡入淡出,您可能必须使用一个在PCM级别处理音频的库。如果您希望编写自己的混音器,基本步骤如下:

  1. 使用stream的音频格式通过输入流
  2. 读取数据,将音频转换为pcm
  3. 作为pcm,音频值可以通过简单的相加进行混合-因此在交叉淡入淡出的过程中,一侧从零开始向上倾斜,另一侧向下倾斜到零
  4. 将音频转换回原始格式并流式传输<

>G29

线性的交叉衰落(例如,音频数据)乘以从0到1线性递增的步长,反之亦然(例如,0.1,0.2,0.3,...)将倾向于离开中点比单独运行开始或结束轨道时更安静。通常使用正弦函数来保持和的音量稳定。

据我所知,有两个库可能对混合有帮助,但可能需要进行一些修改。一个是TinySound,另一个是AudioCue (我写的)。AudioCue所需的修改可能相对容易一些。混合器的输出被封装在类AudioMixerPlayer中,该类位于AudioMixer.java的第268行。一种可能的计划是修改此代码的输出行,用您的广播行替换SourceDataLine。

我要补充的是,要播放的歌曲将首先加载到AudioCue类中,然后该类将公开实时音量控制功能。但是可能有必要修改发出卷命令的方式。

我真的对这项工作很感兴趣,可以提供一些帮助。我现在正在参与Socket和SocketServer的项目,并想获得一些实践与流式音频。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66264637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档