mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-05 06:09:47 +02:00
Make EXPERIMENTAL_MIDI_OUT compilable, but it doesn't link
This commit is contained in:
parent
6ca3f25826
commit
b28ec2957a
@ -770,7 +770,7 @@ class AudioThread {
|
||||
|
||||
// The normal wxThread-derived AudioThread class for all other
|
||||
// platforms:
|
||||
class AudioThread final : public wxThread {
|
||||
class AudioThread /* not final */ : public wxThread {
|
||||
public:
|
||||
AudioThread():wxThread(wxTHREAD_JOINABLE) {}
|
||||
ExitCode Entry() override;
|
||||
@ -781,7 +781,7 @@ class AudioThread final : public wxThread {
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
class MidiThread final : public AudioThread {
|
||||
public:
|
||||
virtual ExitCode Entry();
|
||||
ExitCode Entry() override;
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -922,7 +922,7 @@ AudioIO::AudioIO()
|
||||
_("There was an error initializing the midi i/o layer.\n");
|
||||
errStr += _("You will not be able to play midi.\n\n");
|
||||
wxString pmErrStr = LAT1CTOWX(Pm_GetErrorText(pmErr));
|
||||
if (pmErrStr)
|
||||
if (!pmErrStr.empty())
|
||||
errStr += _("Error: ") + pmErrStr;
|
||||
// XXX: we are in libaudacity, popping up dialogs not allowed! A
|
||||
// long-term solution will probably involve exceptions
|
||||
@ -1668,7 +1668,7 @@ int AudioIO::StartStream(WaveTrackArray playbackTracks,
|
||||
|
||||
bool successMidi = true;
|
||||
|
||||
if(!mMidiPlaybackTracks.IsEmpty()){
|
||||
if(!mMidiPlaybackTracks.empty()){
|
||||
successMidi = StartPortMidiStream();
|
||||
}
|
||||
|
||||
@ -1979,7 +1979,7 @@ PmTimestamp MidiTime(void *info)
|
||||
void AudioIO::PrepareMidiIterator(bool send, double offset)
|
||||
{
|
||||
int i;
|
||||
int nTracks = mMidiPlaybackTracks.GetCount();
|
||||
int nTracks = mMidiPlaybackTracks.size();
|
||||
// instead of initializing with an Alg_seq, we use begin_seq()
|
||||
// below to add ALL Alg_seq's.
|
||||
mIterator = new Alg_iterator(NULL, false);
|
||||
@ -2008,7 +2008,7 @@ void AudioIO::PrepareMidiIterator(bool send, double offset)
|
||||
bool AudioIO::StartPortMidiStream()
|
||||
{
|
||||
int i;
|
||||
int nTracks = mMidiPlaybackTracks.GetCount();
|
||||
int nTracks = mMidiPlaybackTracks.size();
|
||||
// Only start MIDI stream if there is an open track
|
||||
if (nTracks == 0)
|
||||
return false;
|
||||
@ -2232,7 +2232,7 @@ void AudioIO::StopStream()
|
||||
mIterator->end();
|
||||
|
||||
// set in_use flags to false
|
||||
int nTracks = mMidiPlaybackTracks.GetCount();
|
||||
int nTracks = mMidiPlaybackTracks.size();
|
||||
for (int i = 0; i < nTracks; i++) {
|
||||
NoteTrack *t = mMidiPlaybackTracks[i];
|
||||
Alg_seq_ptr seq = t->GetSequence();
|
||||
@ -2857,7 +2857,8 @@ MidiThread::ExitCode MidiThread::Entry()
|
||||
gAudioIO->mMidiPlaySpeed + gAudioIO->mT0;
|
||||
|
||||
gAudioIO->mMidiOutputComplete =
|
||||
(!gAudioIO->mPlayLooped && timeAtSpeed >= gAudioIO->mT1 + 0.220);
|
||||
(gAudioIO->mPlayMode == gAudioIO->PLAY_STRAIGHT && // PRL: what if scrubbing?
|
||||
timeAtSpeed >= gAudioIO->mT1 + 0.220);
|
||||
// !gAudioIO->mNextEvent);
|
||||
}
|
||||
}
|
||||
@ -3527,7 +3528,7 @@ void AudioIO::OutputEvent()
|
||||
// all notes off on all channels"
|
||||
if (mNextEvent == &gAllNotesOff) {
|
||||
AllNotesOff();
|
||||
if (mPlayLooped) {
|
||||
if (mPlayMode == gAudioIO->PLAY_LOOPED) {
|
||||
// jump back to beginning of loop
|
||||
mMidiLoopOffset += (mT1 - mT0);
|
||||
PrepareMidiIterator(false, mMidiLoopOffset);
|
||||
@ -3667,14 +3668,14 @@ bool AudioIO::SetHasSolo(bool hasSolo)
|
||||
void AudioIO::FillMidiBuffers()
|
||||
{
|
||||
bool hasSolo = false;
|
||||
int numPlaybackTracks = gAudioIO->mPlaybackTracks->GetCount();
|
||||
int numPlaybackTracks = gAudioIO->mPlaybackTracks->size();
|
||||
int t;
|
||||
for(t = 0; t < numPlaybackTracks; t++ )
|
||||
if( gAudioIO->mPlaybackTracks[t]->GetSolo() ) {
|
||||
if( (*gAudioIO->mPlaybackTracks)[t]->GetSolo() ) {
|
||||
hasSolo = true;
|
||||
break;
|
||||
}
|
||||
int numMidiPlaybackTracks = gAudioIO->mMidiPlaybackTracks.GetCount();
|
||||
int numMidiPlaybackTracks = gAudioIO->mMidiPlaybackTracks.size();
|
||||
for(t = 0; t < numMidiPlaybackTracks; t++ )
|
||||
if( gAudioIO->mMidiPlaybackTracks[t]->GetSolo() ) {
|
||||
hasSolo = true;
|
||||
@ -3698,7 +3699,7 @@ void AudioIO::FillMidiBuffers()
|
||||
// buffer, the cursor tends to jump back to mT0 early.
|
||||
// Therefore, if we are in loop mode, and if mTime < mT0,
|
||||
// we must not be at the end of the loop yet.
|
||||
if (mPlayLooped && trackTime < mT0) {
|
||||
if (mPlayMode == gAudioIO->PLAY_LOOPED && trackTime < mT0) {
|
||||
trackTime += (mT1 - mT0);
|
||||
}
|
||||
// mTime is shared with another thread so we stored
|
||||
@ -4142,7 +4143,7 @@ int audacityAudioCallback(const void *inputBuffer, void *outputBuffer,
|
||||
if( (*gAudioIO->mPlaybackTracks)[t]->GetSolo() )
|
||||
numSolo++;
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
int numMidiPlaybackTracks = gAudioIO->mMidiPlaybackTracks.GetCount();
|
||||
int numMidiPlaybackTracks = gAudioIO->mMidiPlaybackTracks.size();
|
||||
for( t = 0; t < numMidiPlaybackTracks; t++ )
|
||||
if( gAudioIO->mMidiPlaybackTracks[t]->GetSolo() )
|
||||
numSolo++;
|
||||
|
@ -18,11 +18,18 @@
|
||||
#include "Experimental.h"
|
||||
|
||||
#ifdef USE_MIDI
|
||||
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
#include "portmidi.h"
|
||||
#include "porttime.h"
|
||||
#include "allegro.h"
|
||||
|
||||
#include <vector>
|
||||
class NoteTrack;
|
||||
using NoteTrackArray = std::vector < NoteTrack* >;
|
||||
|
||||
#endif // EXPERIMENTAL_MIDI_OUT
|
||||
|
||||
#endif // USE_MIDI
|
||||
|
||||
#if USE_PORTMIXER
|
||||
|
@ -1244,7 +1244,7 @@ wxBitmap* MixerBoard::GetMusicalInstrumentBitmap(const WaveTrack* pLeftTrack)
|
||||
// random choice: return mMusicalInstruments[(int)pLeftTrack % mMusicalInstruments.GetCount()].mBitmap;
|
||||
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
const wxString strTrackName(name.MakeLower());
|
||||
const wxString strTrackName(wxString{ name }.MakeLower());
|
||||
#else
|
||||
const wxString strTrackName(pLeftTrack->GetName().MakeLower());
|
||||
#endif
|
||||
|
@ -1303,7 +1303,7 @@ NoteTrackArray TrackList::GetNoteTrackArray(bool selectionOnly)
|
||||
for(const auto &track : *this) {
|
||||
if (track->GetKind() == Track::Note &&
|
||||
(track->GetSelected() || !selectionOnly)) {
|
||||
noteTrackArray.Add(static_cast<NoteTrack*>(track.get()));
|
||||
noteTrackArray.push_back(static_cast<NoteTrack*>(track.get()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,7 @@ class Track;
|
||||
class LabelTrack;
|
||||
class TimeTrack;
|
||||
class WaveTrack;
|
||||
class NoteTrack;
|
||||
class AudacityProject;
|
||||
class ZoomInfo;
|
||||
|
||||
@ -60,9 +61,10 @@ public:
|
||||
#endif
|
||||
};
|
||||
|
||||
using NoteTrackArray = std::vector < NoteTrack* >;
|
||||
|
||||
#if defined(USE_MIDI)
|
||||
class NoteTrack;
|
||||
WX_DEFINE_USER_EXPORTED_ARRAY(NoteTrack*, NoteTrackArray, class AUDACITY_DLL_API);
|
||||
#endif
|
||||
|
||||
class TrackList;
|
||||
|
@ -5429,7 +5429,7 @@ void TrackPanel::HandleSliders(wxMouseEvent &event, bool pan)
|
||||
UndoPush::CONSOLIDATE);
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
} else {
|
||||
MakeParentPushState(_("Moved velocity slider"), _("Velocity"), true);
|
||||
MakeParentPushState(_("Moved velocity slider"), _("Velocity"), UndoPush::CONSOLIDATE);
|
||||
}
|
||||
#endif
|
||||
SetCapturedTrack( NULL );
|
||||
@ -10000,13 +10000,18 @@ void TrackInfo::DrawVelocitySlider(wxDC *dc, NoteTrack *t, wxRect rect) const
|
||||
{
|
||||
wxRect gainRect;
|
||||
int index = t->GetIndex();
|
||||
EnsureSufficientSliders(index);
|
||||
|
||||
//EnsureSufficientSliders(index);
|
||||
|
||||
GetGainRect(rect, gainRect);
|
||||
if (gainRect.y + gainRect.height < rect.y + rect.height - 19) {
|
||||
mGains[index]->SetStyle(VEL_SLIDER);
|
||||
auto &gain = mGain; // mGains[index];
|
||||
gain->SetStyle(VEL_SLIDER);
|
||||
GainSlider(index)->Move(wxPoint(gainRect.x, gainRect.y));
|
||||
GainSlider(index)->Set(t->GetGain());
|
||||
GainSlider(index)->OnPaint(*dc, t->GetSelected());
|
||||
GainSlider(index)->OnPaint(*dc
|
||||
// , t->GetSelected()
|
||||
);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -110,6 +110,10 @@ public:
|
||||
LWSlider * GainSlider(WaveTrack *t, bool captured = false) const;
|
||||
LWSlider * PanSlider(WaveTrack *t, bool captured = false) const;
|
||||
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
LWSlider *GainSlider(int index) const;
|
||||
#endif
|
||||
|
||||
private:
|
||||
TrackPanel * pParent;
|
||||
wxFont mFont;
|
||||
|
@ -120,7 +120,7 @@ void MidiIOPrefs::PopulateOrExchange( ShuttleGui & S ) {
|
||||
{
|
||||
S.Id(HostID);
|
||||
/* i18n-hint: (noun) */
|
||||
mHost = S.TieChoice(_("Host":),
|
||||
mHost = S.TieChoice(_("Host:"),
|
||||
wxT("/MidiIO/Host"),
|
||||
wxT(""),
|
||||
mHostNames,
|
||||
|
@ -843,7 +843,7 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
|
||||
if(duplex){
|
||||
playbackTracks = trackList->GetWaveTrackArray(false);
|
||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||
midiTracks = t->GetNoteTrackArray(false);
|
||||
midiTracks = trackList->GetNoteTrackArray(false);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user