1 /*
2 Copyright (C) 2016 Apple Inc. All Rights Reserved.
3 See LICENSE.txt for this sample’s licensing information
4
5 Abstract:
6 Part of Core Audio AUInstrument Base Classes
7 */
8
9 #include "SynthNote.h"
10 #include "SynthElement.h"
11 #include "AUInstrumentBase.h"
12
AttackNote(SynthPartElement * inPart,SynthGroupElement * inGroup,NoteInstanceID inNoteID,UInt64 inAbsoluteSampleFrame,UInt32 inOffsetSampleFrame,const MusicDeviceNoteParams & inParams)13 bool SynthNote::AttackNote(
14 SynthPartElement * inPart,
15 SynthGroupElement * inGroup,
16 NoteInstanceID inNoteID,
17 UInt64 inAbsoluteSampleFrame,
18 UInt32 inOffsetSampleFrame,
19 const MusicDeviceNoteParams &inParams)
20 {
21 #if DEBUG_PRINT
22 printf("SynthNote::AttackNote %lu %lu abs frame %llu rel frame %lu\n", (UInt32)inGroup->GroupID(), (UInt32)inNoteID, inAbsoluteSampleFrame, inOffsetSampleFrame);
23 #endif
24 mPart = inPart;
25 mGroup = inGroup;
26 mNoteID = inNoteID;
27
28 mAbsoluteStartFrame = inAbsoluteSampleFrame;
29 mRelativeStartFrame = inOffsetSampleFrame;
30 mRelativeReleaseFrame = -1;
31 mRelativeKillFrame = -1;
32
33 mPitch = inParams.mPitch;
34 mVelocity = inParams.mVelocity;
35
36
37 return Attack(inParams);
38 }
39
40
Reset()41 void SynthNote::Reset()
42 {
43 mPart = 0;
44 mGroup = 0;
45 mAbsoluteStartFrame = 0;
46 mRelativeStartFrame = 0;
47 mRelativeReleaseFrame = -1;
48 mRelativeKillFrame = -1;
49 }
50
Kill(UInt32 inFrame)51 void SynthNote::Kill(UInt32 inFrame)
52 {
53 mRelativeKillFrame = inFrame;
54 }
55
Release(UInt32 inFrame)56 void SynthNote::Release(UInt32 inFrame)
57 {
58 mRelativeReleaseFrame = inFrame;
59 }
60
FastRelease(UInt32 inFrame)61 void SynthNote::FastRelease(UInt32 inFrame)
62 {
63 mRelativeReleaseFrame = inFrame;
64 }
65
TuningA() const66 double SynthNote::TuningA() const
67 {
68 return 440.0;
69 }
70
Frequency()71 double SynthNote::Frequency()
72 {
73 return TuningA() * pow(2., (mPitch - 69. + GetPitchBend()) / 12.);
74 }
75
SampleRate()76 double SynthNote::SampleRate()
77 {
78 return GetAudioUnit()->GetOutput(0)->GetStreamFormat().mSampleRate;
79 }
80
GetAudioUnit() const81 AUInstrumentBase* SynthNote::GetAudioUnit() const
82 {
83 return (AUInstrumentBase*)mGroup->GetAudioUnit();
84 }
85
GetGlobalParameter(AudioUnitParameterID inParamID) const86 Float32 SynthNote::GetGlobalParameter(AudioUnitParameterID inParamID) const
87 {
88 return mGroup->GetAudioUnit()->Globals()->GetParameter(inParamID);
89 }
90
NoteEnded(UInt32 inFrame)91 void SynthNote::NoteEnded(UInt32 inFrame)
92 {
93 mGroup->NoteEnded(this, inFrame);
94 mNoteID = 0xFFFFFFFF;
95 }
96
GetPitchBend() const97 float SynthNote::GetPitchBend() const
98 {
99 return mGroup->GetPitchBend();
100 }
101
102
103