gpt4 book ai didi

c++ - 在 juce 音频应用程序中打印 midi 音符编号

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:11 24 4
gpt4 key购买 nike

我正在尝试在按下时将 midi 音符编号打印到 Juce 音频应用程序中的标签中。这是我目前拥有的代码:

在 MainComponent 头文件中:

class MainComponent   : public Component,
public MidiInputCallback

{
public:
//==============================================================================
MainComponent();
~MainComponent();

void resized() override;
void handleIncomingMidiMessage (MidiInput*, const MidiMessage&);


private:
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
AudioDeviceManager audioDeviceManager;
Label midiLabel;
};

在 MainComponent.cpp 构造函数中:

MainComponent::MainComponent()
{
setSize (500, 400);

audioDeviceManager.setMidiInputEnabled("USB Axiom 49 Port 1", true);
audioDeviceManager.addMidiInputCallback (String::empty, this);

//midiLabel
midiLabel.setText("midiText", sendNotification);
addAndMakeVisible(midiLabel);
}

最后在 handleIncomingMidiMessage 函数中:

void MainComponent::handleIncomingMidiMessage(MidiInput*, const MidiMessage&)
{
DBG("MIDI Message Recieved\n");


//display label text
String midiText;
MidiMessage message;
if (message.isNoteOnOrOff()) {
midiText << "NoteOn: Channel " << message.getChannel();
midiText << ":Number" << message.getNoteNumber();
midiText << ":Velocity" << message.getVelocity();
}
midiLabel.getTextValue() = midiText;

}

当我运行它时,可以看到一个写着“midiText”的标签,当我按下 midi 键盘上的一个键时,文本就会消失。有什么想法吗?

最佳答案

您正在循环内创建一个新的 MidiMessage,而不是使用传递给回调的 MidiMessage。因此,midiTest 为空,然后用于设置您的标签(因此它变为空白)。

您需要将函数签名更改为:

void MainComponent::handleIncomingMidiMessage(MidiInput*, const MidiMessage& message)

然后删除行:

MidiMessage message;

关于c++ - 在 juce 音频应用程序中打印 midi 音符编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com