Audiowiedergabe/Aufnahme Programieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Audiowiedergabe/Aufnahme Programieren

    Hallo,

    ich versuche mich gerade an meiner ersten iPhone App und wer hätte es erwartet, ich habe Probleme! ;)
    Zu meinem Vorwissen: C/C++ und ein wenig DirectX Audio (aber nur sehr rudimentär).
    Was ich vorhabe: Ich möchte ein Sonar für das iPhone Programmieren, also eine Entfernungsbestimmung zu einem Objekt per Schall.

    Ich habe das Projekt schon auf einem TMS320C6713 DSK Board mit einem Komilitonen zusammen realisiert, die Algorithmik dahinter funktioniert also und ist recht trivial! ;)

    Zu meinen Problemen:
    Ich habe jetzt erst einmal versucht eine Art Stoppuhr zu realisieren:

    Quellcode

    1. -(IBAction)Start { for (int i=0; i<100;i++) { NSString= *test=[NSString stringWithFormat:@"%i",i]; Measurement.text=test; usleep(100000); }}

    Measurement ist ein UILabel
    die Aktion ist mit einem Button der Aktion "Touch Up Inside" verknüpft.

    Das Programm soll jede 100ms um 1 höher zählen und das anzeigen (also nach ca. 10 sekunden die 99 erreicht haben).
    Es passiert allerdings folgendes, ich klicke auf start, das Label verändert sich nicht, erst nach 10 Sekunden wir die 99 angezeigt, Zwischenschritte allerdings nicht. Es mir auffällt ist, dass der Button der mit der Start Aktion verknüpft ist "blau" (also gedrückt) bleibt bis gezählt wurde.
    Wo liegt mein Denkfehler?

    Da ich später auf eine Audioausgabe hinaus möchte, wäre es schön eine gute Übersicht über die audioverarbeitung zu bekommen. Wo kann ich das finden?
    -Ich habe eine harte Echtzeitanforderung (auf 30us genau) für die Ausgabe und die Aufnahme. Geht das auf dem iPhone überhaupt?
    -Zudem muss ich die Aufnahme und die Ausgabe miteinander korrelieren können, dafür wäre es am schönsten wenn meine Ausgabe und meine Aufnahme in einem Array mit "n" Abtastwerten gespeichert wäre, allerdings wäre es auch ok wenn ich aus einer Audio Aufnahme die Abtastwerte herausbekommen kann, wie ist das möglich?

    Was mich mal so interessiert, wie viele Bilder kann man mit dem iPhone pro Sekunde machen (schlechteste Qualität)?

    Gruß,
    Auti
  • Moin,

    du bist ein Gefangener der For-Schleife.
    Solange die Schleife durchlaufen wird, springt die Anwendung nicht in die Runloop zurück, es erfolgt also keine Anpassung der Anzeige.
    Nimm einen Timer.

    Für die Audioverarbeitung musst du dich vermutlich mit Core Audio auseinandersetzen. Dazu gibt es neben vielen SampleCodes auch einige Beiträge im Forum.

    Zu deinen restlichen Fragen:
    - keine Ahnung, ob das überhaupt geht. Auf Grund der Programmiersprache hast du einen gewissen Daten- und Zeitoverhead. Über die Realisierung echtzeitkritischer Anwendungen auf den Geräten kann ich keine Aussagen tätigen.
    In der Tat ist es aber interessant zu wissen.
    - Core Audio. Ich weiß nur nicht, ob das iDevice gleichzeitig ausgeben und einholen kann. Auch hier wieder: SampleCodes studieren.
    - Klingt nach AVFoundation und hängt neben der Qualität vermutlich auch davon ab, ob du auf den Autofocus der Kamera wartest oder nicht. Vermutlich ist es einfacher, das als Film aufzunehmen.

    Da es sich halt um ein Casual Device handelt gehe ich in allen Punkten vom Schlechtesten aus:
    30us bekommst du nicht hin, die Kamera wird maximal 2 Bilder die Sekunde schießen. +schulter zuck+
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Danke ihr Zwei, hatte nicht gewusst, dass die Anpassung in einer loop stattfindet. Dann werde ich das mal probieren.

    Also ich habe mal irgendwo was gelesen, dass es gleichzeitig aufnehmen und abspielen kann (sonnst wäre skype auch nur ein Funkgerät :D).
    Mit der Echtzeitanforderung kucke ich mal, im Zweifelsfall muss ich halt Abstriche in der Genauigkeit machen... Ist ja auch erst mal nur ne Idee, wenn es funktioniert mache ich dann daraus hoffentlich ne Studienarbeit... :D
    Mal kucken was für Anforderungen ich mit dem Sound hin bekomme, werde mich melden wenn ich was habe! :D
  • Das ist kein Problem. Solange du CoreAudio nicht zwischendurch stoppst, kannst du dich auf den Callback vom OS verlassen. Der ist sogar so nett und sagt dir bescheid, wie viel Uhr es am Anfang der gelieferten Eingangsdaten war und wie viel Uhr es sein wird, wenn die Ausgangsdaten die er gerade anforderst abgespielt werden. Damit kannst du die Latenz ausgleichen, egal wie lang sie ist. Da brauchst du dir also schonmal keine Sorgen machen. Die Echtzeitfähigkeit von iOS ist vielleicht nicht hart wie Kruppstahl, aber für sowas allemal hart genug. Größere Sorgen musst du dich um die akustischen Eigenschaften deines Messsystems machen. ;)
  • ahhh, sehr cool, hatte mir aber schon ne andere Möglichkeit überlegt wie ich das machen kann ohne dass Echtzeit wichtig ist.
    Das mit den Audioeigenschaften werde ich schon feststellen, aber ich denke, dass das von 1kHz bis 10kHz schon funktioniert, wenn nicht arbeite ich mit ner geringeren Bandbreite, das System ist recht unanfällig für Störungen. Mal kucken wie das Micro tut.. :D