- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个应用程序,用户可以在其中加载 .mp3 文件并输入一系列注释。用户的目标是将这个音符序列与 .mp3 文件中的歌曲相匹配。
这需要能够同时播放 .mp3 文件和音符序列。经过一番研究,我发现 Java Sound API或JFuge可以完成生成音符序列(MIDI)的工作。 (用户给出的输入)。如前所述here ,JLayer可以用来在Java中播放mp3文件。 (我还可以将 .mp3 转换为 .wav 并使用另一种方式播放转换后的 .wav)。
但是,是否可以毫无问题地一起播放此 .mp3 和音符序列,或者我应该先将它们转换为一个文件?
用户应该能够在任何随机时间戳处同时播放 .mp3 和他/她的音符序列。最好没有任何延迟,这样用户可以轻松地调整音符以匹配文件的音高。当用户几乎不断地更改音符并重播以检查其是否与音调匹配时,在播放它们之前将它们合并到一个文件似乎会带来太大的开销。
提前致谢!
最佳答案
Java 支持多线程播放。您所需要做的就是从一个线程运行 .mp3,并在另一个并发运行的线程上运行 MIDI 生成的音符。
曾经有一些 Linux 系统一次只能处理一个音频源的输出。我不知道这是否仍然是一个问题。
另一种更复杂的可能性是,可以让您进行现场混音并输出到单行,即使用 AudioInputStream 读取歌曲文件,将字节动态转换为 PCM(例如,转换为从 -1 到1)(或预加载音频并将其存储为 PCM),然后将其添加到来自 DIY 合成器的 PCM 数据,然后将其转换回字节并通过 SourceDataLine 输出。
这很麻烦,您可能不想走这条路,但如果您这样做,以下是一些信息,可帮助分解一种可能实现的各个步骤。
加载.wav数据并将其转换为内部PCM形式可以在开源AudioCue中看到(第 359 行 loadURL
方法)。和here是我制作的通过击键运行的实时 Java 合成器的示例(免费下载)。其中一种声音是一个简单的风琴,只需添加四个谐波频率的正弦波即可输出 PCM 音频数据。如果您想进入其他形式的合成但更多地参与,则可以发出其他声音。
(不知道如何转换来自 MIDI 控制合成器的数据,除非可以识别 TargetDataLine,并将其数据转换为 PCM,类似于从 AudioCue 源示例中读取 AudioInputStream 时使用的转换。)
给定两个 PCM 源,可以使用加法将两者实时混合,转换为字节并通过单个 SourceDataLine 输出(请参见第 1387 行 convertBufferToAudioBytes
方法)。如果您在贡献者不玩时输入零,则 SourceDataLine 可以无限期地保持运行。 SDL 的绝大多数时间都处于阻塞状态,因为音频数据处理的速度比系统消耗的速度快得多,因此占用的 CPU 很少。
关于java - 在 Java 中同时播放 .mp3 和一系列音符 (MIDI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544875/
我正在使用 Python 中的 mido 库进行 MIDI 项目。我在手册中看到时间签名的元消息,其值为:notated_32nd_notes_per_beat,其默认值为 8。 这是有道理的。但是
我猜出一个相当简单的问题,但在任何地方都找不到明确的答案。 背景:我有一个多轨道midi文件,其中第一条轨道带有TEMPO控件。我需要将其他轨道中的ABSOLUTE_TICK计数转换为“秒”(与mid
我目前正在实现一个应用程序来对 MIDI 文件执行一些任务,我当前的问题是将我读过的音符输出到 LilyPond 文件。 我已将 note_on 和 note_off 事件合并为具有绝对开始和绝对持续
我有一把 Yamaha MIDI 吉他,当我播放使用 XG MIDI 标准编码的 MIDI 文件时,它会导致吉他上的某些灯打开和关闭。我正在尝试确定导致此问题的 MIDI 事件,以便我可以在不使用 M
我正在 Unity 中开发一款可以从音乐生成关卡的游戏。我计划在游戏中包含简单的文本文件(不必采用标准格式)并解析它们以生成关卡。问题是,我需要能够将 MIDI 文件转换为文本格式(最好不要像 Mus
我目前正在构建一个软件,用于显示 MIDI 文件中的音符。我可以从 NoteOn 和 NoteOff 事件中获取每个音调字母,但我不知道如何获取或如何计算音符类型(全音、半音、八音..)和其他拍号。我
我想知道如何将 MIDI 节拍转换为实际播放秒数。 例如,如果 MIDI PPQ(每四分音符的脉冲数)为 1120,我如何将其转换为真实世界的播放秒数? 最佳答案 您需要两条信息: PPQ (每四分音
我想了解可用于对 MIDI 文件执行一些简单任务的开源库: 一次读取一个音符或和弦; 提取给定的工具并将其单独重新编码到新文件中; 允许生成“可定制”乐谱——我的意思是我应该能够使用库改变从 midi
我已经用谷歌搜索了一段时间,但我发现的所有信息都有些模棱两可。我不是 midi 专家,我只对 midi 文件感兴趣。我需要知道此元事件的用途,以及它如何影响多轨 MIDI 文件(格式 1)的播放。 最
我正在尝试使用 AKSequencer() 从 .mid 文件发送 midi 数据,在虚拟输出上以在应用程序外部使用它(下面有更多详细信息)。 我的问题是我的 AKSequencer 没有将 midi
我想制作一个简单的 VST 插件来执行此操作: 分析音频流(音量、节拍等...) 在分析器的输出上有触发器(例如,当音量 > 阈值时做某事) 根据触发器生成 MIDI 事件 这是为了能够链接插件,即使
我有一个 .mid 文件 - this一个具体的。除了标题 block 之外,这里是 midi 的相关部分。第一个轨道 block 仅包含元事件,描述为 4D 54 72 6B 00 00 00 52
我试图为 Java 程序实现一个 MIDI 播放器。所以我开始使用 javax.sound.midi 库。我在那里加载了我的 Sequencer 和我的 Synthesizer: private vo
import javax.sound.midi.*; import javax.swing.*; import java.awt.*; /** * Created by Jonik on 09.01
我已经搜索了一段时间,但找不到我想要做的事情的答案。 我想播放一个 midi 文件,并在播放时在屏幕上显示音符。当音符停止播放时,它应该从屏幕上消失。 我可以使用音序器播放 midi,但不知道如何获取
对 MIDI 中的音符长度有误解。我在 Ableton Live 中制作了一个简单的 2 个全音符 midi 文件(整个文件是 1 个小节),然后将其导出并使用 python 脚本(mididump.
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
这不是关于 how to create a MIDI file from Lilypond 的重复问题.我已经做过很多次了。 我创建了一些 lilypond 片段,我想从中提取 MIDI。通常我会在
我的目标是将从 Alesis 合成器发送的字节码流转换为人类可读的格式。我需要能够进行“程序转储”并读取组成补丁名称的 10 个字符的字符串。 为了从合成器接收“程序转储”,我通过 MIDI-OX 向
是否有任何公共(public)数据库允许从设备 ID 代码中获取型号名称(在回复 f0 7e 7f 06 01 f7 SysEx 时返回)? 最佳答案 MIDI 制造商协会维护一个 list of I
我是一名优秀的程序员,十分优秀!