cwIoAudioMidiApp,cwIoAudioRecordPlay,cwIoMidiRecordPlay : Add 'mute' feature
This commit is contained in:
parent
4b65621c68
commit
7edcb3309d
@ -35,9 +35,11 @@ namespace cw
|
|||||||
kMidiThruCheckId,
|
kMidiThruCheckId,
|
||||||
kCurMidiEvtCntId,
|
kCurMidiEvtCntId,
|
||||||
kTotalMidiEvtCntId,
|
kTotalMidiEvtCntId,
|
||||||
|
kMidiMuteCheckId,
|
||||||
|
|
||||||
kCurAudioSecsId,
|
kCurAudioSecsId,
|
||||||
kTotalAudioSecsId,
|
kTotalAudioSecsId,
|
||||||
|
kAudioMuteCheckId,
|
||||||
|
|
||||||
kSaveBtnId,
|
kSaveBtnId,
|
||||||
kOpenBtnId,
|
kOpenBtnId,
|
||||||
@ -66,10 +68,11 @@ namespace cw
|
|||||||
{ kPanelDivId, kMidiThruCheckId, "midiThruCheckId" },
|
{ kPanelDivId, kMidiThruCheckId, "midiThruCheckId" },
|
||||||
{ kPanelDivId, kCurMidiEvtCntId, "curMidiEvtCntId" },
|
{ kPanelDivId, kCurMidiEvtCntId, "curMidiEvtCntId" },
|
||||||
{ kPanelDivId, kTotalMidiEvtCntId, "totalMidiEvtCntId" },
|
{ kPanelDivId, kTotalMidiEvtCntId, "totalMidiEvtCntId" },
|
||||||
|
{ kPanelDivId, kMidiMuteCheckId, "midiMuteCheckId" },
|
||||||
|
|
||||||
{ kPanelDivId, kCurAudioSecsId, "curAudioSecsId" },
|
{ kPanelDivId, kCurAudioSecsId, "curAudioSecsId" },
|
||||||
{ kPanelDivId, kTotalAudioSecsId, "totalAudioSecsId" },
|
{ kPanelDivId, kTotalAudioSecsId, "totalAudioSecsId" },
|
||||||
|
{ kPanelDivId, kAudioMuteCheckId, "audioMuteCheckId" },
|
||||||
|
|
||||||
{ kPanelDivId, kSaveBtnId, "saveBtnId" },
|
{ kPanelDivId, kSaveBtnId, "saveBtnId" },
|
||||||
{ kPanelDivId, kOpenBtnId, "openBtnId" },
|
{ kPanelDivId, kOpenBtnId, "openBtnId" },
|
||||||
@ -389,6 +392,14 @@ namespace cw
|
|||||||
_set_midi_thru_state(app, m.value->u.b);
|
_set_midi_thru_state(app, m.value->u.b);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case kMidiMuteCheckId:
|
||||||
|
midi_record_play::set_mute_state(app->mrpH,m.value->u.b);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kAudioMuteCheckId:
|
||||||
|
audio_record_play::set_mute_state(app->arpH,m.value->u.b);
|
||||||
|
break;
|
||||||
|
|
||||||
case kStartBtnId:
|
case kStartBtnId:
|
||||||
_on_ui_start(app);
|
_on_ui_start(app);
|
||||||
break;
|
break;
|
||||||
|
@ -40,6 +40,8 @@ namespace cw
|
|||||||
bool recordFl;
|
bool recordFl;
|
||||||
bool startedFl;
|
bool startedFl;
|
||||||
|
|
||||||
|
bool mute_fl;
|
||||||
|
|
||||||
unsigned* audioInChMapA;
|
unsigned* audioInChMapA;
|
||||||
unsigned audioInChMapN;
|
unsigned audioInChMapN;
|
||||||
unsigned* audioOutChMapA;
|
unsigned* audioOutChMapA;
|
||||||
@ -170,6 +172,9 @@ namespace cw
|
|||||||
{
|
{
|
||||||
unsigned srcChIdx = p->audioInChMapA == nullptr ? chIdx : p->audioInChMapA[chIdx];
|
unsigned srcChIdx = p->audioInChMapA == nullptr ? chIdx : p->audioInChMapA[chIdx];
|
||||||
|
|
||||||
|
if( srcChIdx >= asrc.iBufChCnt )
|
||||||
|
cwLogError(kInvalidArgRC,"Invalid input channel map index:%i >= %i.",srcChIdx,asrc.iBufChCnt);
|
||||||
|
else
|
||||||
memcpy(a->audioBuf + chIdx*asrc.dspFrameCnt, asrc.iBufArray[ srcChIdx ], asrc.dspFrameCnt * sizeof(sample_t));
|
memcpy(a->audioBuf + chIdx*asrc.dspFrameCnt, asrc.iBufArray[ srcChIdx ], asrc.dspFrameCnt * sizeof(sample_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,6 +203,8 @@ namespace cw
|
|||||||
{
|
{
|
||||||
unsigned adst_idx = 0;
|
unsigned adst_idx = 0;
|
||||||
|
|
||||||
|
if( !p->mute_fl )
|
||||||
|
{
|
||||||
while(adst_idx < adst.dspFrameCnt)
|
while(adst_idx < adst.dspFrameCnt)
|
||||||
{
|
{
|
||||||
am_audio_t* a;
|
am_audio_t* a;
|
||||||
@ -221,6 +228,7 @@ namespace cw
|
|||||||
p->curFrameIdx += n;
|
p->curFrameIdx += n;
|
||||||
adst_idx += n;
|
adst_idx += n;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: zero unused channels
|
// TODO: zero unused channels
|
||||||
|
|
||||||
@ -415,9 +423,16 @@ namespace cw
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( m.oBufChCnt > 0 )
|
if( m.oBufChCnt > 0 )
|
||||||
|
{
|
||||||
_audio_play(p,m);
|
_audio_play(p,m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(unsigned i=0; i<m.oBufChCnt; ++i)
|
||||||
|
memset( m.oBufArray[i], 0, m.dspFrameCnt * sizeof(sample_t));
|
||||||
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -522,6 +537,22 @@ bool cw::audio_record_play::record_state( handle_t h )
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cw::rc_t cw::audio_record_play::set_mute_state( handle_t h, bool mute_fl )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
audio_record_play_t* p = _handleToPtr(h);
|
||||||
|
p->mute_fl = true;
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cw::audio_record_play::mute_state( handle_t h )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
audio_record_play_t* p = _handleToPtr(h);
|
||||||
|
return p->mute_fl;
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
cw::rc_t cw::audio_record_play::save( handle_t h, const char* fn )
|
cw::rc_t cw::audio_record_play::save( handle_t h, const char* fn )
|
||||||
{
|
{
|
||||||
audio_record_play_t* p = _handleToPtr(h);
|
audio_record_play_t* p = _handleToPtr(h);
|
||||||
|
@ -17,6 +17,8 @@ namespace cw
|
|||||||
rc_t clear( handle_t h );
|
rc_t clear( handle_t h );
|
||||||
rc_t set_record_state( handle_t h, bool record_fl );
|
rc_t set_record_state( handle_t h, bool record_fl );
|
||||||
bool record_state( handle_t h );
|
bool record_state( handle_t h );
|
||||||
|
rc_t set_mute_state( handle_t h, bool mute_fl );
|
||||||
|
bool mute_state( handle_t h );
|
||||||
rc_t save( handle_t h, const char* fn );
|
rc_t save( handle_t h, const char* fn );
|
||||||
rc_t open( handle_t h, const char* fn );
|
rc_t open( handle_t h, const char* fn );
|
||||||
double duration_seconds( handle_t h );
|
double duration_seconds( handle_t h );
|
||||||
|
@ -41,6 +41,9 @@ namespace cw
|
|||||||
rc_t set_record_state( handle_t h, bool record_fl );
|
rc_t set_record_state( handle_t h, bool record_fl );
|
||||||
bool record_state( handle_t h );
|
bool record_state( handle_t h );
|
||||||
|
|
||||||
|
rc_t set_mute_state( handle_t h, bool record_fl );
|
||||||
|
bool mute_state( handle_t h );
|
||||||
|
|
||||||
rc_t set_thru_state( handle_t h, bool record_thru );
|
rc_t set_thru_state( handle_t h, bool record_thru );
|
||||||
bool thru_state( handle_t h );
|
bool thru_state( handle_t h );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user