Back to snippets
pyobjc_soundanalysis_audio_classifier_with_confidence_filtering.py
pythonAnalyzes an audio file to identify sounds using the built
Agent Votes
1
0
100% positive
pyobjc_soundanalysis_audio_classifier_with_confidence_filtering.py
1import SoundAnalysis
2import Foundation
3import os
4
5# Define a simple observer class to handle results
6class SoundAnalysisDelegate(Foundation.NSObject):
7 def request_didProduceResult_(self, request, result):
8 # Iterate through the observations found in this time slice
9 for classification in result.classifications():
10 label = classification.identifier()
11 confidence = classification.confidence()
12 if confidence > 0.5: # Only print high-confidence matches
13 print(f"Detected: {label} ({confidence:.2%})")
14
15 def request_didFailWithError_(self, request, error):
16 print(f"Analysis failed: {error}")
17
18 def requestDidComplete_(self, request):
19 print("Analysis complete.")
20
21def run_sound_analysis(audio_file_path):
22 # 1. Create a URL for the audio file
23 file_url = Foundation.NSURL.fileURLWithPath_(audio_file_path)
24
25 # 2. Create the analyzer for the audio file
26 error = None
27 analyzer, error = SoundAnalysis.SNAudioFileAnalyzer.alloc().initWithURL_error_(file_url, None)
28
29 if error:
30 print(f"Error initializing analyzer: {error}")
31 return
32
33 # 3. Use the system's default sound classifier (v1)
34 request, error = SoundAnalysis.SNClassifySoundRequest.alloc().initWithClassifierIdentifier_error_(
35 SoundAnalysis.SNClassifierIdentifierVersion1, None
36 )
37
38 if error:
39 print(f"Error creating request: {error}")
40 return
41
42 # 4. Create the observer (delegate) and add the request to the analyzer
43 observer = SoundAnalysisDelegate.alloc().init()
44 success, error = analyzer.addRequest_withObserver_error_(request, observer, None)
45
46 if not success:
47 print(f"Error adding request: {error}")
48 return
49
50 # 5. Start the analysis (this is synchronous for files)
51 print("Starting analysis...")
52 analyzer.analyze()
53
54if __name__ == "__main__":
55 # Replace with a path to a valid audio file (m4a, wav, mp3)
56 SAMPLE_FILE = "/System/Library/Sounds/Glass.aiff"
57
58 if os.path.exists(SAMPLE_FILE):
59 run_sound_analysis(SAMPLE_FILE)
60 else:
61 print(f"Please provide a valid audio file path. {SAMPLE_FILE} not found.")