cwIoAudioMidiApp,cwIoAudioRecordPlay,cwIoMidiRecordPlay : Add 'mute' feature

This commit is contained in:
kevin 2022-11-11 14:03:22 -05:00
parent 4b65621c68
commit 7edcb3309d
4 changed files with 70 additions and 23 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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 );

View File

@ -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 );