🎙️ AI Voice Button

Interaktives Ausstellungs-Setup – Mac Mini + Physischer Knopf + ElevenLabs

🔘 Hardware: Buttons zum Bestellen

🥇 Option 1: USB Panic Button / Big Red Button

~25-45 CHF

Plug & Play USB-Button. Wird als HID-Keyboard erkannt (meist als "Enter" oder "F12"). Einfachste Lösung, kein Arduino nötig. Oft als "Panic Button" verkauft.

🏆 Alternative: USB Foot Pedal (auch gut!)

~20-35 CHF

USB-Fußpedal – gleiches Prinzip wie der Button, aber stabiler und oft günstiger. Wird auch als HID-Keyboard erkannt. Für Ausstellung evtl. interessant: "Tritt auf den Knopf".

🥈 Option 2: Arcade Button + Arduino Pro Micro

~25-40 CHF

Profi-Lösung mit echtem Arcade-Feeling. Arduino Pro Micro emuliert Keyboard. Kann mit LED-Ring erweitert werden. Anspruchsvoller, aber stylischer.

🥉 Option 3: Wireless Presenter Clicker

~15-25 CHF

Budget-Alternative. Funk-Präsentations-Clicker, aber funktioniert auch. Weniger "Ausstellungs-Wow-Effekt".

Tech Stack

Mac Mini M2/M3 Host-Computer
Python 3.11+ Haupt-App
PyAudio Audio-Aufnahme
OpenAI Whisper Speech-to-Text
Claude/ChatGPT API LLM Antworten
ElevenLabs Text-to-Speech

🔄 Ablauf (Workflow)

1
Gast drückt Button → LED leuchtet auf (Recording-Status)
2
Audio-Aufnahme startet (5-10s oder bis Knopf losgelassen)
3
Whisper API transkribiert Sprache → Text
4
LLM (Claude) generiert passende Antwort
5
ElevenLabs streamt Audio in Echtzeit
6
Wiedergabe über Mac Mini Lautsprecher

💻 Code-Grundgerüst

# voice_button.py
import keyboard
import sounddevice as sd
import numpy as np
import wavio
import openai
import requests
from elevenlabs import generate, stream, set_api_key
import os
from datetime import datetime

# API Keys
openai.api_key = os.getenv("OPENAI_API_KEY")
set_api_key(os.getenv("ELEVENLABS_API_KEY"))

# Config
SAMPLE_RATE = 16000
RECORDING = False
audio_buffer = []

def record_callback(indata, frames, time, status):
    global audio_buffer
    if RECORDING:
        audio_buffer.append(indata.copy())

def start_recording():
    global RECORDING, audio_buffer
    print("🔴 Aufnahme startet...")
    RECORDING = True
    audio_buffer = []
    # LED einschalten (falls vorhanden)

def stop_recording():
    global RECORDING
    RECORDING = False
    print("⏹️ Aufnahme stoppt...")
    
    # Audio speichern
    if audio_buffer:
        audio = np.concatenate(audio_buffer, axis=0)
        filename = f"recording_{datetime.now().strftime('%Y%m%d_%H%M%S')}.wav"
        wavio.write(filename, audio, SAMPLE_RATE, sampwidth=2)
        
        # Verarbeitung
        process_audio(filename)

def process_audio(filename):
    # 1. Transkription
    with open(filename, "rb") as audio_file:
        transcript = openai.audio.transcriptions.create(
            model="whisper-1",
            file=audio_file
        )
    print(f"📝 Gesagt: {transcript.text}")
    
    # 2. LLM Antwort
    response = openai.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "Du bist ein freundlicher Ausstellungs-Guide. Antworte kurz und prägnant auf Deutsch."},
            {"role": "user", "content": transcript.text}
        ]
    )
    answer = response.choices[0].message.content
    print(f"🤖 Antwort: {answer}")
    
    # 3. ElevenLabs TTS (Streaming)
    audio_stream = generate(
        text=answer,
        voice="Scarlett",  # oder: "Adam", "Bella", "Antoni"
        model="eleven_turbo_v2",
        stream=True
    )
    stream(audio_stream)
    print("✅ Fertig!")

# Keyboard Listener
def on_space_press(e):
    if e.event_type == 'down' and not RECORDING:
        start_recording()
    elif e.event_type == 'up' and RECORDING:
        stop_recording()

print("🎙️ Voice Button bereit. Drück Space...")
keyboard.hook_key('space', on_space_press)
keyboard.wait()

💰 Kosten-Schätzung

Komponente Kosten
Dream Cheeky Button ~40 CHF
OpenAI Whisper ~$0.006/min
Claude GPT-4 ~$0.03/Anfrage
ElevenLabs ~$5/1000 Zeichen
Pro 100 Interaktionen ~$10-15
⚠️ Hinweis: ElevenLabs hat ein kostenloses Kontingent (10k Zeichen/Monat). Für eine Ausstellung reicht das locker. Ansonsten: Starter Plan für $5/Monat.

📦 Installation (Mac Mini)

# 1. Python Dependencies
pip install openai elevenlabs sounddevice wavio numpy keyboard

# 2. ElevenLabs API Key holen
# → https://elevenlabs.io/app/settings/api-keys

# 3. OpenAI API Key holen  
# → https://platform.openai.com/api-keys

# 4. Environment Variables setzen
export OPENAI_API_KEY="sk-..."
export ELEVENLABS_API_KEY="..."

# 5. App starten
python voice_button.py

🚀 Alternative: Realtime Voice (Pro-Level)

Für echten "Live-Gespräch"-Modus statt Knopf-Drücken:

Das ist komplexer, aber fühlt sich an wie ChatGPT Voice.

📋 Shopping-Checkliste

📦 Bestellung – 60mm USB Button

Bestellnummer
CH-VICE-68450
Shop
vicedeal.com
Email
gsalami@gmail.com
Versand
Track & Trace (CHF 1.99)
60mm USB Benutzerdefinierte Taste CHF 33.49
Versand CHF 1.00
Total ~CHF 35.48
📍 Lieferadresse

Räffelstrasse 26
8045 Zürich
Schweiz (CH)

Tracking-Links
Status
Bestätigt – Warte auf Versand