Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
__pycache__/
libraries/
myenv/
venv/
.DS_Store
axel_adam/*.txt
axel_adam/*.wav
Expand Down
62 changes: 43 additions & 19 deletions axel_adam/receive_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@
from datetime import datetime
import numpy as np
import time
import os
from scipy.signal import stft, istft

DEVICE_ID = "8901A373-2BC5-AEDB-077B-C2786C3F3C43"
DEVICE_ID = "FB41CA19-EC23-4769-38CA-DF822989BACB"
SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214"
CHARACTERISTIC_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214"

SAMPLE_RATE = 4000 # Sample rate for the audio
SAMPLE_WIDTH = 2 # 16-bit audio
CHANNELS = 1 # Mono audio

CAPTURE_TIME = 30 # Time to capture audio in seconds

async def main():
print("Discovering AudioRecorder...")
Expand All @@ -38,7 +41,10 @@ def filter_audio_data(audio_data):
return (audio_data * scaling_factor).astype(np.int16)

def export_audio_data(filtered_audio_data, file_extension):
filename = datetime.now().strftime("%H-%M-%S-%f") + file_extension
recordings_dir = "recordings"
if not os.path.exists(recordings_dir):
os.makedirs(recordings_dir)
filename = os.path.join(recordings_dir, datetime.now().strftime("%H-%M-%S-%f") + file_extension)
print(filename)
if file_extension == ".txt":
with open(filename, "w") as file:
Expand All @@ -51,32 +57,50 @@ def export_audio_data(filtered_audio_data, file_extension):
wav_file.setframerate(SAMPLE_RATE)
wav_file.writeframes(filtered_audio_data.tobytes()) # Ensure data is in bytes format


async def process_audio(audio_data):
if len(audio_data) == 0:
print("Warning: Received empty audio data array.")
return

filtered_audio_data = filter_audio_data(audio_data)
export_audio_data(filtered_audio_data, ".wav")
export_audio_data(filtered_audio_data, ".txt")
pass

async with BleakClient(audio_recorder.address, services=[SERVICE_UUID], disconnect_callback=handle_ble_disconnect) as client:
print("Connected to AudioRecorder")
services = await client.get_services()
audio_service = services.get_service(SERVICE_UUID)
audio_characteristic = audio_service.get_characteristic(CHARACTERISTIC_UUID)

audio_data = bytearray()
end_signal = b"\xFF"
# end_signal = b"\xFF"

def handle_audio_data(sender, data):
print("---handle_audio_data---")
print(f"Received {len(data)} bytes at {time.time()}")
audio_data.extend(data)
if data == [end_signal]:
print(f"End signal received after {len(audio_data)} bytes")
# if data == [end_signal]:
# print(f"End signal received after {len(audio_data)} bytes")


await client.start_notify(audio_characteristic.uuid, handle_audio_data)
print("Recording audio...")
await asyncio.sleep(60) # Wait for 10 seconds
await client.stop_notify(audio_characteristic.uuid)
print("Recording stopped")

filtered_audio_data = filter_audio_data(audio_data)
export_audio_data(filtered_audio_data, ".wav")
export_audio_data(filtered_audio_data, ".txt")
audio_data.clear()

asyncio.run(main())

async def record_audio():
await client.start_notify(audio_characteristic.uuid, handle_audio_data)
print("Recording audio...")
await asyncio.sleep(CAPTURE_TIME)
print("Recording stopped")
await client.stop_notify(audio_characteristic.uuid)

async def record_and_process():
while True:
await record_audio()
asyncio.ensure_future(process_audio(audio_data.copy()))
audio_data.clear()

await record_and_process()

# await record_audio()


asyncio.run(main())