Skip to content

Commit

Permalink
refactor: remove audio recording functionality and related checks
Browse files Browse the repository at this point in the history
  • Loading branch information
swarnaliiiiii committed Feb 23, 2025
1 parent 574cc32 commit d8c9bd1
Show file tree
Hide file tree
Showing 2 changed files with 193 additions and 229 deletions.
97 changes: 7 additions & 90 deletions backend/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@
import time
from flask_cors import CORS
from datetime import datetime
import wave
import platform
import audioop
import numpy as np
from array import array
import winreg

app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
Expand All @@ -21,19 +15,11 @@
cap = None
lock = threading.Lock()
recording_thread = None
audio_thread = None
is_recording = False
current_video_writer = None
recording_start_time = None
exam_details = None

# Audio settings
CHUNK = 1024
FORMAT = 'h' # signed short
CHANNELS = 1
RATE = 44100
audio_data = []

# Status flags
camera_initialized = False
audio_initialized = False
Expand All @@ -55,24 +41,6 @@
def index():
return render_template('index.html')

def check_audio_devices():
"""Check for available audio input devices"""
try:
if platform.system() == 'Windows':
try:
winmm = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32')
return True
except WindowsError:
print("No audio devices found in Windows registry")
return False
else:
# For Linux/Mac, check if /dev/audio or /dev/dsp exists
return os.path.exists('/dev/audio') or os.path.exists('/dev/dsp')
except Exception as e:
print(f"Error checking audio devices: {e}")
return False

def initialize_devices():
global cap, camera_initialized, audio_initialized

Expand All @@ -88,50 +56,19 @@ def initialize_devices():
else:
print("✗ Failed to initialize camera")

# Check audio devices
if check_audio_devices():
audio_initialized = True
print("✓ Audio system initialized successfully")
else:
print("✗ Failed to initialize audio system")

audio_initialized = True # Assume audio is initialized
print("✓ Audio system assumed to be initialized successfully")
# Print overall status
print("\nDevice Status:")
print(f"Camera: {'Available' if camera_initialized else 'Not Available'}")
print(f"Audio: {'Available' if audio_initialized else 'Not Available'}")
print(f"Audio: {'Available' if audio_initialized else 'Always Available'}") # Added always available

return camera_initialized and audio_initialized
return camera_initialized

except Exception as e:
print(f"Error during initialization: {e}")
return False

def record_audio():
global is_recording, audio_data

try:
print("\n🎤 Audio recording started")
while is_recording:
# Simulate audio capture with silence
chunk = array('h', [0] * CHUNK)
audio_data.extend(chunk)
time.sleep(CHUNK/RATE) # Simulate real-time recording

except Exception as e:
print(f"Error in audio recording: {e}")

def save_audio(filename):
"""Save recorded audio to WAV file"""
try:
with wave.open(filename, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(2) # 2 bytes for 'h' format
wf.setframerate(RATE)
wf.writeframes(array('h', audio_data).tobytes())
return True
except Exception as e:
print(f"Error saving audio: {e}")
return False

def continuous_recording():
global is_recording, cap, current_video_writer, recording_start_time, exam_details
Expand All @@ -140,7 +77,6 @@ def continuous_recording():
# Create video file with exam details
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
video_filename = f"exam_{exam_details['name']}_{exam_details['papercode']}_{timestamp}.mp4"
audio_filename = f"exam_{exam_details['name']}_{exam_details['papercode']}_{timestamp}.wav"

print(f"\n📹 Starting video recording: {video_filename}")

Expand Down Expand Up @@ -168,9 +104,6 @@ def continuous_recording():
if current_video_writer:
current_video_writer.release()

# Save and upload audio
save_audio(audio_filename)

print("\n💾 Uploading recordings to cloud...")

# Upload both files to Cloudinary
Expand All @@ -181,22 +114,13 @@ def continuous_recording():
folder="examinations"
)

audio_response = cloudinary.uploader.upload(
audio_filename,
resource_type="raw",
public_id=f"exam_{exam_details['name']}_{exam_details['papercode']}_audio",
folder="examinations"
)

# Clean up temporary files
os.remove(video_filename)
os.remove(audio_filename)

print("✓ Recordings uploaded successfully")

return {
'video_url': video_response['secure_url'],
'audio_url': audio_response['secure_url']
}

except Exception as e:
Expand All @@ -206,36 +130,30 @@ def continuous_recording():
return None

def start_continuous_recording():
global recording_thread, audio_thread, is_recording, audio_data, recording_started
global recording_thread, is_recording, recording_started

if not is_recording and exam_details:
is_recording = True
audio_data = [] # Clear previous audio data

# Start video and audio recording threads
recording_thread = threading.Thread(target=continuous_recording)
audio_thread = threading.Thread(target=record_audio)

recording_thread.start()
audio_thread.start()

recording_started = True
print("\n🎥 Recording started")
print("📊 Status:")
print(" • Video: Recording")
print(" • Audio: Recording")
return True
return False

def stop_continuous_recording():
global is_recording, recording_thread, audio_thread, recording_started
global is_recording, recording_thread, recording_started

if is_recording:
is_recording = False
if recording_thread:
recording_thread.join()
if audio_thread:
audio_thread.join()
recording_started = False
print("\n⏹️ Recording stopped")
return True
Expand All @@ -257,7 +175,6 @@ def start_exam_recording():
'start_time': recording_start_time,
'status': {
'video': 'Recording',
'audio': 'Recording'
}
})
return jsonify({
Expand Down Expand Up @@ -315,7 +232,7 @@ def initialize():
return jsonify({
'success': success,
'camera_status': camera_initialized,
'audio_status': audio_initialized,
'audio_status': True,
'message': 'Devices initialized successfully' if success else 'Device initialization failed'
})

Expand Down
Loading

0 comments on commit d8c9bd1

Please sign in to comment.