Skip to content

Commit 4b7e267

Browse files
feat: Added delay and play
1 parent 441e514 commit 4b7e267

40 files changed

Lines changed: 257 additions & 10 deletions

App.tsx

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import {
55
Button,
66
SafeAreaView,
77
StatusBar,
8+
StyleSheet,
89
Text,
10+
TouchableOpacity,
911
useColorScheme,
1012
View,
1113
} from 'react-native';
@@ -14,7 +16,7 @@ import {
1416
Colors,
1517
} from 'react-native/Libraries/NewAppScreen';
1618
import Slider from '@react-native-community/slider';
17-
import { playBrownNoise, playPinkNoise, playWhiteNoise, stopBrownNoise, stopPinkNoise, stopWhiteNoise } from './src/audioEffects';
19+
import { playBrownNoise, playPinkNoise, playSound, playWhiteNoise, stopBrownNoise, stopPinkNoise, stopSound, stopWhiteNoise } from './src/audioEffects';
1820

1921

2022

@@ -72,12 +74,19 @@ function App(): React.JSX.Element {
7274
<StatusBar />
7375
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
7476
<View style={{height: '100%', justifyContent: 'center', }}>
75-
<Text style={{fontSize: 24, marginVertical: 12, fontWeight: '700'}}>Noise Generators</Text>
76-
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between'}}>
77+
<Text style={styles.titleStyle}>Play Sound</Text>
78+
<TouchableOpacity onPress={() => playSound(true, './src/assets/Samples/clap_D#1.wav', 0.4)}>
79+
<Text>Play my sound</Text>
80+
</TouchableOpacity>
81+
<TouchableOpacity onPress={() => stopSound()}>
82+
<View style={styles.buttonStyle}></View>
83+
</TouchableOpacity>
84+
<Text style={styles.titleStyle}>Noise Generators</Text>
85+
<View style={styles.sliderLabelContainer}>
7786
<Text style={{padding: 12}}>Brown Noise</Text>
7887
<Slider
7988
value={brownNoiseLevel}
80-
style={{width: 200, height: 40,}}
89+
style={styles.sliderContainer}
8190
tapToSeek
8291
minimumValue={0}
8392
maximumValue={1}
@@ -86,11 +95,11 @@ function App(): React.JSX.Element {
8695
onValueChange={(value) => handleSliderChange(value, 'brown')}
8796
/>
8897
</View>
89-
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between'}}>
98+
<View style={styles.sliderLabelContainer}>
9099
<Text style={{padding: 12}}>Pink Noise</Text>
91100
<Slider
92101
value={pinkNoiseLevel}
93-
style={{width: 200, height: 40 }}
102+
style={styles.sliderContainer}
94103
tapToSeek
95104
minimumValue={0}
96105
maximumValue={1}
@@ -99,11 +108,11 @@ function App(): React.JSX.Element {
99108
onValueChange={(value) => handleSliderChange(value, 'pink')}
100109
/>
101110
</View>
102-
<View style={{flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between'}}>
111+
<View style={styles.sliderLabelContainer}>
103112
<Text style={{padding: 12}}>White Noise</Text>
104113
<Slider
105114
value={whiteNoiseLevel}
106-
style={{width: 200, height: 40 }}
115+
style={styles.sliderContainer}
107116
tapToSeek
108117
minimumValue={0}
109118
maximumValue={1}
@@ -120,4 +129,35 @@ function App(): React.JSX.Element {
120129
);
121130
}
122131

132+
const styles = StyleSheet.create({
133+
titleStyle: {
134+
fontSize: 24,
135+
marginVertical: 12,
136+
fontWeight: '700'
137+
},
138+
sliderContainer: {
139+
width: 200,
140+
height: 40
141+
},
142+
sliderLabelContainer: {
143+
flexDirection: 'row',
144+
alignItems: 'center',
145+
justifyContent: 'space-between'
146+
},
147+
buttonStyle: {
148+
backgroundColor: 'red',
149+
height: 10,
150+
width: 10,
151+
shadowColor: "#000",
152+
shadowOffset: {
153+
width: 0,
154+
height: 2,
155+
},
156+
shadowOpacity: 0.25,
157+
shadowRadius: 3.84,
158+
159+
elevation: 5,
160+
}
161+
})
162+
123163
export default App;

ios/AudioEffects.swift

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Foundation
1111
import React
1212
import SoundpipeAudioKit
1313
import AudioKit
14+
import AVFoundation
1415

1516
@objc(AudioEffects)
1617
public class AudioEffects: RCTEventEmitter {
@@ -20,8 +21,9 @@ public class AudioEffects: RCTEventEmitter {
2021
private var brownianNoise = BrownianNoise()
2122
private var pinkNoise = PinkNoise()
2223
private var whiteNoise = WhiteNoise()
23-
2424
private var mixer = Mixer()
25+
private var conductor = DelayConductor()
26+
private var isPlaying = false;
2527

2628
public override init() {
2729
super.init()
@@ -92,6 +94,48 @@ public class AudioEffects: RCTEventEmitter {
9294
whiteNoise.stop() // Stop the noise generator
9395
}
9496

97+
@objc(playSound:fileName:decibels:)
98+
public func playSound(isLoop: Bool, fileName: String, decibels: Float){
99+
conductor.player.stop()
100+
Log(fileName);
101+
102+
guard let url = URL(string: fileName),
103+
let buffer = try? AVAudioPCMBuffer(url: url)
104+
else {
105+
Log("failed to load sample", fileName)
106+
return
107+
}
108+
conductor.player.buffer = buffer
109+
conductor.player.volume = decibels
110+
conductor.player.file = try? AVAudioFile(forReading: url)
111+
conductor.player.isLooping = true
112+
113+
if isPlaying == false {
114+
115+
conductor.player.play()
116+
}
117+
}
118+
119+
@objc(stopSound)
120+
public func stopSound(){
121+
conductor.player.stop()
122+
}
123+
124+
@objc(addDelayToSound:delayTime:feedback:lowPassCutoff:)
125+
public func addDelayToSound(dryWetMix: Float, delayTime: Float, feedback: Float, lowPassCutoff: Float) {
126+
127+
conductor.delay.feedback = feedback;
128+
conductor.delay.time = delayTime;
129+
conductor.delay.lowPassCutoff = lowPassCutoff;
130+
conductor.dryWetMixer.balance = dryWetMix;
131+
conductor.player.play()
132+
}
133+
134+
@objc(stopDelayPlayer)
135+
public func addDelay() {
136+
conductor.player.stop()
137+
}
138+
95139
override public func supportedEvents() -> [String]! {
96140
return []
97141
}

ios/AudioEffects.xcodeproj/project.pbxproj

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 56;
6+
objectVersion = 70;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -16,6 +16,23 @@
1616
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
1717
840D9F942CA1B080007F51EE /* EventEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D9F922CA1B080007F51EE /* EventEmitter.swift */; };
1818
840D9F952CA1B080007F51EE /* EventType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840D9F932CA1B080007F51EE /* EventType.swift */; };
19+
844A12442CA466B500FAAD9E /* AudioUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844A12432CA466B000FAAD9E /* AudioUtils.swift */; };
20+
844A12572CA4695F00FAAD9E /* beat.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 844A12492CA4695F00FAAD9E /* beat.aiff */; };
21+
844A12582CA4695F00FAAD9E /* lo_tom_F1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A124F2CA4695F00FAAD9E /* lo_tom_F1.wav */; };
22+
844A12592CA4695F00FAAD9E /* Piano.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A12522CA4695F00FAAD9E /* Piano.mp3 */; };
23+
844A125A2CA4695F00FAAD9E /* Guitar.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A124D2CA4695F00FAAD9E /* Guitar.mp3 */; };
24+
844A125B2CA4695F00FAAD9E /* alphabet.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A12462CA4695F00FAAD9E /* alphabet.mp3 */; };
25+
844A125C2CA4695F00FAAD9E /* hi_tom_D2.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A124E2CA4695F00FAAD9E /* hi_tom_D2.wav */; };
26+
844A125D2CA4695F00FAAD9E /* snare_D1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A12532CA4695F00FAAD9E /* snare_D1.wav */; };
27+
844A125E2CA4695F00FAAD9E /* Counting.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A124C2CA4695F00FAAD9E /* Counting.mp3 */; };
28+
844A125F2CA4695F00FAAD9E /* Strings.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A12542CA4695F00FAAD9E /* Strings.mp3 */; };
29+
844A12602CA4695F00FAAD9E /* clap_D#1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A124A2CA4695F00FAAD9E /* clap_D#1.wav */; };
30+
844A12612CA4695F00FAAD9E /* bass_drum_C1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A12482CA4695F00FAAD9E /* bass_drum_C1.wav */; };
31+
844A12622CA4695F00FAAD9E /* mid_tom_B1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A12502CA4695F00FAAD9E /* mid_tom_B1.wav */; };
32+
844A12632CA4695F00FAAD9E /* Bass Synth.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A12472CA4695F00FAAD9E /* Bass Synth.mp3 */; };
33+
844A12642CA4695F00FAAD9E /* open_hi_hat_A#1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A12512CA4695F00FAAD9E /* open_hi_hat_A#1.wav */; };
34+
844A12652CA4695F00FAAD9E /* closed_hi_hat_F#1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 844A124B2CA4695F00FAAD9E /* closed_hi_hat_F#1.wav */; };
35+
844A12662CA4695F00FAAD9E /* Synth.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 844A12552CA4695F00FAAD9E /* Synth.mp3 */; };
1936
84C5BC942CA0C77E0087E46C /* AudioEffects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C5BC932CA0C77A0087E46C /* AudioEffects.swift */; };
2037
84C5BC992CA0CA080087E46C /* RNAudioEffectsBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 84C5BC982CA0CA050087E46C /* RNAudioEffectsBridge.m */; };
2138
84C5BC9B2CA0CD4F0087E46C /* SoundpipeAudioKit in Frameworks */ = {isa = PBXBuildFile; productRef = 84C5BC9A2CA0CD4F0087E46C /* SoundpipeAudioKit */; };
@@ -52,6 +69,24 @@
5269
840D9F912CA1B066007F51EE /* RNAudioEffects-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RNAudioEffects-Bridging-Header.h"; sourceTree = "<group>"; };
5370
840D9F922CA1B080007F51EE /* EventEmitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventEmitter.swift; sourceTree = "<group>"; };
5471
840D9F932CA1B080007F51EE /* EventType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventType.swift; sourceTree = "<group>"; };
72+
844A12432CA466B000FAAD9E /* AudioUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUtils.swift; sourceTree = "<group>"; };
73+
844A12462CA4695F00FAAD9E /* alphabet.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = alphabet.mp3; sourceTree = "<group>"; };
74+
844A12472CA4695F00FAAD9E /* Bass Synth.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "Bass Synth.mp3"; sourceTree = "<group>"; };
75+
844A12482CA4695F00FAAD9E /* bass_drum_C1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = bass_drum_C1.wav; sourceTree = "<group>"; };
76+
844A12492CA4695F00FAAD9E /* beat.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; path = beat.aiff; sourceTree = "<group>"; };
77+
844A124A2CA4695F00FAAD9E /* clap_D#1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = "clap_D#1.wav"; sourceTree = "<group>"; };
78+
844A124B2CA4695F00FAAD9E /* closed_hi_hat_F#1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = "closed_hi_hat_F#1.wav"; sourceTree = "<group>"; };
79+
844A124C2CA4695F00FAAD9E /* Counting.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Counting.mp3; sourceTree = "<group>"; };
80+
844A124D2CA4695F00FAAD9E /* Guitar.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Guitar.mp3; sourceTree = "<group>"; };
81+
844A124E2CA4695F00FAAD9E /* hi_tom_D2.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = hi_tom_D2.wav; sourceTree = "<group>"; };
82+
844A124F2CA4695F00FAAD9E /* lo_tom_F1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = lo_tom_F1.wav; sourceTree = "<group>"; };
83+
844A12502CA4695F00FAAD9E /* mid_tom_B1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = mid_tom_B1.wav; sourceTree = "<group>"; };
84+
844A12512CA4695F00FAAD9E /* open_hi_hat_A#1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = "open_hi_hat_A#1.wav"; sourceTree = "<group>"; };
85+
844A12522CA4695F00FAAD9E /* Piano.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Piano.mp3; sourceTree = "<group>"; };
86+
844A12532CA4695F00FAAD9E /* snare_D1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = snare_D1.wav; sourceTree = "<group>"; };
87+
844A12542CA4695F00FAAD9E /* Strings.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Strings.mp3; sourceTree = "<group>"; };
88+
844A12552CA4695F00FAAD9E /* Synth.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Synth.mp3; sourceTree = "<group>"; };
89+
845A90F52CA55611007508BE /* AudioEffectsRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = AudioEffectsRelease.entitlements; path = AudioEffects/AudioEffectsRelease.entitlements; sourceTree = "<group>"; };
5590
84C5BC932CA0C77A0087E46C /* AudioEffects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioEffects.swift; sourceTree = "<group>"; };
5691
84C5BC972CA0C9DD0087E46C /* RNAudioEffectsBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNAudioEffectsBridge.h; sourceTree = "<group>"; };
5792
84C5BC982CA0CA050087E46C /* RNAudioEffectsBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNAudioEffectsBridge.m; sourceTree = "<group>"; };
@@ -60,6 +95,10 @@
6095
FA7EE5A1F46B51218D3BD506 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = AudioEffects/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
6196
/* End PBXFileReference section */
6297

98+
/* Begin PBXFileSystemSynchronizedRootGroup section */
99+
842533292CA313E40099FBDF /* Effects */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Effects; sourceTree = "<group>"; };
100+
/* End PBXFileSystemSynchronizedRootGroup section */
101+
63102
/* Begin PBXFrameworksBuildPhase section */
64103
00E356EB1AD99517003FC87E /* Frameworks */ = {
65104
isa = PBXFrameworksBuildPhase;
@@ -101,6 +140,8 @@
101140
13B07FAE1A68108700A75B9A /* AudioEffects */ = {
102141
isa = PBXGroup;
103142
children = (
143+
845A90F52CA55611007508BE /* AudioEffectsRelease.entitlements */,
144+
842533292CA313E40099FBDF /* Effects */,
104145
8457FF072CA1596B00C945EF /* Utils */,
105146
84C5BC9C2CA0CDC20087E46C /* Support */,
106147
84C5BC982CA0CA050087E46C /* RNAudioEffectsBridge.m */,
@@ -114,6 +155,7 @@
114155
13B07FB71A68108700A75B9A /* main.m */,
115156
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
116157
FA7EE5A1F46B51218D3BD506 /* PrivacyInfo.xcprivacy */,
158+
844A12562CA4695F00FAAD9E /* Samples */,
117159
);
118160
name = AudioEffects;
119161
sourceTree = "<group>";
@@ -159,9 +201,33 @@
159201
name = Products;
160202
sourceTree = "<group>";
161203
};
204+
844A12562CA4695F00FAAD9E /* Samples */ = {
205+
isa = PBXGroup;
206+
children = (
207+
844A12462CA4695F00FAAD9E /* alphabet.mp3 */,
208+
844A12472CA4695F00FAAD9E /* Bass Synth.mp3 */,
209+
844A12482CA4695F00FAAD9E /* bass_drum_C1.wav */,
210+
844A12492CA4695F00FAAD9E /* beat.aiff */,
211+
844A124A2CA4695F00FAAD9E /* clap_D#1.wav */,
212+
844A124B2CA4695F00FAAD9E /* closed_hi_hat_F#1.wav */,
213+
844A124C2CA4695F00FAAD9E /* Counting.mp3 */,
214+
844A124D2CA4695F00FAAD9E /* Guitar.mp3 */,
215+
844A124E2CA4695F00FAAD9E /* hi_tom_D2.wav */,
216+
844A124F2CA4695F00FAAD9E /* lo_tom_F1.wav */,
217+
844A12502CA4695F00FAAD9E /* mid_tom_B1.wav */,
218+
844A12512CA4695F00FAAD9E /* open_hi_hat_A#1.wav */,
219+
844A12522CA4695F00FAAD9E /* Piano.mp3 */,
220+
844A12532CA4695F00FAAD9E /* snare_D1.wav */,
221+
844A12542CA4695F00FAAD9E /* Strings.mp3 */,
222+
844A12552CA4695F00FAAD9E /* Synth.mp3 */,
223+
);
224+
path = Samples;
225+
sourceTree = "<group>";
226+
};
162227
8457FF072CA1596B00C945EF /* Utils */ = {
163228
isa = PBXGroup;
164229
children = (
230+
844A12432CA466B000FAAD9E /* AudioUtils.swift */,
165231
840D9F922CA1B080007F51EE /* EventEmitter.swift */,
166232
840D9F932CA1B080007F51EE /* EventType.swift */,
167233
);
@@ -227,6 +293,9 @@
227293
);
228294
dependencies = (
229295
);
296+
fileSystemSynchronizedGroups = (
297+
842533292CA313E40099FBDF /* Effects */,
298+
);
230299
name = AudioEffects;
231300
productName = AudioEffects;
232301
productReference = 13B07F961A680F5B00A75B9A /* AudioEffects.app */;
@@ -286,6 +355,22 @@
286355
files = (
287356
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
288357
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
358+
844A12572CA4695F00FAAD9E /* beat.aiff in Resources */,
359+
844A12582CA4695F00FAAD9E /* lo_tom_F1.wav in Resources */,
360+
844A12592CA4695F00FAAD9E /* Piano.mp3 in Resources */,
361+
844A125A2CA4695F00FAAD9E /* Guitar.mp3 in Resources */,
362+
844A125B2CA4695F00FAAD9E /* alphabet.mp3 in Resources */,
363+
844A125C2CA4695F00FAAD9E /* hi_tom_D2.wav in Resources */,
364+
844A125D2CA4695F00FAAD9E /* snare_D1.wav in Resources */,
365+
844A125E2CA4695F00FAAD9E /* Counting.mp3 in Resources */,
366+
844A125F2CA4695F00FAAD9E /* Strings.mp3 in Resources */,
367+
844A12602CA4695F00FAAD9E /* clap_D#1.wav in Resources */,
368+
844A12612CA4695F00FAAD9E /* bass_drum_C1.wav in Resources */,
369+
844A12622CA4695F00FAAD9E /* mid_tom_B1.wav in Resources */,
370+
844A12632CA4695F00FAAD9E /* Bass Synth.mp3 in Resources */,
371+
844A12642CA4695F00FAAD9E /* open_hi_hat_A#1.wav in Resources */,
372+
844A12652CA4695F00FAAD9E /* closed_hi_hat_F#1.wav in Resources */,
373+
844A12662CA4695F00FAAD9E /* Synth.mp3 in Resources */,
289374
DD252903E090C9280E9D8DD8 /* PrivacyInfo.xcprivacy in Resources */,
290375
);
291376
runOnlyForDeploymentPostprocessing = 0;
@@ -441,6 +526,7 @@
441526
84C5BC992CA0CA080087E46C /* RNAudioEffectsBridge.m in Sources */,
442527
84C5BC942CA0C77E0087E46C /* AudioEffects.swift in Sources */,
443528
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
529+
844A12442CA466B500FAAD9E /* AudioUtils.swift in Sources */,
444530
13B07FC11A68108700A75B9A /* main.m in Sources */,
445531
);
446532
runOnlyForDeploymentPostprocessing = 0;
@@ -513,7 +599,9 @@
513599
buildSettings = {
514600
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
515601
CLANG_ENABLE_MODULES = YES;
602+
"CODE_SIGN_ENTITLEMENTS[sdk=*]" = AudioEffects/AudioEffectsRelease.entitlements;
516603
CURRENT_PROJECT_VERSION = 1;
604+
DEVELOPMENT_TEAM = U4285HLAYT;
517605
ENABLE_BITCODE = NO;
518606
INFOPLIST_FILE = AudioEffects/Info.plist;
519607
LD_RUNPATH_SEARCH_PATHS = (
@@ -541,7 +629,9 @@
541629
buildSettings = {
542630
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
543631
CLANG_ENABLE_MODULES = YES;
632+
CODE_SIGN_ENTITLEMENTS = AudioEffects/AudioEffectsRelease.entitlements;
544633
CURRENT_PROJECT_VERSION = 1;
634+
DEVELOPMENT_TEAM = U4285HLAYT;
545635
INFOPLIST_FILE = AudioEffects/Info.plist;
546636
LD_RUNPATH_SEARCH_PATHS = (
547637
"$(inherited)",
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.device.audio-input</key>
6+
<true/>
7+
<key>com.apple.security.app-sandbox</key>
8+
<true/>
9+
</dict>
10+
</plist>

ios/Effects/Delay.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//
2+
// Delay.swift
3+
// AudioEffects
4+
//
5+
// Created by Prateek Chachra on 24/9/24.
6+
//
7+
import AudioKit
8+
import AudioKitEX
9+
import AVFoundation
10+
11+
class DelayConductor: ObservableObject, ProcessesPlayerInput {
12+
let engine = AudioEngine()
13+
let player = AudioPlayer()
14+
let delay: Delay
15+
let dryWetMixer: DryWetMixer
16+
let buffer: AVAudioPCMBuffer
17+
18+
init() {
19+
buffer = AudioUtils.sourceBuffer
20+
player.buffer = buffer
21+
player.isLooping = true
22+
23+
delay = Delay(player)
24+
delay.feedback = 0.9
25+
delay.time = 0.01
26+
27+
// We're not using delay's built in dry wet mix because
28+
// we are tapping the wet result so it can be plotted.
29+
delay.dryWetMix = 100
30+
dryWetMixer = DryWetMixer(player, delay)
31+
engine.output = dryWetMixer
32+
}
33+
}

0 commit comments

Comments
 (0)